clawsql 0.1.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 (311) hide show
  1. package/.env.example +97 -0
  2. package/README.md +372 -0
  3. package/dist/__tests__/config/settings.test.d.ts +5 -0
  4. package/dist/__tests__/config/settings.test.d.ts.map +1 -0
  5. package/dist/__tests__/config/settings.test.js +154 -0
  6. package/dist/__tests__/config/settings.test.js.map +1 -0
  7. package/dist/__tests__/core/discovery/topology.test.d.ts +5 -0
  8. package/dist/__tests__/core/discovery/topology.test.d.ts.map +1 -0
  9. package/dist/__tests__/core/discovery/topology.test.js +191 -0
  10. package/dist/__tests__/core/discovery/topology.test.js.map +1 -0
  11. package/dist/__tests__/core/failover/executor.test.d.ts +5 -0
  12. package/dist/__tests__/core/failover/executor.test.d.ts.map +1 -0
  13. package/dist/__tests__/core/failover/executor.test.js +256 -0
  14. package/dist/__tests__/core/failover/executor.test.js.map +1 -0
  15. package/dist/__tests__/core/monitoring/collector.test.d.ts +5 -0
  16. package/dist/__tests__/core/monitoring/collector.test.d.ts.map +1 -0
  17. package/dist/__tests__/core/monitoring/collector.test.js +131 -0
  18. package/dist/__tests__/core/monitoring/collector.test.js.map +1 -0
  19. package/dist/__tests__/core/monitoring/exporters.test.d.ts +5 -0
  20. package/dist/__tests__/core/monitoring/exporters.test.d.ts.map +1 -0
  21. package/dist/__tests__/core/monitoring/exporters.test.js +90 -0
  22. package/dist/__tests__/core/monitoring/exporters.test.js.map +1 -0
  23. package/dist/__tests__/core/routing/proxysql-manager.test.d.ts +5 -0
  24. package/dist/__tests__/core/routing/proxysql-manager.test.d.ts.map +1 -0
  25. package/dist/__tests__/core/routing/proxysql-manager.test.js +155 -0
  26. package/dist/__tests__/core/routing/proxysql-manager.test.js.map +1 -0
  27. package/dist/__tests__/types/index.test.d.ts +5 -0
  28. package/dist/__tests__/types/index.test.d.ts.map +1 -0
  29. package/dist/__tests__/types/index.test.js +290 -0
  30. package/dist/__tests__/types/index.test.js.map +1 -0
  31. package/dist/__tests__/utils/exceptions.test.d.ts +5 -0
  32. package/dist/__tests__/utils/exceptions.test.d.ts.map +1 -0
  33. package/dist/__tests__/utils/exceptions.test.js +142 -0
  34. package/dist/__tests__/utils/exceptions.test.js.map +1 -0
  35. package/dist/api/routes/clusters.d.ts +7 -0
  36. package/dist/api/routes/clusters.d.ts.map +1 -0
  37. package/dist/api/routes/clusters.js +123 -0
  38. package/dist/api/routes/clusters.js.map +1 -0
  39. package/dist/api/routes/config.d.ts +7 -0
  40. package/dist/api/routes/config.d.ts.map +1 -0
  41. package/dist/api/routes/config.js +65 -0
  42. package/dist/api/routes/config.js.map +1 -0
  43. package/dist/api/routes/failover.d.ts +7 -0
  44. package/dist/api/routes/failover.d.ts.map +1 -0
  45. package/dist/api/routes/failover.js +100 -0
  46. package/dist/api/routes/failover.js.map +1 -0
  47. package/dist/api/routes/instances.d.ts +11 -0
  48. package/dist/api/routes/instances.d.ts.map +1 -0
  49. package/dist/api/routes/instances.js +315 -0
  50. package/dist/api/routes/instances.js.map +1 -0
  51. package/dist/api/routes/monitoring.d.ts +7 -0
  52. package/dist/api/routes/monitoring.d.ts.map +1 -0
  53. package/dist/api/routes/monitoring.js +72 -0
  54. package/dist/api/routes/monitoring.js.map +1 -0
  55. package/dist/api/routes/webhooks.d.ts +12 -0
  56. package/dist/api/routes/webhooks.d.ts.map +1 -0
  57. package/dist/api/routes/webhooks.js +232 -0
  58. package/dist/api/routes/webhooks.js.map +1 -0
  59. package/dist/api/schemas/index.d.ts +965 -0
  60. package/dist/api/schemas/index.d.ts.map +1 -0
  61. package/dist/api/schemas/index.js +171 -0
  62. package/dist/api/schemas/index.js.map +1 -0
  63. package/dist/app.d.ts +13 -0
  64. package/dist/app.d.ts.map +1 -0
  65. package/dist/app.js +197 -0
  66. package/dist/app.js.map +1 -0
  67. package/dist/bin/clawsql.d.ts +12 -0
  68. package/dist/bin/clawsql.d.ts.map +1 -0
  69. package/dist/bin/clawsql.js +43 -0
  70. package/dist/bin/clawsql.js.map +1 -0
  71. package/dist/cli/agent/handler.d.ts +73 -0
  72. package/dist/cli/agent/handler.d.ts.map +1 -0
  73. package/dist/cli/agent/handler.js +258 -0
  74. package/dist/cli/agent/handler.js.map +1 -0
  75. package/dist/cli/agent/index.d.ts +14 -0
  76. package/dist/cli/agent/index.d.ts.map +1 -0
  77. package/dist/cli/agent/index.js +30 -0
  78. package/dist/cli/agent/index.js.map +1 -0
  79. package/dist/cli/agent/openclaw-integration.d.ts +81 -0
  80. package/dist/cli/agent/openclaw-integration.d.ts.map +1 -0
  81. package/dist/cli/agent/openclaw-integration.js +341 -0
  82. package/dist/cli/agent/openclaw-integration.js.map +1 -0
  83. package/dist/cli/agent/providers/anthropic.d.ts +27 -0
  84. package/dist/cli/agent/providers/anthropic.d.ts.map +1 -0
  85. package/dist/cli/agent/providers/anthropic.js +106 -0
  86. package/dist/cli/agent/providers/anthropic.js.map +1 -0
  87. package/dist/cli/agent/providers/base.d.ts +91 -0
  88. package/dist/cli/agent/providers/base.d.ts.map +1 -0
  89. package/dist/cli/agent/providers/base.js +24 -0
  90. package/dist/cli/agent/providers/base.js.map +1 -0
  91. package/dist/cli/agent/providers/openai.d.ts +27 -0
  92. package/dist/cli/agent/providers/openai.d.ts.map +1 -0
  93. package/dist/cli/agent/providers/openai.js +98 -0
  94. package/dist/cli/agent/providers/openai.js.map +1 -0
  95. package/dist/cli/agent/tools/index.d.ts +32 -0
  96. package/dist/cli/agent/tools/index.d.ts.map +1 -0
  97. package/dist/cli/agent/tools/index.js +263 -0
  98. package/dist/cli/agent/tools/index.js.map +1 -0
  99. package/dist/cli/commands/cleanup.d.ts +12 -0
  100. package/dist/cli/commands/cleanup.d.ts.map +1 -0
  101. package/dist/cli/commands/cleanup.js +205 -0
  102. package/dist/cli/commands/cleanup.js.map +1 -0
  103. package/dist/cli/commands/clusters.d.ts +12 -0
  104. package/dist/cli/commands/clusters.d.ts.map +1 -0
  105. package/dist/cli/commands/clusters.js +468 -0
  106. package/dist/cli/commands/clusters.js.map +1 -0
  107. package/dist/cli/commands/config.d.ts +12 -0
  108. package/dist/cli/commands/config.d.ts.map +1 -0
  109. package/dist/cli/commands/config.js +406 -0
  110. package/dist/cli/commands/config.js.map +1 -0
  111. package/dist/cli/commands/cron.d.ts +12 -0
  112. package/dist/cli/commands/cron.d.ts.map +1 -0
  113. package/dist/cli/commands/cron.js +215 -0
  114. package/dist/cli/commands/cron.js.map +1 -0
  115. package/dist/cli/commands/doctor.d.ts +13 -0
  116. package/dist/cli/commands/doctor.d.ts.map +1 -0
  117. package/dist/cli/commands/doctor.js +687 -0
  118. package/dist/cli/commands/doctor.js.map +1 -0
  119. package/dist/cli/commands/failover.d.ts +16 -0
  120. package/dist/cli/commands/failover.d.ts.map +1 -0
  121. package/dist/cli/commands/failover.js +333 -0
  122. package/dist/cli/commands/failover.js.map +1 -0
  123. package/dist/cli/commands/health.d.ts +12 -0
  124. package/dist/cli/commands/health.d.ts.map +1 -0
  125. package/dist/cli/commands/health.js +125 -0
  126. package/dist/cli/commands/health.js.map +1 -0
  127. package/dist/cli/commands/help.d.ts +12 -0
  128. package/dist/cli/commands/help.d.ts.map +1 -0
  129. package/dist/cli/commands/help.js +52 -0
  130. package/dist/cli/commands/help.js.map +1 -0
  131. package/dist/cli/commands/instances.d.ts +12 -0
  132. package/dist/cli/commands/instances.d.ts.map +1 -0
  133. package/dist/cli/commands/instances.js +801 -0
  134. package/dist/cli/commands/instances.js.map +1 -0
  135. package/dist/cli/commands/notify.d.ts +12 -0
  136. package/dist/cli/commands/notify.d.ts.map +1 -0
  137. package/dist/cli/commands/notify.js +43 -0
  138. package/dist/cli/commands/notify.js.map +1 -0
  139. package/dist/cli/commands/sql.d.ts +12 -0
  140. package/dist/cli/commands/sql.d.ts.map +1 -0
  141. package/dist/cli/commands/sql.js +90 -0
  142. package/dist/cli/commands/sql.js.map +1 -0
  143. package/dist/cli/commands/start.d.ts +12 -0
  144. package/dist/cli/commands/start.d.ts.map +1 -0
  145. package/dist/cli/commands/start.js +174 -0
  146. package/dist/cli/commands/start.js.map +1 -0
  147. package/dist/cli/commands/status.d.ts +12 -0
  148. package/dist/cli/commands/status.d.ts.map +1 -0
  149. package/dist/cli/commands/status.js +218 -0
  150. package/dist/cli/commands/status.js.map +1 -0
  151. package/dist/cli/commands/stop.d.ts +12 -0
  152. package/dist/cli/commands/stop.d.ts.map +1 -0
  153. package/dist/cli/commands/stop.js +128 -0
  154. package/dist/cli/commands/stop.js.map +1 -0
  155. package/dist/cli/commands/topology.d.ts +12 -0
  156. package/dist/cli/commands/topology.d.ts.map +1 -0
  157. package/dist/cli/commands/topology.js +106 -0
  158. package/dist/cli/commands/topology.js.map +1 -0
  159. package/dist/cli/completer.d.ts +47 -0
  160. package/dist/cli/completer.d.ts.map +1 -0
  161. package/dist/cli/completer.js +332 -0
  162. package/dist/cli/completer.js.map +1 -0
  163. package/dist/cli/formatter.d.ts +165 -0
  164. package/dist/cli/formatter.d.ts.map +1 -0
  165. package/dist/cli/formatter.js +408 -0
  166. package/dist/cli/formatter.js.map +1 -0
  167. package/dist/cli/index.d.ts +21 -0
  168. package/dist/cli/index.d.ts.map +1 -0
  169. package/dist/cli/index.js +79 -0
  170. package/dist/cli/index.js.map +1 -0
  171. package/dist/cli/raw-input.d.ts +97 -0
  172. package/dist/cli/raw-input.d.ts.map +1 -0
  173. package/dist/cli/raw-input.js +493 -0
  174. package/dist/cli/raw-input.js.map +1 -0
  175. package/dist/cli/registry.d.ts +103 -0
  176. package/dist/cli/registry.d.ts.map +1 -0
  177. package/dist/cli/registry.js +205 -0
  178. package/dist/cli/registry.js.map +1 -0
  179. package/dist/cli/repl.d.ts +83 -0
  180. package/dist/cli/repl.d.ts.map +1 -0
  181. package/dist/cli/repl.js +447 -0
  182. package/dist/cli/repl.js.map +1 -0
  183. package/dist/cli/ui/components.d.ts +144 -0
  184. package/dist/cli/ui/components.d.ts.map +1 -0
  185. package/dist/cli/ui/components.js +331 -0
  186. package/dist/cli/ui/components.js.map +1 -0
  187. package/dist/cli/ui/index.d.ts +7 -0
  188. package/dist/cli/ui/index.d.ts.map +1 -0
  189. package/dist/cli/ui/index.js +23 -0
  190. package/dist/cli/ui/index.js.map +1 -0
  191. package/dist/cli/utils/docker-files.d.ts +39 -0
  192. package/dist/cli/utils/docker-files.d.ts.map +1 -0
  193. package/dist/cli/utils/docker-files.js +223 -0
  194. package/dist/cli/utils/docker-files.js.map +1 -0
  195. package/dist/cli/utils/docker-prereq.d.ts +48 -0
  196. package/dist/cli/utils/docker-prereq.d.ts.map +1 -0
  197. package/dist/cli/utils/docker-prereq.js +203 -0
  198. package/dist/cli/utils/docker-prereq.js.map +1 -0
  199. package/dist/config/settings.d.ts +594 -0
  200. package/dist/config/settings.d.ts.map +1 -0
  201. package/dist/config/settings.js +250 -0
  202. package/dist/config/settings.js.map +1 -0
  203. package/dist/core/discovery/cluster-view.d.ts +50 -0
  204. package/dist/core/discovery/cluster-view.d.ts.map +1 -0
  205. package/dist/core/discovery/cluster-view.js +235 -0
  206. package/dist/core/discovery/cluster-view.js.map +1 -0
  207. package/dist/core/discovery/scanner.d.ts +70 -0
  208. package/dist/core/discovery/scanner.d.ts.map +1 -0
  209. package/dist/core/discovery/scanner.js +197 -0
  210. package/dist/core/discovery/scanner.js.map +1 -0
  211. package/dist/core/discovery/topology.d.ts +118 -0
  212. package/dist/core/discovery/topology.d.ts.map +1 -0
  213. package/dist/core/discovery/topology.js +550 -0
  214. package/dist/core/discovery/topology.js.map +1 -0
  215. package/dist/core/failover/candidate-selector.d.ts +46 -0
  216. package/dist/core/failover/candidate-selector.d.ts.map +1 -0
  217. package/dist/core/failover/candidate-selector.js +70 -0
  218. package/dist/core/failover/candidate-selector.js.map +1 -0
  219. package/dist/core/failover/executor.d.ts +104 -0
  220. package/dist/core/failover/executor.d.ts.map +1 -0
  221. package/dist/core/failover/executor.js +248 -0
  222. package/dist/core/failover/executor.js.map +1 -0
  223. package/dist/core/failover/operation-builder.d.ts +71 -0
  224. package/dist/core/failover/operation-builder.d.ts.map +1 -0
  225. package/dist/core/failover/operation-builder.js +157 -0
  226. package/dist/core/failover/operation-builder.js.map +1 -0
  227. package/dist/core/failover/operation-runner.d.ts +75 -0
  228. package/dist/core/failover/operation-runner.d.ts.map +1 -0
  229. package/dist/core/failover/operation-runner.js +191 -0
  230. package/dist/core/failover/operation-runner.js.map +1 -0
  231. package/dist/core/failover/promoter.d.ts +33 -0
  232. package/dist/core/failover/promoter.d.ts.map +1 -0
  233. package/dist/core/failover/promoter.js +97 -0
  234. package/dist/core/failover/promoter.js.map +1 -0
  235. package/dist/core/failover/recovery-manager.d.ts +47 -0
  236. package/dist/core/failover/recovery-manager.d.ts.map +1 -0
  237. package/dist/core/failover/recovery-manager.js +145 -0
  238. package/dist/core/failover/recovery-manager.js.map +1 -0
  239. package/dist/core/failover/types.d.ts +54 -0
  240. package/dist/core/failover/types.d.ts.map +1 -0
  241. package/dist/core/failover/types.js +8 -0
  242. package/dist/core/failover/types.js.map +1 -0
  243. package/dist/core/monitoring/collector.d.ts +25 -0
  244. package/dist/core/monitoring/collector.d.ts.map +1 -0
  245. package/dist/core/monitoring/collector.js +115 -0
  246. package/dist/core/monitoring/collector.js.map +1 -0
  247. package/dist/core/monitoring/exporters.d.ts +49 -0
  248. package/dist/core/monitoring/exporters.d.ts.map +1 -0
  249. package/dist/core/monitoring/exporters.js +126 -0
  250. package/dist/core/monitoring/exporters.js.map +1 -0
  251. package/dist/core/routing/proxysql-manager.d.ts +213 -0
  252. package/dist/core/routing/proxysql-manager.d.ts.map +1 -0
  253. package/dist/core/routing/proxysql-manager.js +632 -0
  254. package/dist/core/routing/proxysql-manager.js.map +1 -0
  255. package/dist/core/sync/replica-recovery.d.ts +40 -0
  256. package/dist/core/sync/replica-recovery.d.ts.map +1 -0
  257. package/dist/core/sync/replica-recovery.js +134 -0
  258. package/dist/core/sync/replica-recovery.js.map +1 -0
  259. package/dist/core/sync/sync-coordinator.d.ts +83 -0
  260. package/dist/core/sync/sync-coordinator.d.ts.map +1 -0
  261. package/dist/core/sync/sync-coordinator.js +254 -0
  262. package/dist/core/sync/sync-coordinator.js.map +1 -0
  263. package/dist/core/sync/topology-watcher.d.ts +76 -0
  264. package/dist/core/sync/topology-watcher.d.ts.map +1 -0
  265. package/dist/core/sync/topology-watcher.js +222 -0
  266. package/dist/core/sync/topology-watcher.js.map +1 -0
  267. package/dist/core/sync/types.d.ts +85 -0
  268. package/dist/core/sync/types.d.ts.map +1 -0
  269. package/dist/core/sync/types.js +8 -0
  270. package/dist/core/sync/types.js.map +1 -0
  271. package/dist/index.d.ts +5 -0
  272. package/dist/index.d.ts.map +1 -0
  273. package/dist/index.js +9 -0
  274. package/dist/index.js.map +1 -0
  275. package/dist/types/index.d.ts +212 -0
  276. package/dist/types/index.d.ts.map +1 -0
  277. package/dist/types/index.js +153 -0
  278. package/dist/types/index.js.map +1 -0
  279. package/dist/utils/database.d.ts +62 -0
  280. package/dist/utils/database.d.ts.map +1 -0
  281. package/dist/utils/database.js +257 -0
  282. package/dist/utils/database.js.map +1 -0
  283. package/dist/utils/exceptions.d.ts +69 -0
  284. package/dist/utils/exceptions.d.ts.map +1 -0
  285. package/dist/utils/exceptions.js +121 -0
  286. package/dist/utils/exceptions.js.map +1 -0
  287. package/dist/utils/logger.d.ts +20 -0
  288. package/dist/utils/logger.d.ts.map +1 -0
  289. package/dist/utils/logger.js +90 -0
  290. package/dist/utils/logger.js.map +1 -0
  291. package/dist/utils/mysql-client.d.ts +43 -0
  292. package/dist/utils/mysql-client.d.ts.map +1 -0
  293. package/dist/utils/mysql-client.js +125 -0
  294. package/dist/utils/mysql-client.js.map +1 -0
  295. package/docker/Dockerfile +61 -0
  296. package/docker/Dockerfile.node +41 -0
  297. package/docker/grafana/dashboards/clawsql.json +212 -0
  298. package/docker/grafana/provisioning/dashboards/dashboards.yml +13 -0
  299. package/docker/grafana/provisioning/datasources/datasources.yml +12 -0
  300. package/docker/init/primary.sql +26 -0
  301. package/docker/init/replica.sql +16 -0
  302. package/docker/orchestrator/orchestrator.conf.json +98 -0
  303. package/docker/prometheus/prometheus.yml +45 -0
  304. package/docker/proxysql/entrypoint.sh +8 -0
  305. package/docker/proxysql/init.sql.demo +30 -0
  306. package/docker/proxysql/proxysql.cnf +38 -0
  307. package/docker-compose.demo.yml +115 -0
  308. package/docker-compose.yml +217 -0
  309. package/init/primary.sql +19 -0
  310. package/init/replica.sql +13 -0
  311. package/package.json +84 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exceptions.js","sourceRoot":"","sources":["../../src/utils/exceptions.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH;;GAEG;AACH,MAAa,YAAa,SAAQ,KAAK;IACrB,IAAI,CAAS;IACb,OAAO,CAA0B;IAEjD,YACE,IAAY,EACZ,OAAe,EACf,UAAmC,EAAE;QAErC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;IAED,MAAM;QACJ,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,IAAI;YAChB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC;IACJ,CAAC;CACF;AAvBD,oCAuBC;AAED;;GAEG;AACH,MAAa,eAAgB,SAAQ,YAAY;IAC/C,YAAY,OAAe,EAAE,UAAmC,EAAE;QAChE,KAAK,CAAC,kBAAkB,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AALD,0CAKC;AAED;;GAEG;AACH,MAAa,aAAc,SAAQ,YAAY;IAC7C,YAAY,QAAgB,EAAE,UAAkB;QAC9C,KAAK,CAAC,WAAW,EAAE,GAAG,QAAQ,eAAe,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;QACrF,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AALD,sCAKC;AAED;;GAEG;AACH,MAAa,kBAAmB,SAAQ,YAAY;IAClD,YAAY,QAAgB,EAAE,UAAkB;QAC9C,KAAK,CAAC,gBAAgB,EAAE,GAAG,QAAQ,oBAAoB,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;QAC/F,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AALD,gDAKC;AAED;;GAEG;AACH,MAAa,eAAgB,SAAQ,YAAY;IAC/C,YAAY,OAAe,EAAE,UAAmC,EAAE;QAChE,KAAK,CAAC,kBAAkB,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AALD,0CAKC;AAED;;GAEG;AACH,MAAa,iBAAkB,SAAQ,YAAY;IACjD,YAAY,OAAe,EAAE,UAAmC,EAAE;QAChE,KAAK,CAAC,oBAAoB,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AALD,8CAKC;AAED;;GAEG;AACH,MAAa,aAAc,SAAQ,YAAY;IAC7C,YAAY,OAAe,EAAE,UAAmC,EAAE;QAChE,KAAK,CAAC,gBAAgB,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AALD,sCAKC;AAED;;GAEG;AACH,MAAa,aAAc,SAAQ,YAAY;IAC7C,YAAY,OAAe,EAAE,UAAmC,EAAE;QAChE,KAAK,CAAC,gBAAgB,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AALD,sCAKC;AAED;;GAEG;AACH,MAAa,mBAAoB,SAAQ,YAAY;IACnD,YAAY,UAAkB,uBAAuB;QACnD,KAAK,CAAC,sBAAsB,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AALD,kDAKC;AAED;;GAEG;AACH,MAAa,kBAAmB,SAAQ,YAAY;IAClD,YAAY,UAAkB,eAAe;QAC3C,KAAK,CAAC,qBAAqB,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AALD,gDAKC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * ClawSQL - Logger Utility
3
+ *
4
+ * Structured logging using Pino.
5
+ */
6
+ import pino from 'pino';
7
+ /**
8
+ * Setup and get the logger instance
9
+ */
10
+ export declare function setupLogger(): pino.Logger;
11
+ /**
12
+ * Get the logger instance
13
+ */
14
+ export declare function getLogger(name?: string): pino.Logger;
15
+ /**
16
+ * Create a child logger with additional context
17
+ */
18
+ export declare function createLogger(context: Record<string, unknown>): pino.Logger;
19
+ export default getLogger;
20
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AAexB;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAAC,MAAM,CA6CzC;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAKpD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAK1E;AAED,eAAe,SAAS,CAAC"}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ /**
3
+ * ClawSQL - Logger Utility
4
+ *
5
+ * Structured logging using Pino.
6
+ */
7
+ var __importDefault = (this && this.__importDefault) || function (mod) {
8
+ return (mod && mod.__esModule) ? mod : { "default": mod };
9
+ };
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.setupLogger = setupLogger;
12
+ exports.getLogger = getLogger;
13
+ exports.createLogger = createLogger;
14
+ const pino_1 = __importDefault(require("pino"));
15
+ const settings_js_1 = require("../config/settings.js");
16
+ let logger = null;
17
+ /**
18
+ * Check if we're running in CLI mode
19
+ */
20
+ function isCLIMode() {
21
+ // CLI mode is when running the clawsql command directly
22
+ return process.argv[1]?.endsWith('clawsql') ||
23
+ process.argv[1]?.includes('clawsql.ts') ||
24
+ process.env.CLAWSQL_CLI_MODE === 'true';
25
+ }
26
+ /**
27
+ * Setup and get the logger instance
28
+ */
29
+ function setupLogger() {
30
+ if (logger)
31
+ return logger;
32
+ const settings = (0, settings_js_1.getSettings)();
33
+ const isDev = process.env.NODE_ENV !== 'production';
34
+ // Map our levels to pino levels
35
+ const levelMap = {
36
+ 'DEBUG': 'debug',
37
+ 'INFO': 'info',
38
+ 'WARNING': 'warn',
39
+ 'ERROR': 'error',
40
+ 'CRITICAL': 'fatal',
41
+ 'SILENT': 'silent',
42
+ };
43
+ // In CLI mode, suppress most logs unless DEBUG is set
44
+ let logLevel = levelMap[settings.logging.level.toUpperCase()] || 'error';
45
+ if (isCLIMode() && !process.env.DEBUG) {
46
+ logLevel = 'silent'; // Suppress all logs in CLI mode
47
+ }
48
+ logger = (0, pino_1.default)({
49
+ level: logLevel,
50
+ transport: isDev || settings.logging.format === 'text'
51
+ ? {
52
+ target: 'pino-pretty',
53
+ options: {
54
+ colorize: true,
55
+ translateTime: 'SYS:standard',
56
+ ignore: 'pid,hostname',
57
+ },
58
+ }
59
+ : undefined,
60
+ formatters: {
61
+ level: (label) => ({ level: label.toUpperCase() }),
62
+ },
63
+ timestamp: pino_1.default.stdTimeFunctions.isoTime,
64
+ base: {
65
+ service: settings.appName,
66
+ version: settings.appVersion,
67
+ },
68
+ });
69
+ return logger;
70
+ }
71
+ /**
72
+ * Get the logger instance
73
+ */
74
+ function getLogger(name) {
75
+ if (!logger) {
76
+ setupLogger();
77
+ }
78
+ return name ? logger.child({ module: name }) : logger;
79
+ }
80
+ /**
81
+ * Create a child logger with additional context
82
+ */
83
+ function createLogger(context) {
84
+ if (!logger) {
85
+ setupLogger();
86
+ }
87
+ return logger.child(context);
88
+ }
89
+ exports.default = getLogger;
90
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;AAoBH,kCA6CC;AAKD,8BAKC;AAKD,oCAKC;AAnFD,gDAAwB;AACxB,uDAAoD;AAEpD,IAAI,MAAM,GAAuB,IAAI,CAAC;AAEtC;;GAEG;AACH,SAAS,SAAS;IAChB,wDAAwD;IACxD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,MAAM,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW;IACzB,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,QAAQ,GAAG,IAAA,yBAAW,GAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;IAEpD,gCAAgC;IAChC,MAAM,QAAQ,GAA2B;QACvC,OAAO,EAAE,OAAO;QAChB,MAAM,EAAE,MAAM;QACd,SAAS,EAAE,MAAM;QACjB,OAAO,EAAE,OAAO;QAChB,UAAU,EAAE,OAAO;QACnB,QAAQ,EAAE,QAAQ;KACnB,CAAC;IAEF,sDAAsD;IACtD,IAAI,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,OAAO,CAAC;IACzE,IAAI,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACtC,QAAQ,GAAG,QAAQ,CAAC,CAAC,gCAAgC;IACvD,CAAC;IAED,MAAM,GAAG,IAAA,cAAI,EAAC;QACZ,KAAK,EAAE,QAAQ;QACf,SAAS,EAAE,KAAK,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM;YACpD,CAAC,CAAC;gBACE,MAAM,EAAE,aAAa;gBACrB,OAAO,EAAE;oBACP,QAAQ,EAAE,IAAI;oBACd,aAAa,EAAE,cAAc;oBAC7B,MAAM,EAAE,cAAc;iBACvB;aACF;YACH,CAAC,CAAC,SAAS;QACb,UAAU,EAAE;YACV,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;SACnD;QACD,SAAS,EAAE,cAAI,CAAC,gBAAgB,CAAC,OAAO;QACxC,IAAI,EAAE;YACJ,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,OAAO,EAAE,QAAQ,CAAC,UAAU;SAC7B;KACF,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS,CAAC,IAAa;IACrC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,WAAW,EAAE,CAAC;IAChB,CAAC;IACD,OAAO,IAAI,CAAC,CAAC,CAAC,MAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,MAAO,CAAC;AAC1D,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAC,OAAgC;IAC3D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,WAAW,EAAE,CAAC;IAChB,CAAC;IACD,OAAO,MAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAED,kBAAe,SAAS,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * ClawSQL - MySQL Instance Client
3
+ *
4
+ * Execute commands on MySQL instances.
5
+ */
6
+ /**
7
+ * MySQL Instance Client
8
+ * Executes commands on MySQL instances for failover operations.
9
+ */
10
+ export declare class MySQLInstanceClient {
11
+ private adminUser;
12
+ private adminPassword;
13
+ constructor();
14
+ /**
15
+ * Execute a SQL command on a MySQL instance
16
+ */
17
+ executeCommand(host: string, port: number, sql: string): Promise<boolean>;
18
+ /**
19
+ * Start replication on an instance
20
+ */
21
+ startReplication(host: string, port: number): Promise<boolean>;
22
+ /**
23
+ * Stop replication on an instance
24
+ */
25
+ stopReplication(host: string, port: number): Promise<boolean>;
26
+ /**
27
+ * Get replication status
28
+ */
29
+ getReplicationStatus(host: string, port: number): Promise<{
30
+ ioRunning: boolean;
31
+ sqlRunning: boolean;
32
+ secondsBehind: number | null;
33
+ } | null>;
34
+ /**
35
+ * Set instance read-only
36
+ */
37
+ setReadOnly(host: string, port: number, readOnly: boolean): Promise<boolean>;
38
+ }
39
+ /**
40
+ * Get the MySQL instance client
41
+ */
42
+ export declare function getMySQLClient(): MySQLInstanceClient;
43
+ //# sourceMappingURL=mysql-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mysql-client.d.ts","sourceRoot":"","sources":["../../src/utils/mysql-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAS;;IAQ9B;;OAEG;IACG,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAyB/E;;OAEG;IACG,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKpE;;OAEG;IACG,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKnE;;OAEG;IACG,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAC9D,SAAS,EAAE,OAAO,CAAC;QACnB,UAAU,EAAE,OAAO,CAAC;QACpB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B,GAAG,IAAI,CAAC;IAkCT;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;CAKnF;AAKD;;GAEG;AACH,wBAAgB,cAAc,IAAI,mBAAmB,CAKpD"}
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ /**
3
+ * ClawSQL - MySQL Instance Client
4
+ *
5
+ * Execute commands on MySQL instances.
6
+ */
7
+ var __importDefault = (this && this.__importDefault) || function (mod) {
8
+ return (mod && mod.__esModule) ? mod : { "default": mod };
9
+ };
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.MySQLInstanceClient = void 0;
12
+ exports.getMySQLClient = getMySQLClient;
13
+ const promise_1 = __importDefault(require("mysql2/promise"));
14
+ const logger_js_1 = require("./logger.js");
15
+ const settings_js_1 = require("../config/settings.js");
16
+ const logger = (0, logger_js_1.getLogger)('mysql-client');
17
+ /**
18
+ * MySQL Instance Client
19
+ * Executes commands on MySQL instances for failover operations.
20
+ */
21
+ class MySQLInstanceClient {
22
+ adminUser;
23
+ adminPassword;
24
+ constructor() {
25
+ const settings = (0, settings_js_1.getSettings)();
26
+ this.adminUser = settings.mysql.adminUser;
27
+ this.adminPassword = settings.mysql.adminPassword;
28
+ }
29
+ /**
30
+ * Execute a SQL command on a MySQL instance
31
+ */
32
+ async executeCommand(host, port, sql) {
33
+ let connection = null;
34
+ try {
35
+ connection = await promise_1.default.createConnection({
36
+ host,
37
+ port,
38
+ user: this.adminUser,
39
+ password: this.adminPassword,
40
+ connectTimeout: 5000,
41
+ });
42
+ await connection.execute(sql);
43
+ logger.debug({ host, port, sql }, 'Command executed successfully');
44
+ return true;
45
+ }
46
+ catch (error) {
47
+ logger.error({ error, host, port, sql }, 'Failed to execute command');
48
+ return false;
49
+ }
50
+ finally {
51
+ if (connection) {
52
+ await connection.end();
53
+ }
54
+ }
55
+ }
56
+ /**
57
+ * Start replication on an instance
58
+ */
59
+ async startReplication(host, port) {
60
+ logger.info({ host, port }, 'Starting replication');
61
+ return this.executeCommand(host, port, 'START SLAVE');
62
+ }
63
+ /**
64
+ * Stop replication on an instance
65
+ */
66
+ async stopReplication(host, port) {
67
+ logger.info({ host, port }, 'Stopping replication');
68
+ return this.executeCommand(host, port, 'STOP SLAVE');
69
+ }
70
+ /**
71
+ * Get replication status
72
+ */
73
+ async getReplicationStatus(host, port) {
74
+ let connection = null;
75
+ try {
76
+ connection = await promise_1.default.createConnection({
77
+ host,
78
+ port,
79
+ user: this.adminUser,
80
+ password: this.adminPassword,
81
+ connectTimeout: 5000,
82
+ });
83
+ const [rows] = await connection.execute('SHOW SLAVE STATUS');
84
+ const status = rows[0];
85
+ if (!status) {
86
+ return null;
87
+ }
88
+ return {
89
+ ioRunning: status.Slave_IO_Running === 'Yes',
90
+ sqlRunning: status.Slave_SQL_Running === 'Yes',
91
+ secondsBehind: status.Seconds_Behind_Master,
92
+ };
93
+ }
94
+ catch (error) {
95
+ logger.error({ error, host, port }, 'Failed to get replication status');
96
+ return null;
97
+ }
98
+ finally {
99
+ if (connection) {
100
+ await connection.end();
101
+ }
102
+ }
103
+ }
104
+ /**
105
+ * Set instance read-only
106
+ */
107
+ async setReadOnly(host, port, readOnly) {
108
+ const sql = `SET GLOBAL read_only = ${readOnly ? 'ON' : 'OFF'}`;
109
+ logger.info({ host, port, readOnly }, 'Setting read-only mode');
110
+ return this.executeCommand(host, port, sql);
111
+ }
112
+ }
113
+ exports.MySQLInstanceClient = MySQLInstanceClient;
114
+ // Singleton instance
115
+ let mysqlClient = null;
116
+ /**
117
+ * Get the MySQL instance client
118
+ */
119
+ function getMySQLClient() {
120
+ if (!mysqlClient) {
121
+ mysqlClient = new MySQLInstanceClient();
122
+ }
123
+ return mysqlClient;
124
+ }
125
+ //# sourceMappingURL=mysql-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mysql-client.js","sourceRoot":"","sources":["../../src/utils/mysql-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ # ClawSQL Application Dockerfile
2
+ # Multi-stage build for optimized image size
3
+
4
+ # Build stage
5
+ FROM python:3.11-slim as builder
6
+
7
+ WORKDIR /build
8
+
9
+ # Install build dependencies
10
+ RUN apt-get update && apt-get install -y --no-install-recommends \
11
+ gcc \
12
+ libmariadb-dev \
13
+ pkg-config \
14
+ && rm -rf /var/lib/apt/lists/*
15
+
16
+ # Copy requirements
17
+ COPY requirements.txt .
18
+
19
+ # Create virtual environment and install dependencies
20
+ RUN python -m venv /opt/venv
21
+ ENV PATH="/opt/venv/bin:$PATH"
22
+ RUN pip install --no-cache-dir --upgrade pip && \
23
+ pip install --no-cache-dir -r requirements.txt
24
+
25
+
26
+ # Runtime stage
27
+ FROM python:3.11-slim
28
+
29
+ WORKDIR /app
30
+
31
+ # Install runtime dependencies
32
+ RUN apt-get update && apt-get install -y --no-install-recommends \
33
+ libmariadb3 \
34
+ curl \
35
+ && rm -rf /var/lib/apt/lists/*
36
+
37
+ # Copy virtual environment from builder
38
+ COPY --from=builder /opt/venv /opt/venv
39
+ ENV PATH="/opt/venv/bin:$PATH"
40
+
41
+ # Copy application code
42
+ COPY src/ /app/src/
43
+ COPY pyproject.toml /app/
44
+
45
+ # Set Python path
46
+ ENV PYTHONPATH=/app/src
47
+ ENV PYTHONUNBUFFERED=1
48
+
49
+ # Create non-root user
50
+ RUN useradd -m -u 1000 clawsql && chown -R clawsql:clawsql /app
51
+ USER clawsql
52
+
53
+ # Health check
54
+ HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
55
+ CMD curl -f http://localhost:8080/health || exit 1
56
+
57
+ # Expose port
58
+ EXPOSE 8080
59
+
60
+ # Run application
61
+ CMD ["python", "-m", "uvicorn", "clawsql.main:app", "--host", "0.0.0.0", "--port", "8080"]
@@ -0,0 +1,41 @@
1
+ # ClawSQL Application Dockerfile
2
+ # Multi-stage build for optimized image size
3
+
4
+ # =============================================================================
5
+ # Runtime stage - uses pre-built dist folder
6
+ # =============================================================================
7
+ FROM node:20-alpine
8
+
9
+ WORKDIR /app
10
+
11
+ # Install runtime dependencies
12
+ RUN apk add --no-cache curl
13
+
14
+ # Copy package files
15
+ COPY package.json package-lock.json* ./
16
+
17
+ # Install production dependencies only
18
+ RUN npm ci --only=production
19
+
20
+ # Copy pre-built application
21
+ COPY dist/ ./dist/
22
+
23
+ # Set environment
24
+ ENV NODE_ENV=production
25
+ ENV NODE_OPTIONS="--enable-source-maps"
26
+
27
+ # Create data directory
28
+ RUN mkdir -p /data && chown -R node:node /app /data
29
+
30
+ # Switch to non-root user
31
+ USER node
32
+
33
+ # Health check
34
+ HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
35
+ CMD curl -f http://localhost:8080/health || exit 1
36
+
37
+ # Expose port
38
+ EXPOSE 8080
39
+
40
+ # Run application
41
+ CMD ["node", "dist/index.js"]
@@ -0,0 +1,212 @@
1
+ {
2
+ "annotations": {
3
+ "list": []
4
+ },
5
+ "description": "ClawSQL MySQL Cluster Monitoring Dashboard",
6
+ "editable": true,
7
+ "fiscalYearStartMonth": 0,
8
+ "graphTooltip": 0,
9
+ "id": null,
10
+ "links": [],
11
+ "liveNow": false,
12
+ "panels": [
13
+ {
14
+ "datasource": {
15
+ "type": "prometheus",
16
+ "uid": "prometheus"
17
+ },
18
+ "fieldConfig": {
19
+ "defaults": {
20
+ "color": {
21
+ "mode": "thresholds"
22
+ },
23
+ "mappings": [],
24
+ "thresholds": {
25
+ "mode": "absolute",
26
+ "steps": [
27
+ {
28
+ "color": "green",
29
+ "value": null
30
+ },
31
+ {
32
+ "color": "yellow",
33
+ "value": 1
34
+ },
35
+ {
36
+ "color": "red",
37
+ "value": 10
38
+ }
39
+ ]
40
+ },
41
+ "unit": "s"
42
+ },
43
+ "overrides": []
44
+ },
45
+ "gridPos": {
46
+ "h": 8,
47
+ "w": 12,
48
+ "x": 0,
49
+ "y": 0
50
+ },
51
+ "id": 1,
52
+ "options": {
53
+ "orientation": "auto",
54
+ "reduceOptions": {
55
+ "values": false,
56
+ "calcs": ["lastNotNull"],
57
+ "fields": ""
58
+ },
59
+ "showThresholdLabels": false,
60
+ "showThresholdMarkers": true
61
+ },
62
+ "title": "Replication Lag",
63
+ "type": "gauge"
64
+ },
65
+ {
66
+ "datasource": {
67
+ "type": "prometheus",
68
+ "uid": "prometheus"
69
+ },
70
+ "fieldConfig": {
71
+ "defaults": {
72
+ "color": {
73
+ "mode": "palette-classic"
74
+ },
75
+ "custom": {
76
+ "axisLabel": "",
77
+ "axisPlacement": "auto",
78
+ "barAlignment": 0,
79
+ "drawStyle": "line",
80
+ "fillOpacity": 10,
81
+ "gradientMode": "none",
82
+ "hideFrom": {
83
+ "tooltip": false,
84
+ "viz": false,
85
+ "legend": false
86
+ },
87
+ "lineInterpolation": "linear",
88
+ "lineWidth": 1,
89
+ "pointSize": 5,
90
+ "scaleDistribution": {
91
+ "type": "linear"
92
+ },
93
+ "showPoints": "auto",
94
+ "spanNulls": false
95
+ },
96
+ "mappings": [],
97
+ "thresholds": {
98
+ "mode": "absolute",
99
+ "steps": [
100
+ {
101
+ "color": "green",
102
+ "value": null
103
+ }
104
+ ]
105
+ },
106
+ "unit": "ops"
107
+ },
108
+ "overrides": []
109
+ },
110
+ "gridPos": {
111
+ "h": 8,
112
+ "w": 12,
113
+ "x": 12,
114
+ "y": 0
115
+ },
116
+ "id": 2,
117
+ "options": {
118
+ "legend": {
119
+ "calcs": [],
120
+ "displayMode": "list",
121
+ "placement": "bottom"
122
+ },
123
+ "tooltip": {
124
+ "mode": "single"
125
+ }
126
+ },
127
+ "title": "Queries Per Second",
128
+ "type": "timeseries"
129
+ },
130
+ {
131
+ "datasource": {
132
+ "type": "prometheus",
133
+ "uid": "prometheus"
134
+ },
135
+ "fieldConfig": {
136
+ "defaults": {
137
+ "color": {
138
+ "mode": "thresholds"
139
+ },
140
+ "mappings": [
141
+ {
142
+ "options": {
143
+ "0": {
144
+ "color": "red",
145
+ "index": 1,
146
+ "text": "DOWN"
147
+ },
148
+ "1": {
149
+ "color": "green",
150
+ "index": 0,
151
+ "text": "UP"
152
+ }
153
+ },
154
+ "type": "value"
155
+ }
156
+ ],
157
+ "thresholds": {
158
+ "mode": "absolute",
159
+ "steps": [
160
+ {
161
+ "color": "red",
162
+ "value": null
163
+ },
164
+ {
165
+ "color": "green",
166
+ "value": 1
167
+ }
168
+ ]
169
+ }
170
+ },
171
+ "overrides": []
172
+ },
173
+ "gridPos": {
174
+ "h": 6,
175
+ "w": 24,
176
+ "x": 0,
177
+ "y": 8
178
+ },
179
+ "id": 3,
180
+ "options": {
181
+ "orientation": "horizontal",
182
+ "reduceOptions": {
183
+ "values": false,
184
+ "calcs": ["lastNotNull"],
185
+ "fields": ""
186
+ },
187
+ "showThresholdLabels": false,
188
+ "showThresholdMarkers": true,
189
+ "text": {}
190
+ },
191
+ "title": "Instance Health",
192
+ "type": "gauge"
193
+ }
194
+ ],
195
+ "refresh": "5s",
196
+ "schemaVersion": 37,
197
+ "style": "dark",
198
+ "tags": ["clawsql", "mysql"],
199
+ "templating": {
200
+ "list": []
201
+ },
202
+ "time": {
203
+ "from": "now-1h",
204
+ "to": "now"
205
+ },
206
+ "timepicker": {},
207
+ "timezone": "",
208
+ "title": "ClawSQL Dashboard",
209
+ "uid": "clawsql-main",
210
+ "version": 1,
211
+ "weekStart": ""
212
+ }
@@ -0,0 +1,13 @@
1
+ apiVersion: 1
2
+
3
+ providers:
4
+ - name: 'ClawSQL Dashboards'
5
+ orgId: 1
6
+ folder: ''
7
+ folderUid: ''
8
+ type: file
9
+ disableDeletion: false
10
+ updateIntervalSeconds: 30
11
+ allowUiUpdates: true
12
+ options:
13
+ path: /var/lib/grafana/dashboards
@@ -0,0 +1,12 @@
1
+ apiVersion: 1
2
+
3
+ datasources:
4
+ - name: Prometheus
5
+ type: prometheus
6
+ access: proxy
7
+ url: http://prometheus:9090
8
+ isDefault: true
9
+ editable: false
10
+ jsonData:
11
+ timeInterval: "15s"
12
+ httpMethod: POST
@@ -0,0 +1,26 @@
1
+ -- MySQL Primary Initialization Script
2
+ -- This script runs on the primary MySQL instance startup
3
+
4
+ -- Create replication user with mysql_native_password for compatibility
5
+ CREATE USER IF NOT EXISTS 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'replpassword';
6
+ GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
7
+
8
+ -- Create monitoring user for Orchestrator
9
+ CREATE USER IF NOT EXISTS 'orchestrator'@'%' IDENTIFIED WITH mysql_native_password BY 'orchestratorpassword';
10
+ GRANT SUPER, PROCESS, REPLICATION SLAVE, RELOAD ON *.* TO 'orchestrator'@'%';
11
+ GRANT SELECT ON mysql.slave_master_info TO 'orchestrator'@'%';
12
+
13
+ -- Create monitoring user for ClawSQL
14
+ CREATE USER IF NOT EXISTS 'clawsql_monitor'@'%' IDENTIFIED WITH mysql_native_password BY 'monitorpassword';
15
+ GRANT SELECT, PROCESS, REPLICATION CLIENT ON *.* TO 'clawsql_monitor'@'%';
16
+
17
+ -- Create application database
18
+ CREATE DATABASE IF NOT EXISTS clawsql;
19
+ CREATE DATABASE IF NOT EXISTS sbtest;
20
+
21
+ -- Create application user
22
+ CREATE USER IF NOT EXISTS 'app'@'%' IDENTIFIED WITH mysql_native_password BY 'apppassword';
23
+ GRANT ALL PRIVILEGES ON clawsql.* TO 'app'@'%';
24
+ GRANT ALL PRIVILEGES ON sbtest.* TO 'app'@'%';
25
+
26
+ FLUSH PRIVILEGES;