Metrics.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import { prom } from '@overleaf/metrics'
  2. const COMPILE_TIME_BUCKETS = [
  3. 0.5, 1, 1.5, 2, 3, 4, 5, 6, 8, 10, 15, 20, 25, 30, 45, 60, 75, 90, 120, 150,
  4. 180, 210, 240,
  5. ]
  6. const compilesTotal = new prom.Counter({
  7. name: 'clsi_compiles_total',
  8. help: 'Number of compiles',
  9. labelNames: [
  10. 'status',
  11. 'engine',
  12. 'compile',
  13. 'group',
  14. 'image',
  15. 'draft',
  16. 'stop_on_first_error',
  17. 'passes',
  18. 'type',
  19. ],
  20. })
  21. const compileDurationSeconds = new prom.Histogram({
  22. name: 'clsi_compile_duration_seconds',
  23. help: 'Duration of the latexmkrc invocation',
  24. buckets: COMPILE_TIME_BUCKETS,
  25. labelNames: ['status', 'engine', 'compile', 'group', 'passes'],
  26. })
  27. const e2eCompileDurationSeconds = new prom.Histogram({
  28. name: 'clsi_e2e_compile_duration_seconds',
  29. help: 'Duration of the entire compile request in clsi (sync, latexmk, output)',
  30. buckets: COMPILE_TIME_BUCKETS,
  31. labelNames: ['compile', 'group', 'compileFromHistory'],
  32. })
  33. const e2eCompileDurationClsiPerfSeconds = new prom.Gauge({
  34. name: 'clsi_e2e_compile_duration_clsi_perf_seconds',
  35. help: 'Duration of the entire compile request in clsi (sync, latexmk, output) for clsi-perf',
  36. labelNames: ['compile', 'variant'],
  37. })
  38. const syncResourcesDurationSeconds = new prom.Histogram({
  39. name: 'clsi_sync_resources_duration_seconds',
  40. help: 'Time it takes to prepare files for a compile',
  41. buckets: [0.1, 0.25, 0.5, 0.75, 1, 2, 3, 5, 10, 15, 30, 45, 60],
  42. labelNames: ['type', 'compile', 'group'],
  43. })
  44. const processOutputFilesDurationSeconds = new prom.Histogram({
  45. name: 'clsi_process_output_files_duration_seconds',
  46. help: 'Time it takes to process output files of a compile',
  47. buckets: [0.1, 0.25, 0.5, 0.75, 1, 2, 3, 5, 7.5, 10],
  48. labelNames: ['compile', 'group'],
  49. })
  50. const latexmkRuleDurationSeconds = new prom.Histogram({
  51. name: 'clsi_latexmk_rule_duration_seconds',
  52. help: 'Duration of a latexmk rule execution',
  53. buckets: COMPILE_TIME_BUCKETS,
  54. labelNames: ['group', 'rule'],
  55. })
  56. const imageProcessingDurationSeconds = new prom.Histogram({
  57. name: 'clsi_image_processing_duration_seconds',
  58. help: 'Time spent processing images',
  59. buckets: COMPILE_TIME_BUCKETS,
  60. labelNames: ['group', 'type'],
  61. })
  62. const snapshotApplyAllDurationSeconds = new prom.Histogram({
  63. name: 'clsi_snapshot_applyAll_duration_seconds',
  64. help: 'Time spent applying snapshot changes',
  65. buckets: [0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10],
  66. labelNames: ['group', 'source'],
  67. })
  68. const snapshotLoadEagerDurationSeconds = new prom.Histogram({
  69. name: 'clsi_snapshot_load_eager_duration_seconds',
  70. help: 'Time spent loading string blobs for snapshot',
  71. buckets: [0.01, 0.1, 0.2, 0.5, 1, 2, 5, 10, 20, 50],
  72. labelNames: ['group', 'source'],
  73. })
  74. function shouldSkipMetrics(request) {
  75. return ['clsi-perf', 'health-check', 'clsi-cache-template'].includes(
  76. request.metricsOpts.path
  77. )
  78. }
  79. export default {
  80. compilesTotal,
  81. compileDurationSeconds,
  82. e2eCompileDurationSeconds,
  83. e2eCompileDurationClsiPerfSeconds,
  84. syncResourcesDurationSeconds,
  85. processOutputFilesDurationSeconds,
  86. latexmkRuleDurationSeconds,
  87. imageProcessingDurationSeconds,
  88. snapshotApplyAllDurationSeconds,
  89. snapshotLoadEagerDurationSeconds,
  90. shouldSkipMetrics,
  91. }