Mercurial > hg > orthanc
comparison OrthancServer/OrthancRestApi/OrthancRestSystem.cpp @ 3174:8ea7c4546c3a
primitives to collect metrics in Orthanc
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 29 Jan 2019 15:15:48 +0100 |
parents | ac72032d69a2 |
children | 053e72ff9fc5 |
comparison
equal
deleted
inserted
replaced
3173:096f4a29f223 | 3174:8ea7c4546c3a |
---|---|
33 | 33 |
34 #include "../PrecompiledHeadersServer.h" | 34 #include "../PrecompiledHeadersServer.h" |
35 #include "OrthancRestApi.h" | 35 #include "OrthancRestApi.h" |
36 | 36 |
37 #include "../../Core/DicomParsing/FromDcmtkBridge.h" | 37 #include "../../Core/DicomParsing/FromDcmtkBridge.h" |
38 #include "../../Core/MetricsRegistry.h" | |
38 #include "../../Plugins/Engine/OrthancPlugins.h" | 39 #include "../../Plugins/Engine/OrthancPlugins.h" |
39 #include "../../Plugins/Engine/PluginsManager.h" | 40 #include "../../Plugins/Engine/PluginsManager.h" |
40 #include "../OrthancConfiguration.h" | 41 #include "../OrthancConfiguration.h" |
41 #include "../ServerContext.h" | 42 #include "../ServerContext.h" |
42 | 43 |
91 call.GetOutput().AnswerJson(result); | 92 call.GetOutput().AnswerJson(result); |
92 } | 93 } |
93 | 94 |
94 static void GetStatistics(RestApiGetCall& call) | 95 static void GetStatistics(RestApiGetCall& call) |
95 { | 96 { |
97 static const uint64_t MEGA_BYTES = 1024 * 1024; | |
98 | |
99 uint64_t diskSize, uncompressedSize, countPatients, countStudies, countSeries, countInstances; | |
100 OrthancRestApi::GetIndex(call).GetGlobalStatistics(diskSize, uncompressedSize, countPatients, | |
101 countStudies, countSeries, countInstances); | |
102 | |
96 Json::Value result = Json::objectValue; | 103 Json::Value result = Json::objectValue; |
97 OrthancRestApi::GetIndex(call).ComputeStatistics(result); | 104 result["TotalDiskSize"] = boost::lexical_cast<std::string>(diskSize); |
105 result["TotalUncompressedSize"] = boost::lexical_cast<std::string>(uncompressedSize); | |
106 result["TotalDiskSizeMB"] = static_cast<unsigned int>(diskSize / MEGA_BYTES); | |
107 result["TotalUncompressedSizeMB"] = static_cast<unsigned int>(uncompressedSize / MEGA_BYTES); | |
108 result["CountPatients"] = static_cast<unsigned int>(countPatients); | |
109 result["CountStudies"] = static_cast<unsigned int>(countStudies); | |
110 result["CountSeries"] = static_cast<unsigned int>(countSeries); | |
111 result["CountInstances"] = static_cast<unsigned int>(countInstances); | |
112 | |
98 call.GetOutput().AnswerJson(result); | 113 call.GetOutput().AnswerJson(result); |
99 } | 114 } |
100 | 115 |
101 static void GenerateUid(RestApiGetCall& call) | 116 static void GenerateUid(RestApiGetCall& call) |
102 { | 117 { |
388 call.GetOutput().AnswerBuffer("{}", MimeType_Json); | 403 call.GetOutput().AnswerBuffer("{}", MimeType_Json); |
389 } | 404 } |
390 } | 405 } |
391 | 406 |
392 | 407 |
408 static void GetMetricsPrometheus(RestApiGetCall& call) | |
409 { | |
410 static const uint64_t MEGA_BYTES = 1024 * 1024; | |
411 | |
412 ServerContext& context = OrthancRestApi::GetContext(call); | |
413 | |
414 MetricsRegistry& registry = context.GetMetricsRegistry(); | |
415 | |
416 uint64_t diskSize, uncompressedSize, countPatients, countStudies, countSeries, countInstances; | |
417 context.GetIndex().GetGlobalStatistics(diskSize, uncompressedSize, countPatients, | |
418 countStudies, countSeries, countInstances); | |
419 | |
420 registry.SetValue("orthanc_disk_size_mb", static_cast<unsigned int>(diskSize / MEGA_BYTES)); | |
421 registry.SetValue("orthanc_uncompressed_size_mb", static_cast<unsigned int>(diskSize / MEGA_BYTES)); | |
422 registry.SetValue("orthanc_count_patients", static_cast<unsigned int>(countPatients)); | |
423 registry.SetValue("orthanc_count_studies", static_cast<unsigned int>(countStudies)); | |
424 registry.SetValue("orthanc_count_series", static_cast<unsigned int>(countSeries)); | |
425 registry.SetValue("orthanc_count_instances", static_cast<unsigned int>(countInstances)); | |
426 | |
427 std::string s; | |
428 registry.ExportPrometheusText(s); | |
429 | |
430 call.GetOutput().AnswerBuffer(s, MimeType_PrometheusText); | |
431 } | |
432 | |
433 | |
434 static void GetMetricsEnabled(RestApiGetCall& call) | |
435 { | |
436 bool enabled = OrthancRestApi::GetContext(call).GetMetricsRegistry().IsEnabled(); | |
437 call.GetOutput().AnswerBuffer(enabled ? "1" : "0", MimeType_PlainText); | |
438 } | |
439 | |
440 | |
441 static void PutMetricsEnabled(RestApiPutCall& call) | |
442 { | |
443 bool enabled; | |
444 | |
445 std::string body(call.GetBodyData()); | |
446 | |
447 if (body == "1") | |
448 { | |
449 enabled = true; | |
450 } | |
451 else if (body == "0") | |
452 { | |
453 enabled = false; | |
454 } | |
455 else | |
456 { | |
457 throw OrthancException(ErrorCode_ParameterOutOfRange, | |
458 "The HTTP body must be 0 or 1, but found: " + body); | |
459 } | |
460 | |
461 // Success | |
462 OrthancRestApi::GetContext(call).GetMetricsRegistry().SetEnabled(enabled); | |
463 call.GetOutput().AnswerBuffer("", MimeType_PlainText); | |
464 } | |
465 | |
466 | |
393 void OrthancRestApi::RegisterSystem() | 467 void OrthancRestApi::RegisterSystem() |
394 { | 468 { |
395 Register("/", ServeRoot); | 469 Register("/", ServeRoot); |
396 Register("/system", GetSystemInformation); | 470 Register("/system", GetSystemInformation); |
397 Register("/statistics", GetStatistics); | 471 Register("/statistics", GetStatistics); |
400 Register("/tools/now", GetNowIsoString<true>); | 474 Register("/tools/now", GetNowIsoString<true>); |
401 Register("/tools/now-local", GetNowIsoString<false>); | 475 Register("/tools/now-local", GetNowIsoString<false>); |
402 Register("/tools/dicom-conformance", GetDicomConformanceStatement); | 476 Register("/tools/dicom-conformance", GetDicomConformanceStatement); |
403 Register("/tools/default-encoding", GetDefaultEncoding); | 477 Register("/tools/default-encoding", GetDefaultEncoding); |
404 Register("/tools/default-encoding", SetDefaultEncoding); | 478 Register("/tools/default-encoding", SetDefaultEncoding); |
479 Register("/tools/metrics", GetMetricsEnabled); | |
480 Register("/tools/metrics", PutMetricsEnabled); | |
481 Register("/tools/metrics-prometheus", GetMetricsPrometheus); | |
405 | 482 |
406 Register("/plugins", ListPlugins); | 483 Register("/plugins", ListPlugins); |
407 Register("/plugins/{id}", GetPlugin); | 484 Register("/plugins/{id}", GetPlugin); |
408 Register("/plugins/explorer.js", GetOrthancExplorerPlugins); | 485 Register("/plugins/explorer.js", GetOrthancExplorerPlugins); |
409 | 486 |