Testing code
This commit is contained in:
parent
6df69b47eb
commit
fed3c7ee6f
21
.vscode/c_cpp_properties.json
vendored
Normal file
21
.vscode/c_cpp_properties.json
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
{
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Linux",
|
||||
"includePath": [
|
||||
"${workspaceFolder}/**"
|
||||
],
|
||||
"defines": [
|
||||
"_DEBUG",
|
||||
"UNICODE",
|
||||
"_UNICODE"
|
||||
],
|
||||
"windowsSdkVersion": "10.0.19041.0",
|
||||
"compilerPath": "C:/MinGW/bin/gcc.exe",
|
||||
"cStandard": "gnu17",
|
||||
"cppStandard": "gnu++17",
|
||||
"intelliSenseMode": "linux-gcc-x64"
|
||||
}
|
||||
],
|
||||
"version": 4
|
||||
}
|
||||
5
.vscode/settings.json
vendored
Normal file
5
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"files.associations": {
|
||||
"stdlib.h": "c"
|
||||
}
|
||||
}
|
||||
15
README.md
15
README.md
@ -1 +1,16 @@
|
||||
# ProxMon
|
||||
|
||||
Basic idea:
|
||||
Use the following PS command to gather basic data on processes:
|
||||
ps ax -o pid,ppid,uid,lxc,cuu,rss,times,etimes,stat,command --cols 1000
|
||||
|
||||
Use resident size as an approximation of real memory usage.
|
||||
|
||||
Use CPU utilization may need to be divided by CPU count
|
||||
|
||||
Structure of each entry:
|
||||
_id: unique ID of data point
|
||||
time: time sample was taken
|
||||
node: Node of process
|
||||
host: Host name
|
||||
hostType: Type of host ('node', 'lxc', 'vm')
|
||||
|
||||
101
py/ps_parse.py
Normal file
101
py/ps_parse.py
Normal file
@ -0,0 +1,101 @@
|
||||
field_defs = {
|
||||
'PID': {
|
||||
'desc': 'PID',
|
||||
'dtype': str,
|
||||
},
|
||||
'PPID': {
|
||||
'desc': 'Parent PID',
|
||||
'dtype': str,
|
||||
},
|
||||
'UID': {
|
||||
'desc': 'User ID',
|
||||
'dtype': str,
|
||||
},
|
||||
'LXC': {
|
||||
'desc': 'LXC ID',
|
||||
'dtype': str,
|
||||
},
|
||||
'%CUU': {
|
||||
'desc': 'CPU Use',
|
||||
'dtype': float,
|
||||
},
|
||||
'%MEM': {
|
||||
'desc': 'Memory Use',
|
||||
'dtype': float,
|
||||
},
|
||||
'VSZ': {
|
||||
'desc': 'Virtual Memory',
|
||||
'dtype': int,
|
||||
'mult': 1024,
|
||||
},
|
||||
'RSS': {
|
||||
'desc': 'Resident Memory',
|
||||
'dtype': int,
|
||||
'mult': 1024,
|
||||
},
|
||||
'PSS': {
|
||||
'desc': 'Proportional Shared Memory',
|
||||
'dtype': int,
|
||||
'mult': 1024,
|
||||
},
|
||||
'USS': {
|
||||
'desc': 'Unique Memory',
|
||||
'dtype': int,
|
||||
'mult': 1024,
|
||||
},
|
||||
'SZ': {
|
||||
'desc': 'Core Size',
|
||||
'dtype': int,
|
||||
'mult': 4096,
|
||||
},
|
||||
'SIZE': {
|
||||
'desc': 'Approximate Memory',
|
||||
'dtype': int,
|
||||
'mult': 1024,
|
||||
},
|
||||
'THCNT': {
|
||||
'desc': 'Thread Count',
|
||||
'dtype': int,
|
||||
},
|
||||
'TIME': {
|
||||
'desc': 'Execution Time',
|
||||
'dtype': int,
|
||||
},
|
||||
'ELAPSED': {
|
||||
'desc': 'Elapsed Time',
|
||||
'dtype': int,
|
||||
},
|
||||
'STAT': {
|
||||
'desc': 'Status',
|
||||
'dtype': str,
|
||||
},
|
||||
'COMMAND': {
|
||||
'desc': 'Command',
|
||||
'dtype': str,
|
||||
}
|
||||
}
|
||||
|
||||
def parseFile(fname):
|
||||
f = open(fname, 'r')
|
||||
data = f.read()
|
||||
f.close()
|
||||
|
||||
data = data.split('\n')
|
||||
data = list(filter(bool, [line.split() for line in data]))
|
||||
header = data[0]
|
||||
procs = []
|
||||
|
||||
for line in data[1:]:
|
||||
proc = {}
|
||||
for i in range(len(header)):
|
||||
field = field_defs[header[i]]
|
||||
value = line[i]
|
||||
if i == len(header):
|
||||
value = ' '.join(line[i:])
|
||||
value = field['dtype'](value)
|
||||
if 'mult' in field:
|
||||
value *= field['mult']
|
||||
proc[header[i]] = value
|
||||
procs.append(proc)
|
||||
return procs
|
||||
|
||||
33
src/exampledir.c
Normal file
33
src/exampledir.c
Normal file
@ -0,0 +1,33 @@
|
||||
#include <stdio.h>
|
||||
#include <dirent.h>
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
struct dirent *pDirent;
|
||||
DIR *pDir;
|
||||
|
||||
// Ensure correct argument count.
|
||||
|
||||
if (argc != 2) {
|
||||
printf("Usage: testprog <dirname>\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Ensure we can open directory.
|
||||
|
||||
pDir = opendir(argv[1]);
|
||||
if (pDir == NULL) {
|
||||
printf("Cannot open directory '%s'\n", argv[1]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Process each entry.
|
||||
|
||||
while ((pDirent = readdir(pDir)) != NULL) {
|
||||
printf("[%s]\n", pDirent->d_name);
|
||||
}
|
||||
|
||||
// Close directory and exit.
|
||||
|
||||
closedir(pDir);
|
||||
return 0;
|
||||
}
|
||||
12
src/proxmon.c
Normal file
12
src/proxmon.c
Normal file
@ -0,0 +1,12 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <dirent.h>
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
DIR *procdir = opendir("/proc");
|
||||
struct dirent *pDirent;
|
||||
|
||||
while ((pDirent = readdir(procdir)) != NULL) {
|
||||
printf("[%s]\n", pDirent->d_name);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user