Metrics Collection¶
A critical aspect of diagnosing software applications for embedded systems is collecting and visualizing the metrics data obtained from the device. This includes raw sensor measurements, internal hardware metrics, firmware/operating system metrics, and other high-level software metrics. For example, Unmanned Aerial Vehicles (UAV) obtain linear velocity, altitude, orientation measurements from its sensors, which can plotted on time-series graphs to diagnose flight control issues.
PSYGIG Mobility IoT SDK alleviates the complexity of writing specific code for each metric source with its built-in support for known sensors, internal hardware, operating systems and applications. The Metrics Collection API includes many features suitable for integration into embedded systems:
Works on existing applications; no need to recompile source code
Seamless integration with third party IoT platforms and databases/data warehouses
Automatically collect metric data from known sources
Extensible to application-defined metrics
Generate a metrics HTML report, including time-scale charts
Known metric sources¶
The Metrics Collection API provides facilities to discover and poll metrics data from the following known applications:
CPU (eg. % usage, temperature, clock speed) |
|
GPU (eg. % usage, memory usage) |
|
Memory (eg. % RAM usage) |
|
Disk (eg. Read/write speed, Response time) |
|
Network (eg. throughput) |
|
Linux (eg. process count, open sockets) |
Note
This list is constantly expanding. Please contact us if there is a specific sensor or application that you would like to be supported.
Using psymon¶
Without modifying your existing source code, you can instantly enable periodic collection of system resource metrics
to your application by using the psymon script to run your program. For example:
psymon --metrics "/path/to/your/app --arg1 --arg2 --arg3"
See psymon man page for a complete list of options.
Using C/C++ SDK API¶
The Metrics Collection API can be accessed by including a single header file
and linking the libpsyiage shared library. See Advanced Setup - Building your application with libpsyiage for details.
Enable periodic collection of system resource metrics¶
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <psyiage/psyiagesdk.h>
int main(int argc, char **argv)
{
psyiage_handle pah; // handle to psyiage instance
/* ... Initialize code omitted for simplicity ... */
// Poll system resource metrics every 500ms
psyiage_metric_enable_poll_system_resources(pah, 500);
/* ... Cleanup code omitted for simplicity ... */
}
|
Collection of application-defined metrics¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <psyiage/psyiagesdk.h>
int main(int argc, char **argv)
{
psyiage_handle pah; // handle to psyiage instance
/* ... Initialize code omitted for simplicity ... */
/* ... Read and aggregate data from laser sensors and cameras */
// Collect application-defined topographic data
rc = psyiage_metric_record_values_blob(pah, "Topography", topographic_data, topographic_data_size, 1);
/* ... Cleanup code omitted for simplicity ... */
}
|
Sample metrics JSON data¶
"Metrics": [
{
"Name": "ProcVM",
"Timestamps": [
1559439076.125103951,
1559439076.626415014,
1559439077.127984047,
1559439077.629561663,
1559439078.130370855,
1559439078.631809711,
1559439079.132480621,
1559439079.633147001,
1559439080.133864164,
1559439080.635303974,
1559439081.136044741,
1559439081.636738777,
1559439082.137473822,
1559439082.638967037
],
"Values": [
112214016,
112214016,
113311744,
113311744,
112230400,
112906240,
113340416,
112934912,
112394240,
112242688,
112377856,
112242688,
112230400,
112230400
]
},
{
"Name": "SysCPU",
"Timestamps": [
1559439076.626402378,
1559439077.127982140,
1559439077.629560232,
1559439078.130369663,
1559439078.631808519,
1559439079.132479429,
1559439079.633145809,
1559439080.133862734,
1559439080.635302544,
1559439081.136043549,
1559439081.636737585,
1559439082.137472630,
1559439082.638965845
],
"Values": [
0.1624365448951721,
0.1700507551431656,
0.1616161614656448,
0.157760813832283,
0.1670886129140854,
0.1569620221853256,
0.149367094039917,
0.1454081684350967,
0.1472081243991852,
0.1522842645645142,
0.1522842645645142,
0.1594936698675156,
0.1548223346471786
]
},
{
"Name": "ProcRAMPeak",
"Timestamps": [
1559439076.125098944,
1559439076.626414537,
1559439077.127983570,
1559439077.629561424,
1559439078.130370617,
1559439078.631809473,
1559439079.132480383,
1559439079.633146763,
1559439080.133863926,
1559439080.635303736,
1559439081.136044502,
1559439081.636738539,
1559439082.137473583,
1559439082.638966799
],
"Values": [
4075520,
4075520,
5636096,
5636096,
5636096,
5636096,
5636096,
5636096,
5636096,
5636096,
5636096,
5636096,
5636096,
5636096
]
},
{
"Name": "SysRAM",
"Timestamps": [
1559439076.125087976,
1559439076.626402617,
1559439077.127982855,
1559439077.629560709,
1559439078.130370140,
1559439078.631808996,
1559439079.132479906,
1559439079.633146286,
1559439080.133863211,
1559439080.635303259,
1559439081.136044025,
1559439081.636737823,
1559439082.137473106,
1559439082.638966322
],
"Values": [
7739355136,
7773405184,
7816024064,
7798185984,
7815942144,
7802179584,
7853674496,
7907958784,
7963762688,
8024965120,
8073596928,
8121901056,
8156819456,
8199684096
]
},
{
"Name": "ProcCPU",
"Timestamps": [
1559439076.626414061,
1559439077.127983093,
1559439077.629560709,
1559439078.130370140,
1559439078.631808996,
1559439079.132479906,
1559439079.633146286,
1559439080.133863449,
1559439080.635303259,
1559439081.136044264,
1559439081.636738062,
1559439082.137473106,
1559439082.638966322
],
"Values": [
0.004999999888241291,
0.01250000018626451,
0.002499999944120646,
0.007499999832361937,
0.01250000018626451,
0.007499999832361937,
0.004999999888241291,
0.007499999832361937,
0.007352941203862429,
0.007499999832361937,
0.007499999832361937,
0.007499999832361937,
0.007499999832361937
]
},
{
"Name": "ProcRAM",
"Timestamps": [
1559439076.125092983,
1559439076.626414299,
1559439077.127983570,
1559439077.629561186,
1559439078.130370378,
1559439078.631809473,
1559439079.132480145,
1559439079.633146763,
1559439080.133863688,
1559439080.635303736,
1559439081.136044502,
1559439081.636738300,
1559439082.137473345,
1559439082.638966799
],
"Values": [
4075520,
4075520,
5582848,
5582848,
4775936,
5312512,
5611520,
5341184,
4804608,
4788224,
4788224,
4788224,
4775936,
4775936
]
},
{
"Name": "ProcSwap",
"Timestamps": [
1559439076.125116587,
1559439076.626415253,
1559439077.127984524,
1559439077.629562140,
1559439078.130371332,
1559439078.631810188,
1559439079.132480860,
1559439079.633147478,
1559439080.133864641,
1559439080.635304451,
1559439081.136045218,
1559439081.636739254,
1559439082.137474060,
1559439082.638967514
],
"Values": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
]
},
{
"Name": "ProcVMPeak",
"Timestamps": [
1559439076.125111103,
1559439076.626415014,
1559439077.127984285,
1559439077.629561901,
1559439078.130371094,
1559439078.631809950,
1559439079.132480621,
1559439079.633147240,
1559439080.133864403,
1559439080.635304213,
1559439081.136044979,
1559439081.636739016,
1559439082.137473822,
1559439082.638967276
],
"Values": [
175169536,
175169536,
175169536,
175169536,
175169536,
175169536,
175169536,
175169536,
175169536,
175169536,
175169536,
175169536,
175169536,
175169536
]
}
]





