@cybermem/mcp 0.1.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/README.md +2 -46
  2. package/dist/commands/deploy.js +230 -0
  3. package/dist/commands/init.js +65 -0
  4. package/dist/index.js +198 -90
  5. package/dist/templates/ansible/inventory/hosts.ini +3 -0
  6. package/dist/templates/ansible/playbooks/deploy-cybermem.yml +71 -0
  7. package/dist/templates/ansible/playbooks/stop-cybermem.yml +17 -0
  8. package/dist/templates/charts/cybermem/Chart.yaml +6 -0
  9. package/dist/templates/charts/cybermem/templates/dashboard-deployment.yaml +29 -0
  10. package/dist/templates/charts/cybermem/templates/dashboard-service.yaml +20 -0
  11. package/dist/templates/charts/cybermem/templates/openmemory-deployment.yaml +40 -0
  12. package/dist/templates/charts/cybermem/templates/openmemory-pvc.yaml +10 -0
  13. package/dist/templates/charts/cybermem/templates/openmemory-service.yaml +13 -0
  14. package/dist/templates/charts/cybermem/values-vps.yaml +18 -0
  15. package/dist/templates/charts/cybermem/values.yaml +42 -0
  16. package/dist/templates/docker-compose.yml +219 -0
  17. package/dist/templates/envs/local.example +27 -0
  18. package/dist/templates/envs/rpi.example +27 -0
  19. package/dist/templates/envs/vps.example +25 -0
  20. package/dist/templates/monitoring/db_exporter/Dockerfile +19 -0
  21. package/dist/templates/monitoring/db_exporter/exporter.py +313 -0
  22. package/dist/templates/monitoring/db_exporter/requirements.txt +2 -0
  23. package/dist/templates/monitoring/grafana/dashboards/cybermem.json +1088 -0
  24. package/dist/templates/monitoring/grafana/provisioning/dashboards/default.yml +12 -0
  25. package/dist/templates/monitoring/grafana/provisioning/datasources/prometheus.yml +9 -0
  26. package/dist/templates/monitoring/log_exporter/Dockerfile +13 -0
  27. package/dist/templates/monitoring/log_exporter/exporter.py +274 -0
  28. package/dist/templates/monitoring/log_exporter/requirements.txt +1 -0
  29. package/dist/templates/monitoring/postgres_exporter/queries.yml +22 -0
  30. package/dist/templates/monitoring/prometheus/prometheus.yml +22 -0
  31. package/dist/templates/monitoring/traefik/traefik.yml +32 -0
  32. package/dist/templates/monitoring/vector/vector.toml/vector.yaml +77 -0
  33. package/dist/templates/monitoring/vector/vector.yaml +106 -0
  34. package/package.json +33 -10
  35. package/templates/ansible/inventory/hosts.ini +3 -0
  36. package/templates/ansible/playbooks/deploy-cybermem.yml +71 -0
  37. package/templates/ansible/playbooks/stop-cybermem.yml +17 -0
  38. package/templates/charts/cybermem/Chart.yaml +6 -0
  39. package/templates/charts/cybermem/templates/dashboard-deployment.yaml +29 -0
  40. package/templates/charts/cybermem/templates/dashboard-service.yaml +20 -0
  41. package/templates/charts/cybermem/templates/openmemory-deployment.yaml +40 -0
  42. package/templates/charts/cybermem/templates/openmemory-pvc.yaml +10 -0
  43. package/templates/charts/cybermem/templates/openmemory-service.yaml +13 -0
  44. package/templates/charts/cybermem/values-vps.yaml +18 -0
  45. package/templates/charts/cybermem/values.yaml +42 -0
  46. package/templates/docker-compose.yml +219 -0
  47. package/templates/envs/local.example +27 -0
  48. package/templates/envs/rpi.example +27 -0
  49. package/templates/envs/vps.example +25 -0
  50. package/templates/monitoring/db_exporter/Dockerfile +19 -0
  51. package/templates/monitoring/db_exporter/exporter.py +313 -0
  52. package/templates/monitoring/db_exporter/requirements.txt +2 -0
  53. package/templates/monitoring/grafana/dashboards/cybermem.json +1088 -0
  54. package/templates/monitoring/grafana/provisioning/dashboards/default.yml +12 -0
  55. package/templates/monitoring/grafana/provisioning/datasources/prometheus.yml +9 -0
  56. package/templates/monitoring/log_exporter/Dockerfile +13 -0
  57. package/templates/monitoring/log_exporter/exporter.py +274 -0
  58. package/templates/monitoring/log_exporter/requirements.txt +1 -0
  59. package/templates/monitoring/postgres_exporter/queries.yml +22 -0
  60. package/templates/monitoring/prometheus/prometheus.yml +22 -0
  61. package/templates/monitoring/traefik/traefik.yml +32 -0
  62. package/templates/monitoring/vector/vector.toml/vector.yaml +77 -0
  63. package/templates/monitoring/vector/vector.yaml +106 -0
  64. package/requirements.txt +0 -2
  65. package/server.py +0 -347
  66. package/src/index.ts +0 -114
  67. package/test_mcp.py +0 -111
  68. package/tsconfig.json +0 -14
@@ -0,0 +1,1088 @@
1
+ {
2
+ "annotations": {
3
+ "list": [
4
+ {
5
+ "builtIn": 1,
6
+ "datasource": {
7
+ "type": "grafana",
8
+ "uid": "-- Grafana --"
9
+ },
10
+ "enable": false,
11
+ "hide": true,
12
+ "iconColor": "rgba(0, 211, 255, 1)",
13
+ "name": "Annotations & Alerts",
14
+ "type": "dashboard"
15
+ }
16
+ ]
17
+ },
18
+ "editable": true,
19
+ "fiscalYearStartMonth": 0,
20
+ "graphTooltip": 1,
21
+ "id": null,
22
+ "links": [],
23
+ "panels": [
24
+ {
25
+ "datasource": {
26
+ "type": "prometheus",
27
+ "uid": "prometheus"
28
+ },
29
+ "fieldConfig": {
30
+ "defaults": {
31
+ "color": {
32
+ "mode": "thresholds"
33
+ },
34
+ "mappings": [],
35
+ "thresholds": {
36
+ "mode": "absolute",
37
+ "steps": [
38
+ {
39
+ "color": "green",
40
+ "value": null
41
+ }
42
+ ]
43
+ },
44
+ "unit": "short"
45
+ },
46
+ "overrides": []
47
+ },
48
+ "gridPos": {
49
+ "h": 4,
50
+ "w": 6,
51
+ "x": 0,
52
+ "y": 0
53
+ },
54
+ "id": 100,
55
+ "options": {
56
+ "colorMode": "value",
57
+ "graphMode": "area",
58
+ "justifyMode": "auto",
59
+ "orientation": "auto",
60
+ "reduceOptions": {
61
+ "values": false,
62
+ "calcs": [
63
+ "lastNotNull"
64
+ ],
65
+ "fields": ""
66
+ },
67
+ "textMode": "auto"
68
+ },
69
+ "targets": [
70
+ {
71
+ "datasource": {
72
+ "type": "prometheus",
73
+ "uid": "prometheus"
74
+ },
75
+ "editorMode": "code",
76
+ "expr": "sum(openmemory_requests_total)",
77
+ "range": true,
78
+ "refId": "A"
79
+ }
80
+ ],
81
+ "title": "Total Requests",
82
+ "type": "stat"
83
+ },
84
+ {
85
+ "datasource": {
86
+ "type": "prometheus",
87
+ "uid": "prometheus"
88
+ },
89
+ "fieldConfig": {
90
+ "defaults": {
91
+ "color": {
92
+ "mode": "thresholds"
93
+ },
94
+ "mappings": [],
95
+ "thresholds": {
96
+ "mode": "absolute",
97
+ "steps": [
98
+ {
99
+ "color": "green",
100
+ "value": null
101
+ }
102
+ ]
103
+ },
104
+ "unit": "short"
105
+ },
106
+ "overrides": []
107
+ },
108
+ "gridPos": {
109
+ "h": 4,
110
+ "w": 6,
111
+ "x": 6,
112
+ "y": 0
113
+ },
114
+ "id": 101,
115
+ "options": {
116
+ "colorMode": "value",
117
+ "graphMode": "area",
118
+ "justifyMode": "auto",
119
+ "orientation": "auto",
120
+ "reduceOptions": {
121
+ "values": false,
122
+ "calcs": [
123
+ "lastNotNull"
124
+ ],
125
+ "fields": ""
126
+ },
127
+ "textMode": "auto"
128
+ },
129
+ "targets": [
130
+ {
131
+ "datasource": {
132
+ "type": "prometheus",
133
+ "uid": "prometheus"
134
+ },
135
+ "editorMode": "code",
136
+ "expr": "openmemory_memories_total",
137
+ "range": true,
138
+ "refId": "A"
139
+ }
140
+ ],
141
+ "title": "Memory Records",
142
+ "type": "stat"
143
+ },
144
+ {
145
+ "datasource": {
146
+ "type": "prometheus",
147
+ "uid": "prometheus"
148
+ },
149
+ "fieldConfig": {
150
+ "defaults": {
151
+ "color": {
152
+ "mode": "thresholds"
153
+ },
154
+ "mappings": [],
155
+ "thresholds": {
156
+ "mode": "absolute",
157
+ "steps": [
158
+ {
159
+ "color": "green",
160
+ "value": null
161
+ }
162
+ ]
163
+ },
164
+ "unit": "short"
165
+ },
166
+ "overrides": []
167
+ },
168
+ "gridPos": {
169
+ "h": 4,
170
+ "w": 6,
171
+ "x": 12,
172
+ "y": 0
173
+ },
174
+ "id": 102,
175
+ "options": {
176
+ "colorMode": "value",
177
+ "graphMode": "area",
178
+ "justifyMode": "auto",
179
+ "orientation": "auto",
180
+ "reduceOptions": {
181
+ "values": false,
182
+ "calcs": [
183
+ "lastNotNull"
184
+ ],
185
+ "fields": ""
186
+ },
187
+ "textMode": "auto"
188
+ },
189
+ "targets": [
190
+ {
191
+ "datasource": {
192
+ "type": "prometheus",
193
+ "uid": "prometheus"
194
+ },
195
+ "editorMode": "code",
196
+ "expr": "count(count by (client_name) (openmemory_requests_total))",
197
+ "range": true,
198
+ "refId": "A"
199
+ }
200
+ ],
201
+ "title": "Total Clients",
202
+ "type": "stat"
203
+ },
204
+ {
205
+ "datasource": {
206
+ "type": "prometheus",
207
+ "uid": "prometheus"
208
+ },
209
+ "fieldConfig": {
210
+ "defaults": {
211
+ "color": {
212
+ "mode": "thresholds"
213
+ },
214
+ "mappings": [],
215
+ "thresholds": {
216
+ "mode": "absolute",
217
+ "steps": [
218
+ {
219
+ "color": "green",
220
+ "value": null
221
+ }
222
+ ]
223
+ },
224
+ "unit": "percent"
225
+ },
226
+ "overrides": []
227
+ },
228
+ "gridPos": {
229
+ "h": 4,
230
+ "w": 6,
231
+ "x": 18,
232
+ "y": 0
233
+ },
234
+ "id": 103,
235
+ "options": {
236
+ "colorMode": "value",
237
+ "graphMode": "area",
238
+ "justifyMode": "auto",
239
+ "orientation": "auto",
240
+ "reduceOptions": {
241
+ "values": false,
242
+ "calcs": [
243
+ "lastNotNull"
244
+ ],
245
+ "fields": ""
246
+ },
247
+ "textMode": "auto"
248
+ },
249
+ "targets": [
250
+ {
251
+ "datasource": {
252
+ "type": "prometheus",
253
+ "uid": "prometheus"
254
+ },
255
+ "editorMode": "code",
256
+ "expr": "(sum(openmemory_requests_total) - sum(openmemory_requests_total{status=~\"4..|5..\"})) / sum(openmemory_requests_total) * 100",
257
+ "range": true,
258
+ "refId": "A"
259
+ }
260
+ ],
261
+ "title": "Success Rate",
262
+ "type": "stat"
263
+ },
264
+ {
265
+ "datasource": {
266
+ "type": "prometheus",
267
+ "uid": "prometheus"
268
+ },
269
+ "fieldConfig": {
270
+ "defaults": {
271
+ "color": {
272
+ "mode": "palette-classic"
273
+ },
274
+ "custom": {
275
+ "axisCenteredZero": false,
276
+ "axisColorMode": "text",
277
+ "axisLabel": "",
278
+ "axisPlacement": "auto",
279
+ "barAlignment": 0,
280
+ "drawStyle": "line",
281
+ "fillOpacity": 0,
282
+ "gradientMode": "none",
283
+ "hideFrom": {
284
+ "tooltip": false,
285
+ "viz": false,
286
+ "legend": false
287
+ },
288
+ "lineInterpolation": "linear",
289
+ "lineWidth": 2,
290
+ "pointSize": 5,
291
+ "scaleDistribution": {
292
+ "type": "linear"
293
+ },
294
+ "showPoints": "never",
295
+ "spanNulls": true,
296
+ "stacking": {
297
+ "group": "A",
298
+ "mode": "none"
299
+ },
300
+ "thresholdsStyle": {
301
+ "mode": "off"
302
+ }
303
+ },
304
+ "mappings": [],
305
+ "min": 0,
306
+ "thresholds": {
307
+ "mode": "absolute",
308
+ "steps": [
309
+ {
310
+ "color": "green",
311
+ "value": null
312
+ }
313
+ ]
314
+ },
315
+ "unit": "short"
316
+ },
317
+ "overrides": []
318
+ },
319
+ "gridPos": {
320
+ "h": 8,
321
+ "w": 12,
322
+ "x": 0,
323
+ "y": 4
324
+ },
325
+ "id": 1,
326
+ "options": {
327
+ "legend": {
328
+ "calcs": [
329
+ "last"
330
+ ],
331
+ "displayMode": "list",
332
+ "placement": "bottom",
333
+ "showLegend": true
334
+ },
335
+ "tooltip": {
336
+ "mode": "multi",
337
+ "sort": "none"
338
+ }
339
+ },
340
+ "targets": [
341
+ {
342
+ "datasource": {
343
+ "type": "prometheus",
344
+ "uid": "prometheus"
345
+ },
346
+ "editorMode": "code",
347
+ "expr": "sum by (client_name) (openmemory_requests_total{operation=\"create\"})",
348
+ "legendFormat": "{{client_name}}",
349
+ "range": true,
350
+ "refId": "A"
351
+ }
352
+ ],
353
+ "title": "Creates by Client",
354
+ "type": "timeseries"
355
+ },
356
+ {
357
+ "datasource": {
358
+ "type": "prometheus",
359
+ "uid": "prometheus"
360
+ },
361
+ "fieldConfig": {
362
+ "defaults": {
363
+ "color": {
364
+ "mode": "palette-classic"
365
+ },
366
+ "custom": {
367
+ "axisCenteredZero": false,
368
+ "axisColorMode": "text",
369
+ "axisLabel": "",
370
+ "axisPlacement": "auto",
371
+ "barAlignment": 0,
372
+ "drawStyle": "line",
373
+ "fillOpacity": 0,
374
+ "gradientMode": "none",
375
+ "hideFrom": {
376
+ "tooltip": false,
377
+ "viz": false,
378
+ "legend": false
379
+ },
380
+ "lineInterpolation": "linear",
381
+ "lineWidth": 2,
382
+ "pointSize": 5,
383
+ "scaleDistribution": {
384
+ "type": "linear"
385
+ },
386
+ "showPoints": "never",
387
+ "spanNulls": true,
388
+ "stacking": {
389
+ "group": "A",
390
+ "mode": "none"
391
+ },
392
+ "thresholdsStyle": {
393
+ "mode": "off"
394
+ }
395
+ },
396
+ "mappings": [],
397
+ "min": 0,
398
+ "thresholds": {
399
+ "mode": "absolute",
400
+ "steps": [
401
+ {
402
+ "color": "green",
403
+ "value": null
404
+ }
405
+ ]
406
+ },
407
+ "unit": "short"
408
+ },
409
+ "overrides": []
410
+ },
411
+ "gridPos": {
412
+ "h": 8,
413
+ "w": 12,
414
+ "x": 12,
415
+ "y": 4
416
+ },
417
+ "id": 2,
418
+ "options": {
419
+ "legend": {
420
+ "calcs": [
421
+ "last"
422
+ ],
423
+ "displayMode": "list",
424
+ "placement": "bottom",
425
+ "showLegend": true
426
+ },
427
+ "tooltip": {
428
+ "mode": "multi",
429
+ "sort": "none"
430
+ }
431
+ },
432
+ "targets": [
433
+ {
434
+ "datasource": {
435
+ "type": "prometheus",
436
+ "uid": "prometheus"
437
+ },
438
+ "editorMode": "code",
439
+ "expr": "sum by (client_name) (openmemory_requests_total{operation=\"read\"})",
440
+ "legendFormat": "{{client_name}}",
441
+ "range": true,
442
+ "refId": "A"
443
+ }
444
+ ],
445
+ "title": "Reads by Client",
446
+ "type": "timeseries"
447
+ },
448
+ {
449
+ "datasource": {
450
+ "type": "prometheus",
451
+ "uid": "prometheus"
452
+ },
453
+ "fieldConfig": {
454
+ "defaults": {
455
+ "color": {
456
+ "mode": "palette-classic"
457
+ },
458
+ "custom": {
459
+ "axisCenteredZero": false,
460
+ "axisColorMode": "text",
461
+ "axisLabel": "",
462
+ "axisPlacement": "auto",
463
+ "barAlignment": 0,
464
+ "drawStyle": "line",
465
+ "fillOpacity": 0,
466
+ "gradientMode": "none",
467
+ "hideFrom": {
468
+ "tooltip": false,
469
+ "viz": false,
470
+ "legend": false
471
+ },
472
+ "lineInterpolation": "linear",
473
+ "lineWidth": 2,
474
+ "pointSize": 5,
475
+ "scaleDistribution": {
476
+ "type": "linear"
477
+ },
478
+ "showPoints": "never",
479
+ "spanNulls": true,
480
+ "stacking": {
481
+ "group": "A",
482
+ "mode": "none"
483
+ },
484
+ "thresholdsStyle": {
485
+ "mode": "off"
486
+ }
487
+ },
488
+ "mappings": [],
489
+ "min": 0,
490
+ "thresholds": {
491
+ "mode": "absolute",
492
+ "steps": [
493
+ {
494
+ "color": "green",
495
+ "value": null
496
+ }
497
+ ]
498
+ },
499
+ "unit": "short"
500
+ },
501
+ "overrides": []
502
+ },
503
+ "gridPos": {
504
+ "h": 8,
505
+ "w": 12,
506
+ "x": 0,
507
+ "y": 12
508
+ },
509
+ "id": 3,
510
+ "options": {
511
+ "legend": {
512
+ "calcs": [
513
+ "last"
514
+ ],
515
+ "displayMode": "list",
516
+ "placement": "bottom",
517
+ "showLegend": true
518
+ },
519
+ "tooltip": {
520
+ "mode": "multi",
521
+ "sort": "none"
522
+ }
523
+ },
524
+ "targets": [
525
+ {
526
+ "datasource": {
527
+ "type": "prometheus",
528
+ "uid": "prometheus"
529
+ },
530
+ "editorMode": "code",
531
+ "expr": "sum by (client_name) (openmemory_requests_total{operation=\"update\"})",
532
+ "legendFormat": "{{client_name}}",
533
+ "range": true,
534
+ "refId": "A"
535
+ }
536
+ ],
537
+ "title": "Updates by Client",
538
+ "type": "timeseries"
539
+ },
540
+ {
541
+ "datasource": {
542
+ "type": "prometheus",
543
+ "uid": "prometheus"
544
+ },
545
+ "fieldConfig": {
546
+ "defaults": {
547
+ "color": {
548
+ "mode": "palette-classic"
549
+ },
550
+ "custom": {
551
+ "axisCenteredZero": false,
552
+ "axisColorMode": "text",
553
+ "axisLabel": "",
554
+ "axisPlacement": "auto",
555
+ "barAlignment": 0,
556
+ "drawStyle": "line",
557
+ "fillOpacity": 0,
558
+ "gradientMode": "none",
559
+ "hideFrom": {
560
+ "tooltip": false,
561
+ "viz": false,
562
+ "legend": false
563
+ },
564
+ "lineInterpolation": "linear",
565
+ "lineWidth": 2,
566
+ "pointSize": 5,
567
+ "scaleDistribution": {
568
+ "type": "linear"
569
+ },
570
+ "showPoints": "never",
571
+ "spanNulls": true,
572
+ "stacking": {
573
+ "group": "A",
574
+ "mode": "none"
575
+ },
576
+ "thresholdsStyle": {
577
+ "mode": "off"
578
+ }
579
+ },
580
+ "mappings": [],
581
+ "min": 0,
582
+ "thresholds": {
583
+ "mode": "absolute",
584
+ "steps": [
585
+ {
586
+ "color": "green",
587
+ "value": null
588
+ }
589
+ ]
590
+ },
591
+ "unit": "short"
592
+ },
593
+ "overrides": []
594
+ },
595
+ "gridPos": {
596
+ "h": 8,
597
+ "w": 12,
598
+ "x": 12,
599
+ "y": 12
600
+ },
601
+ "id": 4,
602
+ "options": {
603
+ "legend": {
604
+ "calcs": [
605
+ "last"
606
+ ],
607
+ "displayMode": "list",
608
+ "placement": "bottom",
609
+ "showLegend": true
610
+ },
611
+ "tooltip": {
612
+ "mode": "multi",
613
+ "sort": "none"
614
+ }
615
+ },
616
+ "targets": [
617
+ {
618
+ "datasource": {
619
+ "type": "prometheus",
620
+ "uid": "prometheus"
621
+ },
622
+ "editorMode": "code",
623
+ "expr": "sum by (client_name) (openmemory_requests_total{operation=\"delete\"})",
624
+ "legendFormat": "{{client_name}}",
625
+ "range": true,
626
+ "refId": "A"
627
+ }
628
+ ],
629
+ "title": "Deletes by Client",
630
+ "type": "timeseries"
631
+ },
632
+ {
633
+ "datasource": {
634
+ "type": "prometheus",
635
+ "uid": "prometheus"
636
+ },
637
+ "fieldConfig": {
638
+ "defaults": {
639
+ "color": {
640
+ "mode": "palette-classic"
641
+ },
642
+ "custom": {
643
+ "axisCenteredZero": false,
644
+ "axisColorMode": "text",
645
+ "axisLabel": "",
646
+ "axisPlacement": "auto",
647
+ "barAlignment": 0,
648
+ "drawStyle": "line",
649
+ "fillOpacity": 0,
650
+ "gradientMode": "none",
651
+ "hideFrom": {
652
+ "tooltip": false,
653
+ "viz": false,
654
+ "legend": false
655
+ },
656
+ "lineInterpolation": "linear",
657
+ "lineWidth": 2,
658
+ "pointSize": 5,
659
+ "scaleDistribution": {
660
+ "type": "linear"
661
+ },
662
+ "showPoints": "never",
663
+ "spanNulls": true,
664
+ "stacking": {
665
+ "group": "A",
666
+ "mode": "none"
667
+ },
668
+ "thresholdsStyle": {
669
+ "mode": "off"
670
+ }
671
+ },
672
+ "mappings": [],
673
+ "max": 100,
674
+ "min": 0,
675
+ "thresholds": {
676
+ "mode": "absolute",
677
+ "steps": [
678
+ {
679
+ "color": "green",
680
+ "value": null
681
+ }
682
+ ]
683
+ },
684
+ "unit": "percent"
685
+ },
686
+ "overrides": []
687
+ },
688
+ "gridPos": {
689
+ "h": 8,
690
+ "w": 12,
691
+ "x": 0,
692
+ "y": 20
693
+ },
694
+ "id": 5,
695
+ "options": {
696
+ "legend": {
697
+ "calcs": [
698
+ "last"
699
+ ],
700
+ "displayMode": "list",
701
+ "placement": "bottom",
702
+ "showLegend": true
703
+ },
704
+ "tooltip": {
705
+ "mode": "multi",
706
+ "sort": "none"
707
+ }
708
+ },
709
+ "targets": [
710
+ {
711
+ "datasource": {
712
+ "type": "prometheus",
713
+ "uid": "prometheus"
714
+ },
715
+ "editorMode": "code",
716
+ "expr": "(sum by (client_name) (openmemory_requests_total) - sum by (client_name) (openmemory_requests_total{status=~\"4..|5..\"})) / sum by (client_name) (openmemory_requests_total) * 100",
717
+ "legendFormat": "{{client_name}}",
718
+ "range": true,
719
+ "refId": "A"
720
+ }
721
+ ],
722
+ "title": "Success Rate by Client",
723
+ "type": "timeseries"
724
+ },
725
+ {
726
+ "datasource": {
727
+ "type": "prometheus",
728
+ "uid": "prometheus"
729
+ },
730
+ "fieldConfig": {
731
+ "defaults": {
732
+ "color": {
733
+ "mode": "palette-classic"
734
+ },
735
+ "custom": {
736
+ "axisCenteredZero": false,
737
+ "axisColorMode": "text",
738
+ "axisLabel": "",
739
+ "axisPlacement": "auto",
740
+ "barAlignment": 0,
741
+ "drawStyle": "line",
742
+ "fillOpacity": 0,
743
+ "gradientMode": "none",
744
+ "hideFrom": {
745
+ "tooltip": false,
746
+ "viz": false,
747
+ "legend": false
748
+ },
749
+ "lineInterpolation": "linear",
750
+ "lineWidth": 2,
751
+ "pointSize": 5,
752
+ "scaleDistribution": {
753
+ "type": "linear"
754
+ },
755
+ "showPoints": "never",
756
+ "spanNulls": true,
757
+ "stacking": {
758
+ "group": "A",
759
+ "mode": "none"
760
+ },
761
+ "thresholdsStyle": {
762
+ "mode": "off"
763
+ }
764
+ },
765
+ "mappings": [],
766
+ "min": 0,
767
+ "thresholds": {
768
+ "mode": "absolute",
769
+ "steps": [
770
+ {
771
+ "color": "green",
772
+ "value": null
773
+ }
774
+ ]
775
+ },
776
+ "unit": "short"
777
+ },
778
+ "overrides": []
779
+ },
780
+ "gridPos": {
781
+ "h": 8,
782
+ "w": 12,
783
+ "x": 12,
784
+ "y": 20
785
+ },
786
+ "id": 6,
787
+ "options": {
788
+ "legend": {
789
+ "calcs": [
790
+ "last"
791
+ ],
792
+ "displayMode": "list",
793
+ "placement": "bottom",
794
+ "showLegend": true
795
+ },
796
+ "tooltip": {
797
+ "mode": "multi",
798
+ "sort": "none"
799
+ }
800
+ },
801
+ "targets": [
802
+ {
803
+ "datasource": {
804
+ "type": "prometheus",
805
+ "uid": "prometheus"
806
+ },
807
+ "editorMode": "code",
808
+ "expr": "sum by (client_name) (openmemory_requests_total{status=~\"4..|5..\"})",
809
+ "legendFormat": "{{client_name}}",
810
+ "range": true,
811
+ "refId": "A"
812
+ }
813
+ ],
814
+ "title": "Errors by Client",
815
+ "type": "timeseries"
816
+ },
817
+ {
818
+ "datasource": {
819
+ "type": "prometheus",
820
+ "uid": "prometheus"
821
+ },
822
+ "fieldConfig": {
823
+ "defaults": {
824
+ "color": {
825
+ "mode": "thresholds"
826
+ },
827
+ "custom": {
828
+ "align": "left",
829
+ "cellOptions": {
830
+ "type": "auto"
831
+ },
832
+ "inspect": false
833
+ },
834
+ "mappings": [
835
+ {
836
+ "options": {
837
+ "create": {
838
+ "color": "purple",
839
+ "index": 0,
840
+ "text": "Write"
841
+ },
842
+ "delete": {
843
+ "color": "red",
844
+ "index": 3,
845
+ "text": "Delete"
846
+ },
847
+ "read": {
848
+ "color": "blue",
849
+ "index": 1,
850
+ "text": "Read"
851
+ },
852
+ "update": {
853
+ "color": "yellow",
854
+ "index": 2,
855
+ "text": "Update"
856
+ }
857
+ },
858
+ "type": "value"
859
+ }
860
+ ],
861
+ "thresholds": {
862
+ "mode": "absolute",
863
+ "steps": [
864
+ {
865
+ "color": "green",
866
+ "value": null
867
+ }
868
+ ]
869
+ }
870
+ },
871
+ "overrides": [
872
+ {
873
+ "matcher": {
874
+ "id": "byName",
875
+ "options": "Time"
876
+ },
877
+ "properties": [
878
+ {
879
+ "id": "custom.width",
880
+ "value": 180
881
+ },
882
+ {
883
+ "id": "unit",
884
+ "value": "dateTimeFromNow"
885
+ }
886
+ ]
887
+ },
888
+ {
889
+ "matcher": {
890
+ "id": "byName",
891
+ "options": "client_name"
892
+ },
893
+ "properties": [
894
+ {
895
+ "id": "displayName",
896
+ "value": "Client"
897
+ },
898
+ {
899
+ "id": "custom.width",
900
+ "value": 200
901
+ }
902
+ ]
903
+ },
904
+ {
905
+ "matcher": {
906
+ "id": "byName",
907
+ "options": "operation"
908
+ },
909
+ "properties": [
910
+ {
911
+ "id": "displayName",
912
+ "value": "Operation"
913
+ },
914
+ {
915
+ "id": "custom.width",
916
+ "value": 120
917
+ },
918
+ {
919
+ "id": "custom.cellOptions",
920
+ "value": {
921
+ "type": "color-background"
922
+ }
923
+ }
924
+ ]
925
+ },
926
+ {
927
+ "matcher": {
928
+ "id": "byName",
929
+ "options": "status"
930
+ },
931
+ "properties": [
932
+ {
933
+ "id": "displayName",
934
+ "value": "Status"
935
+ },
936
+ {
937
+ "id": "custom.width",
938
+ "value": 100
939
+ },
940
+ {
941
+ "id": "mappings",
942
+ "value": [
943
+ {
944
+ "options": {
945
+ "pattern": "2..",
946
+ "result": {
947
+ "color": "green",
948
+ "index": 0,
949
+ "text": "Success"
950
+ }
951
+ },
952
+ "type": "regex"
953
+ },
954
+ {
955
+ "options": {
956
+ "pattern": "[45]..",
957
+ "result": {
958
+ "color": "red",
959
+ "index": 1,
960
+ "text": "Error"
961
+ }
962
+ },
963
+ "type": "regex"
964
+ }
965
+ ]
966
+ },
967
+ {
968
+ "id": "custom.cellOptions",
969
+ "value": {
970
+ "type": "color-background"
971
+ }
972
+ }
973
+ ]
974
+ },
975
+ {
976
+ "matcher": {
977
+ "id": "byName",
978
+ "options": "endpoint"
979
+ },
980
+ "properties": [
981
+ {
982
+ "id": "displayName",
983
+ "value": "Endpoint"
984
+ }
985
+ ]
986
+ },
987
+ {
988
+ "matcher": {
989
+ "id": "byName",
990
+ "options": "method"
991
+ },
992
+ "properties": [
993
+ {
994
+ "id": "custom.hidden",
995
+ "value": true
996
+ }
997
+ ]
998
+ }
999
+ ]
1000
+ },
1001
+ "gridPos": {
1002
+ "h": 9,
1003
+ "w": 24,
1004
+ "x": 0,
1005
+ "y": 28
1006
+ },
1007
+ "id": 7,
1008
+ "options": {
1009
+ "cellHeight": "sm",
1010
+ "footer": {
1011
+ "countRows": false,
1012
+ "fields": "",
1013
+ "reducer": [
1014
+ "sum"
1015
+ ],
1016
+ "show": false
1017
+ },
1018
+ "showHeader": true,
1019
+ "sortBy": [
1020
+ {
1021
+ "desc": true,
1022
+ "displayName": "Time"
1023
+ }
1024
+ ]
1025
+ },
1026
+ "pluginVersion": "10.4.2",
1027
+ "targets": [
1028
+ {
1029
+ "datasource": {
1030
+ "type": "prometheus",
1031
+ "uid": "prometheus"
1032
+ },
1033
+ "editorMode": "code",
1034
+ "exemplar": false,
1035
+ "expr": "topk(100, openmemory_requests_total)",
1036
+ "format": "table",
1037
+ "instant": true,
1038
+ "legendFormat": "__auto",
1039
+ "range": false,
1040
+ "refId": "A"
1041
+ }
1042
+ ],
1043
+ "title": "Access Log (Recent Requests)",
1044
+ "transformations": [
1045
+ {
1046
+ "id": "organize",
1047
+ "options": {
1048
+ "excludeByName": {
1049
+ "Time": false,
1050
+ "Value": true,
1051
+ "__name__": true,
1052
+ "client_version": true,
1053
+ "instance": true,
1054
+ "job": true
1055
+ },
1056
+ "indexByName": {
1057
+ "Time": 0,
1058
+ "client_name": 1,
1059
+ "endpoint": 3,
1060
+ "method": 4,
1061
+ "operation": 2,
1062
+ "status": 5
1063
+ },
1064
+ "renameByName": {}
1065
+ }
1066
+ }
1067
+ ],
1068
+ "type": "table"
1069
+ }
1070
+ ],
1071
+ "refresh": "5s",
1072
+ "schemaVersion": 38,
1073
+ "tags": [
1074
+ "cybermem"
1075
+ ],
1076
+ "templating": {
1077
+ "list": []
1078
+ },
1079
+ "time": {
1080
+ "from": "now-1h",
1081
+ "to": "now"
1082
+ },
1083
+ "timepicker": {},
1084
+ "timezone": "",
1085
+ "title": "CyberMem Operations",
1086
+ "uid": "cybermem-ops",
1087
+ "version": 2
1088
+ }