even more optimizations for all.json
Costa Tsaousis (ktsaou) committed
Apr 29, 2014 at 02:22 UTC
0f0a5fa3ebabbeab6f50d4b3c0d7796fa8ceacba
1 file changed
+68
-61
netdata.c
+68
-61
@@ -1277,6 +1277,50 @@ size_t rrd_stats_first_entry(RRD_STATS *st)
1277
return first_entry;
1278
}
1279
1280
+long double rrd_stats_dimension_get(RRD_DIMENSION *rd, size_t position)
1281
+{
1282
+ if(rd->issigned) {
1283
+ if(rd->bytes == sizeof(long long)) {
1284
+ long long *dimension = rd->values;
1285
+ return(dimension[position]);
1286
+ }
1287
+ else if(rd->bytes == sizeof(long)) {
1288
+ long *dimension = rd->values;
1289
+ return(dimension[position]);
1290
+ }
1291
+ else if(rd->bytes == sizeof(short int)) {
1292
+ short int *dimension = rd->values;
1293
+ return(dimension[position]);
1294
+ }
1295
+ else if(rd->bytes == sizeof(char)) {
1296
+ char *dimension = rd->values;
1297
+ return(dimension[position]);
1298
+ }
1299
+ else fatal("Cannot produce JSON for size %d bytes (signed) dimension.", rd->bytes);
1300
+ }
1301
+ else {
1302
+ if(rd->bytes == sizeof(unsigned long long)) {
1303
+ unsigned long long *dimension = rd->values;
1304
+ return(dimension[position]);
1305
+ }
1306
+ else if(rd->bytes == sizeof(unsigned long)) {
1307
+ unsigned long *dimension = rd->values;
1308
+ return(dimension[position]);
1309
+ }
1310
+ else if(rd->bytes == sizeof(unsigned short int)) {
1311
+ unsigned short int *dimension = rd->values;
1312
+ return(dimension[position]);
1313
+ }
1314
+ else if(rd->bytes == sizeof(unsigned char)) {
1315
+ unsigned char *dimension = rd->values;
1316
+ return(dimension[position]);
1317
+ }
1318
+ else fatal("Cannot produce JSON for size %d bytes (unsigned) dimension.", rd->bytes);
1319
+ }
1320
+
1321
+ return(0);
1322
+}
1323
+
1324
unsigned long rrd_stats_one_json(RRD_STATS *st, char *options, struct web_buffer *wb)
1325
{
1326
web_buffer_increase(wb, 16384);
@@ -1357,17 +1401,18 @@ unsigned long rrd_stats_one_json(RRD_STATS *st, char *options, struct web_buffer
1401
1402
web_buffer_printf(wb,
1403
"\t\t\t\t{\n"
1360
- "\t\t\t\t\t\"id\" : \"%s\",\n"
1361
- "\t\t\t\t\t\"name\" : \"%s\",\n"
1362
- "\t\t\t\t\t\"bytes\" : %ld,\n"
1363
- "\t\t\t\t\t\"entries\" : %ld,\n"
1364
- "\t\t\t\t\t\"isSigned\" : %d,\n"
1365
- "\t\t\t\t\t\"isHidden\" : %d,\n"
1366
- "\t\t\t\t\t\"algorithm\" : \"%s\",\n"
1367
- "\t\t\t\t\t\"multiplier\" : %ld,\n"
1368
- "\t\t\t\t\t\"divisor\" : %ld,\n"
1369
- "\t\t\t\t\t\"last_entry_t\" : %lu,\n"
1370
- "\t\t\t\t\t\"memory\" : %lu\n"
1404
+ "\t\t\t\t\t\"id\": \"%s\",\n"
1405
+ "\t\t\t\t\t\"name\": \"%s\",\n"
1406
+ "\t\t\t\t\t\"bytes\": %ld,\n"
1407
+ "\t\t\t\t\t\"entries\": %ld,\n"
1408
+ "\t\t\t\t\t\"isSigned\": %d,\n"
1409
+ "\t\t\t\t\t\"isHidden\": %d,\n"
1410
+ "\t\t\t\t\t\"algorithm\": \"%s\",\n"
1411
+ "\t\t\t\t\t\"multiplier\": %ld,\n"
1412
+ "\t\t\t\t\t\"divisor\": %ld,\n"
1413
+ "\t\t\t\t\t\"last_entry_t\": %lu,\n"
1414
+ "\t\t\t\t\t\"memory\": %lu,\n"
1415
+ "\t\t\t\t\t\"last_collected_value\": %0.1Lf\n"
1416
"\t\t\t\t}%s\n"
1417
, rd->id
1418
, rd->name
@@ -1380,6 +1425,7 @@ unsigned long rrd_stats_one_json(RRD_STATS *st, char *options, struct web_buffer
1425
, rd->divisor
1426
, rd->last_updated
1427
, rdmem
1428
+ , rrd_stats_dimension_get(rd, st->current_entry)
1429
, rd->next?",":""
1430
);
1431
}
@@ -1425,56 +1471,17 @@ void rrd_stats_all_json(struct web_buffer *wb)
1471
}
1472
}
1473
1428
- web_buffer_printf(wb, "\n\t],\n");
1429
- web_buffer_printf(wb, "\t\"hostname\": \"%s\",\n", hostname);
1430
- web_buffer_printf(wb, "\t\"update_every\": %d,\n", update_every);
1431
- web_buffer_printf(wb, "\t\"history\": %d,\n", save_history);
1432
- web_buffer_printf(wb, "\t\"memory\": %lu\n", memory);
1433
- web_buffer_printf(wb, "}\n");
1434
-}
1435
-
1436
-long double rrd_stats_dimension_get(RRD_DIMENSION *rd, size_t position)
1437
-{
1438
- if(rd->issigned) {
1439
- if(rd->bytes == sizeof(long long)) {
1440
- long long *dimension = rd->values;
1441
- return(dimension[position]);
1442
- }
1443
- else if(rd->bytes == sizeof(long)) {
1444
- long *dimension = rd->values;
1445
- return(dimension[position]);
1446
- }
1447
- else if(rd->bytes == sizeof(short int)) {
1448
- short int *dimension = rd->values;
1449
- return(dimension[position]);
1450
- }
1451
- else if(rd->bytes == sizeof(char)) {
1452
- char *dimension = rd->values;
1453
- return(dimension[position]);
1454
- }
1455
- else fatal("Cannot produce JSON for size %d bytes (signed) dimension.", rd->bytes);
1456
- }
1457
- else {
1458
- if(rd->bytes == sizeof(unsigned long long)) {
1459
- unsigned long long *dimension = rd->values;
1460
- return(dimension[position]);
1461
- }
1462
- else if(rd->bytes == sizeof(unsigned long)) {
1463
- unsigned long *dimension = rd->values;
1464
- return(dimension[position]);
1465
- }
1466
- else if(rd->bytes == sizeof(unsigned short int)) {
1467
- unsigned short int *dimension = rd->values;
1468
- return(dimension[position]);
1469
- }
1470
- else if(rd->bytes == sizeof(unsigned char)) {
1471
- unsigned char *dimension = rd->values;
1472
- return(dimension[position]);
1473
- }
1474
- else fatal("Cannot produce JSON for size %d bytes (unsigned) dimension.", rd->bytes);
1475
- }
1476
-
1477
- return(0);
1474
+ web_buffer_printf(wb, "\n\t],\n"
1475
+ "\t\"hostname\": \"%s\",\n"
1476
+ "\t\"update_every\": %d,\n"
1477
+ "\t\"history\": %d,\n"
1478
+ "\t\"memory\": %lu\n"
1479
+ "}\n"
1480
+ , hostname
1481
+ , update_every
1482
+ , save_history
1483
+ , memory
1484
+ );
1485
}
1486
1487
unsigned long rrd_stats_json(int type, RRD_STATS *st, struct web_buffer *wb, size_t entries_to_show, size_t group, int group_method, time_t after, time_t before)