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.
- package/.env.example +97 -0
- package/README.md +372 -0
- package/dist/__tests__/config/settings.test.d.ts +5 -0
- package/dist/__tests__/config/settings.test.d.ts.map +1 -0
- package/dist/__tests__/config/settings.test.js +154 -0
- package/dist/__tests__/config/settings.test.js.map +1 -0
- package/dist/__tests__/core/discovery/topology.test.d.ts +5 -0
- package/dist/__tests__/core/discovery/topology.test.d.ts.map +1 -0
- package/dist/__tests__/core/discovery/topology.test.js +191 -0
- package/dist/__tests__/core/discovery/topology.test.js.map +1 -0
- package/dist/__tests__/core/failover/executor.test.d.ts +5 -0
- package/dist/__tests__/core/failover/executor.test.d.ts.map +1 -0
- package/dist/__tests__/core/failover/executor.test.js +256 -0
- package/dist/__tests__/core/failover/executor.test.js.map +1 -0
- package/dist/__tests__/core/monitoring/collector.test.d.ts +5 -0
- package/dist/__tests__/core/monitoring/collector.test.d.ts.map +1 -0
- package/dist/__tests__/core/monitoring/collector.test.js +131 -0
- package/dist/__tests__/core/monitoring/collector.test.js.map +1 -0
- package/dist/__tests__/core/monitoring/exporters.test.d.ts +5 -0
- package/dist/__tests__/core/monitoring/exporters.test.d.ts.map +1 -0
- package/dist/__tests__/core/monitoring/exporters.test.js +90 -0
- package/dist/__tests__/core/monitoring/exporters.test.js.map +1 -0
- package/dist/__tests__/core/routing/proxysql-manager.test.d.ts +5 -0
- package/dist/__tests__/core/routing/proxysql-manager.test.d.ts.map +1 -0
- package/dist/__tests__/core/routing/proxysql-manager.test.js +155 -0
- package/dist/__tests__/core/routing/proxysql-manager.test.js.map +1 -0
- package/dist/__tests__/types/index.test.d.ts +5 -0
- package/dist/__tests__/types/index.test.d.ts.map +1 -0
- package/dist/__tests__/types/index.test.js +290 -0
- package/dist/__tests__/types/index.test.js.map +1 -0
- package/dist/__tests__/utils/exceptions.test.d.ts +5 -0
- package/dist/__tests__/utils/exceptions.test.d.ts.map +1 -0
- package/dist/__tests__/utils/exceptions.test.js +142 -0
- package/dist/__tests__/utils/exceptions.test.js.map +1 -0
- package/dist/api/routes/clusters.d.ts +7 -0
- package/dist/api/routes/clusters.d.ts.map +1 -0
- package/dist/api/routes/clusters.js +123 -0
- package/dist/api/routes/clusters.js.map +1 -0
- package/dist/api/routes/config.d.ts +7 -0
- package/dist/api/routes/config.d.ts.map +1 -0
- package/dist/api/routes/config.js +65 -0
- package/dist/api/routes/config.js.map +1 -0
- package/dist/api/routes/failover.d.ts +7 -0
- package/dist/api/routes/failover.d.ts.map +1 -0
- package/dist/api/routes/failover.js +100 -0
- package/dist/api/routes/failover.js.map +1 -0
- package/dist/api/routes/instances.d.ts +11 -0
- package/dist/api/routes/instances.d.ts.map +1 -0
- package/dist/api/routes/instances.js +315 -0
- package/dist/api/routes/instances.js.map +1 -0
- package/dist/api/routes/monitoring.d.ts +7 -0
- package/dist/api/routes/monitoring.d.ts.map +1 -0
- package/dist/api/routes/monitoring.js +72 -0
- package/dist/api/routes/monitoring.js.map +1 -0
- package/dist/api/routes/webhooks.d.ts +12 -0
- package/dist/api/routes/webhooks.d.ts.map +1 -0
- package/dist/api/routes/webhooks.js +232 -0
- package/dist/api/routes/webhooks.js.map +1 -0
- package/dist/api/schemas/index.d.ts +965 -0
- package/dist/api/schemas/index.d.ts.map +1 -0
- package/dist/api/schemas/index.js +171 -0
- package/dist/api/schemas/index.js.map +1 -0
- package/dist/app.d.ts +13 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +197 -0
- package/dist/app.js.map +1 -0
- package/dist/bin/clawsql.d.ts +12 -0
- package/dist/bin/clawsql.d.ts.map +1 -0
- package/dist/bin/clawsql.js +43 -0
- package/dist/bin/clawsql.js.map +1 -0
- package/dist/cli/agent/handler.d.ts +73 -0
- package/dist/cli/agent/handler.d.ts.map +1 -0
- package/dist/cli/agent/handler.js +258 -0
- package/dist/cli/agent/handler.js.map +1 -0
- package/dist/cli/agent/index.d.ts +14 -0
- package/dist/cli/agent/index.d.ts.map +1 -0
- package/dist/cli/agent/index.js +30 -0
- package/dist/cli/agent/index.js.map +1 -0
- package/dist/cli/agent/openclaw-integration.d.ts +81 -0
- package/dist/cli/agent/openclaw-integration.d.ts.map +1 -0
- package/dist/cli/agent/openclaw-integration.js +341 -0
- package/dist/cli/agent/openclaw-integration.js.map +1 -0
- package/dist/cli/agent/providers/anthropic.d.ts +27 -0
- package/dist/cli/agent/providers/anthropic.d.ts.map +1 -0
- package/dist/cli/agent/providers/anthropic.js +106 -0
- package/dist/cli/agent/providers/anthropic.js.map +1 -0
- package/dist/cli/agent/providers/base.d.ts +91 -0
- package/dist/cli/agent/providers/base.d.ts.map +1 -0
- package/dist/cli/agent/providers/base.js +24 -0
- package/dist/cli/agent/providers/base.js.map +1 -0
- package/dist/cli/agent/providers/openai.d.ts +27 -0
- package/dist/cli/agent/providers/openai.d.ts.map +1 -0
- package/dist/cli/agent/providers/openai.js +98 -0
- package/dist/cli/agent/providers/openai.js.map +1 -0
- package/dist/cli/agent/tools/index.d.ts +32 -0
- package/dist/cli/agent/tools/index.d.ts.map +1 -0
- package/dist/cli/agent/tools/index.js +263 -0
- package/dist/cli/agent/tools/index.js.map +1 -0
- package/dist/cli/commands/cleanup.d.ts +12 -0
- package/dist/cli/commands/cleanup.d.ts.map +1 -0
- package/dist/cli/commands/cleanup.js +205 -0
- package/dist/cli/commands/cleanup.js.map +1 -0
- package/dist/cli/commands/clusters.d.ts +12 -0
- package/dist/cli/commands/clusters.d.ts.map +1 -0
- package/dist/cli/commands/clusters.js +468 -0
- package/dist/cli/commands/clusters.js.map +1 -0
- package/dist/cli/commands/config.d.ts +12 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +406 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/cron.d.ts +12 -0
- package/dist/cli/commands/cron.d.ts.map +1 -0
- package/dist/cli/commands/cron.js +215 -0
- package/dist/cli/commands/cron.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +13 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +687 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/failover.d.ts +16 -0
- package/dist/cli/commands/failover.d.ts.map +1 -0
- package/dist/cli/commands/failover.js +333 -0
- package/dist/cli/commands/failover.js.map +1 -0
- package/dist/cli/commands/health.d.ts +12 -0
- package/dist/cli/commands/health.d.ts.map +1 -0
- package/dist/cli/commands/health.js +125 -0
- package/dist/cli/commands/health.js.map +1 -0
- package/dist/cli/commands/help.d.ts +12 -0
- package/dist/cli/commands/help.d.ts.map +1 -0
- package/dist/cli/commands/help.js +52 -0
- package/dist/cli/commands/help.js.map +1 -0
- package/dist/cli/commands/instances.d.ts +12 -0
- package/dist/cli/commands/instances.d.ts.map +1 -0
- package/dist/cli/commands/instances.js +801 -0
- package/dist/cli/commands/instances.js.map +1 -0
- package/dist/cli/commands/notify.d.ts +12 -0
- package/dist/cli/commands/notify.d.ts.map +1 -0
- package/dist/cli/commands/notify.js +43 -0
- package/dist/cli/commands/notify.js.map +1 -0
- package/dist/cli/commands/sql.d.ts +12 -0
- package/dist/cli/commands/sql.d.ts.map +1 -0
- package/dist/cli/commands/sql.js +90 -0
- package/dist/cli/commands/sql.js.map +1 -0
- package/dist/cli/commands/start.d.ts +12 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +174 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/commands/status.d.ts +12 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +218 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/stop.d.ts +12 -0
- package/dist/cli/commands/stop.d.ts.map +1 -0
- package/dist/cli/commands/stop.js +128 -0
- package/dist/cli/commands/stop.js.map +1 -0
- package/dist/cli/commands/topology.d.ts +12 -0
- package/dist/cli/commands/topology.d.ts.map +1 -0
- package/dist/cli/commands/topology.js +106 -0
- package/dist/cli/commands/topology.js.map +1 -0
- package/dist/cli/completer.d.ts +47 -0
- package/dist/cli/completer.d.ts.map +1 -0
- package/dist/cli/completer.js +332 -0
- package/dist/cli/completer.js.map +1 -0
- package/dist/cli/formatter.d.ts +165 -0
- package/dist/cli/formatter.d.ts.map +1 -0
- package/dist/cli/formatter.js +408 -0
- package/dist/cli/formatter.js.map +1 -0
- package/dist/cli/index.d.ts +21 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +79 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/raw-input.d.ts +97 -0
- package/dist/cli/raw-input.d.ts.map +1 -0
- package/dist/cli/raw-input.js +493 -0
- package/dist/cli/raw-input.js.map +1 -0
- package/dist/cli/registry.d.ts +103 -0
- package/dist/cli/registry.d.ts.map +1 -0
- package/dist/cli/registry.js +205 -0
- package/dist/cli/registry.js.map +1 -0
- package/dist/cli/repl.d.ts +83 -0
- package/dist/cli/repl.d.ts.map +1 -0
- package/dist/cli/repl.js +447 -0
- package/dist/cli/repl.js.map +1 -0
- package/dist/cli/ui/components.d.ts +144 -0
- package/dist/cli/ui/components.d.ts.map +1 -0
- package/dist/cli/ui/components.js +331 -0
- package/dist/cli/ui/components.js.map +1 -0
- package/dist/cli/ui/index.d.ts +7 -0
- package/dist/cli/ui/index.d.ts.map +1 -0
- package/dist/cli/ui/index.js +23 -0
- package/dist/cli/ui/index.js.map +1 -0
- package/dist/cli/utils/docker-files.d.ts +39 -0
- package/dist/cli/utils/docker-files.d.ts.map +1 -0
- package/dist/cli/utils/docker-files.js +223 -0
- package/dist/cli/utils/docker-files.js.map +1 -0
- package/dist/cli/utils/docker-prereq.d.ts +48 -0
- package/dist/cli/utils/docker-prereq.d.ts.map +1 -0
- package/dist/cli/utils/docker-prereq.js +203 -0
- package/dist/cli/utils/docker-prereq.js.map +1 -0
- package/dist/config/settings.d.ts +594 -0
- package/dist/config/settings.d.ts.map +1 -0
- package/dist/config/settings.js +250 -0
- package/dist/config/settings.js.map +1 -0
- package/dist/core/discovery/cluster-view.d.ts +50 -0
- package/dist/core/discovery/cluster-view.d.ts.map +1 -0
- package/dist/core/discovery/cluster-view.js +235 -0
- package/dist/core/discovery/cluster-view.js.map +1 -0
- package/dist/core/discovery/scanner.d.ts +70 -0
- package/dist/core/discovery/scanner.d.ts.map +1 -0
- package/dist/core/discovery/scanner.js +197 -0
- package/dist/core/discovery/scanner.js.map +1 -0
- package/dist/core/discovery/topology.d.ts +118 -0
- package/dist/core/discovery/topology.d.ts.map +1 -0
- package/dist/core/discovery/topology.js +550 -0
- package/dist/core/discovery/topology.js.map +1 -0
- package/dist/core/failover/candidate-selector.d.ts +46 -0
- package/dist/core/failover/candidate-selector.d.ts.map +1 -0
- package/dist/core/failover/candidate-selector.js +70 -0
- package/dist/core/failover/candidate-selector.js.map +1 -0
- package/dist/core/failover/executor.d.ts +104 -0
- package/dist/core/failover/executor.d.ts.map +1 -0
- package/dist/core/failover/executor.js +248 -0
- package/dist/core/failover/executor.js.map +1 -0
- package/dist/core/failover/operation-builder.d.ts +71 -0
- package/dist/core/failover/operation-builder.d.ts.map +1 -0
- package/dist/core/failover/operation-builder.js +157 -0
- package/dist/core/failover/operation-builder.js.map +1 -0
- package/dist/core/failover/operation-runner.d.ts +75 -0
- package/dist/core/failover/operation-runner.d.ts.map +1 -0
- package/dist/core/failover/operation-runner.js +191 -0
- package/dist/core/failover/operation-runner.js.map +1 -0
- package/dist/core/failover/promoter.d.ts +33 -0
- package/dist/core/failover/promoter.d.ts.map +1 -0
- package/dist/core/failover/promoter.js +97 -0
- package/dist/core/failover/promoter.js.map +1 -0
- package/dist/core/failover/recovery-manager.d.ts +47 -0
- package/dist/core/failover/recovery-manager.d.ts.map +1 -0
- package/dist/core/failover/recovery-manager.js +145 -0
- package/dist/core/failover/recovery-manager.js.map +1 -0
- package/dist/core/failover/types.d.ts +54 -0
- package/dist/core/failover/types.d.ts.map +1 -0
- package/dist/core/failover/types.js +8 -0
- package/dist/core/failover/types.js.map +1 -0
- package/dist/core/monitoring/collector.d.ts +25 -0
- package/dist/core/monitoring/collector.d.ts.map +1 -0
- package/dist/core/monitoring/collector.js +115 -0
- package/dist/core/monitoring/collector.js.map +1 -0
- package/dist/core/monitoring/exporters.d.ts +49 -0
- package/dist/core/monitoring/exporters.d.ts.map +1 -0
- package/dist/core/monitoring/exporters.js +126 -0
- package/dist/core/monitoring/exporters.js.map +1 -0
- package/dist/core/routing/proxysql-manager.d.ts +213 -0
- package/dist/core/routing/proxysql-manager.d.ts.map +1 -0
- package/dist/core/routing/proxysql-manager.js +632 -0
- package/dist/core/routing/proxysql-manager.js.map +1 -0
- package/dist/core/sync/replica-recovery.d.ts +40 -0
- package/dist/core/sync/replica-recovery.d.ts.map +1 -0
- package/dist/core/sync/replica-recovery.js +134 -0
- package/dist/core/sync/replica-recovery.js.map +1 -0
- package/dist/core/sync/sync-coordinator.d.ts +83 -0
- package/dist/core/sync/sync-coordinator.d.ts.map +1 -0
- package/dist/core/sync/sync-coordinator.js +254 -0
- package/dist/core/sync/sync-coordinator.js.map +1 -0
- package/dist/core/sync/topology-watcher.d.ts +76 -0
- package/dist/core/sync/topology-watcher.d.ts.map +1 -0
- package/dist/core/sync/topology-watcher.js +222 -0
- package/dist/core/sync/topology-watcher.js.map +1 -0
- package/dist/core/sync/types.d.ts +85 -0
- package/dist/core/sync/types.d.ts.map +1 -0
- package/dist/core/sync/types.js +8 -0
- package/dist/core/sync/types.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/types/index.d.ts +212 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +153 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/database.d.ts +62 -0
- package/dist/utils/database.d.ts.map +1 -0
- package/dist/utils/database.js +257 -0
- package/dist/utils/database.js.map +1 -0
- package/dist/utils/exceptions.d.ts +69 -0
- package/dist/utils/exceptions.d.ts.map +1 -0
- package/dist/utils/exceptions.js +121 -0
- package/dist/utils/exceptions.js.map +1 -0
- package/dist/utils/logger.d.ts +20 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +90 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/mysql-client.d.ts +43 -0
- package/dist/utils/mysql-client.d.ts.map +1 -0
- package/dist/utils/mysql-client.js +125 -0
- package/dist/utils/mysql-client.js.map +1 -0
- package/docker/Dockerfile +61 -0
- package/docker/Dockerfile.node +41 -0
- package/docker/grafana/dashboards/clawsql.json +212 -0
- package/docker/grafana/provisioning/dashboards/dashboards.yml +13 -0
- package/docker/grafana/provisioning/datasources/datasources.yml +12 -0
- package/docker/init/primary.sql +26 -0
- package/docker/init/replica.sql +16 -0
- package/docker/orchestrator/orchestrator.conf.json +98 -0
- package/docker/prometheus/prometheus.yml +45 -0
- package/docker/proxysql/entrypoint.sh +8 -0
- package/docker/proxysql/init.sql.demo +30 -0
- package/docker/proxysql/proxysql.cnf +38 -0
- package/docker-compose.demo.yml +115 -0
- package/docker-compose.yml +217 -0
- package/init/primary.sql +19 -0
- package/init/replica.sql +13 -0
- package/package.json +84 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exceptions.js","sourceRoot":"","sources":["../../src/utils/exceptions.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,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;
|