clawsql 0.1.6 → 0.1.8

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 (74) hide show
  1. package/README.md +49 -21
  2. package/dist/api/routes/instances.d.ts.map +1 -1
  3. package/dist/api/routes/instances.js +9 -6
  4. package/dist/api/routes/instances.js.map +1 -1
  5. package/dist/api/schemas/index.d.ts +142 -142
  6. package/dist/app.js +2 -2
  7. package/dist/cli/commands/cleanup.d.ts.map +1 -1
  8. package/dist/cli/commands/cleanup.js +40 -44
  9. package/dist/cli/commands/cleanup.js.map +1 -1
  10. package/dist/cli/commands/instances.d.ts.map +1 -1
  11. package/dist/cli/commands/instances.js +41 -22
  12. package/dist/cli/commands/instances.js.map +1 -1
  13. package/dist/cli/commands/start.d.ts.map +1 -1
  14. package/dist/cli/commands/start.js +16 -36
  15. package/dist/cli/commands/start.js.map +1 -1
  16. package/dist/cli/commands/stop.d.ts.map +1 -1
  17. package/dist/cli/commands/stop.js +18 -35
  18. package/dist/cli/commands/stop.js.map +1 -1
  19. package/dist/cli/utils/command-executor.d.ts +62 -0
  20. package/dist/cli/utils/command-executor.d.ts.map +1 -0
  21. package/dist/cli/utils/command-executor.js +224 -0
  22. package/dist/cli/utils/command-executor.js.map +1 -0
  23. package/dist/config/settings.js +1 -1
  24. package/dist/core/discovery/topology.d.ts +2 -0
  25. package/dist/core/discovery/topology.d.ts.map +1 -1
  26. package/dist/core/discovery/topology.js +48 -7
  27. package/dist/core/discovery/topology.js.map +1 -1
  28. package/docker/Dockerfile.allinone +37 -28
  29. package/docker/orchestrator/orchestrator.conf.json +2 -2
  30. package/docker-compose.demo.yml +26 -17
  31. package/docker-compose.yml +3 -0
  32. package/init/metadata.sql +11 -0
  33. package/init/primary.sql +2 -12
  34. package/init/replica-host.sql +7 -0
  35. package/init/replica.sql +12 -2
  36. package/package.json +1 -1
  37. package/dist/__tests__/config/settings.test.d.ts +0 -5
  38. package/dist/__tests__/config/settings.test.d.ts.map +0 -1
  39. package/dist/__tests__/config/settings.test.js +0 -154
  40. package/dist/__tests__/config/settings.test.js.map +0 -1
  41. package/dist/__tests__/core/discovery/topology.test.d.ts +0 -5
  42. package/dist/__tests__/core/discovery/topology.test.d.ts.map +0 -1
  43. package/dist/__tests__/core/discovery/topology.test.js +0 -191
  44. package/dist/__tests__/core/discovery/topology.test.js.map +0 -1
  45. package/dist/__tests__/core/failover/executor.test.d.ts +0 -5
  46. package/dist/__tests__/core/failover/executor.test.d.ts.map +0 -1
  47. package/dist/__tests__/core/failover/executor.test.js +0 -256
  48. package/dist/__tests__/core/failover/executor.test.js.map +0 -1
  49. package/dist/__tests__/core/monitoring/collector.test.d.ts +0 -5
  50. package/dist/__tests__/core/monitoring/collector.test.d.ts.map +0 -1
  51. package/dist/__tests__/core/monitoring/collector.test.js +0 -131
  52. package/dist/__tests__/core/monitoring/collector.test.js.map +0 -1
  53. package/dist/__tests__/core/monitoring/exporters.test.d.ts +0 -5
  54. package/dist/__tests__/core/monitoring/exporters.test.d.ts.map +0 -1
  55. package/dist/__tests__/core/monitoring/exporters.test.js +0 -90
  56. package/dist/__tests__/core/monitoring/exporters.test.js.map +0 -1
  57. package/dist/__tests__/core/routing/proxysql-manager.test.d.ts +0 -5
  58. package/dist/__tests__/core/routing/proxysql-manager.test.d.ts.map +0 -1
  59. package/dist/__tests__/core/routing/proxysql-manager.test.js +0 -155
  60. package/dist/__tests__/core/routing/proxysql-manager.test.js.map +0 -1
  61. package/dist/__tests__/types/index.test.d.ts +0 -5
  62. package/dist/__tests__/types/index.test.d.ts.map +0 -1
  63. package/dist/__tests__/types/index.test.js +0 -290
  64. package/dist/__tests__/types/index.test.js.map +0 -1
  65. package/dist/__tests__/utils/exceptions.test.d.ts +0 -5
  66. package/dist/__tests__/utils/exceptions.test.d.ts.map +0 -1
  67. package/dist/__tests__/utils/exceptions.test.js +0 -142
  68. package/dist/__tests__/utils/exceptions.test.js.map +0 -1
  69. package/dist/cli/commands/health.d.ts +0 -12
  70. package/dist/cli/commands/health.d.ts.map +0 -1
  71. package/dist/cli/commands/health.js +0 -125
  72. package/dist/cli/commands/health.js.map +0 -1
  73. package/docker/init/primary.sql +0 -26
  74. package/docker/init/replica.sql +0 -16
@@ -1,142 +0,0 @@
1
- "use strict";
2
- /**
3
- * Tests for ClawSQL custom exceptions
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const exceptions_1 = require("../../utils/exceptions");
7
- describe('ClawSQLError', () => {
8
- it('should create error with code and message', () => {
9
- const error = new exceptions_1.ClawSQLError('TEST_ERROR', 'Test error message');
10
- expect(error.name).toBe('ClawSQLError');
11
- expect(error.code).toBe('TEST_ERROR');
12
- expect(error.message).toBe('Test error message');
13
- expect(error.details).toEqual({});
14
- });
15
- it('should create error with details', () => {
16
- const details = { key: 'value', count: 42 };
17
- const error = new exceptions_1.ClawSQLError('TEST_ERROR', 'Test message', details);
18
- expect(error.details).toEqual(details);
19
- });
20
- it('should serialize to JSON correctly', () => {
21
- const error = new exceptions_1.ClawSQLError('TEST_ERROR', 'Test message', { foo: 'bar' });
22
- const json = error.toJSON();
23
- expect(json).toEqual({
24
- error: 'TEST_ERROR',
25
- message: 'Test message',
26
- details: { foo: 'bar' },
27
- });
28
- });
29
- it('should have stack trace', () => {
30
- const error = new exceptions_1.ClawSQLError('TEST_ERROR', 'Test message');
31
- expect(error.stack).toBeDefined();
32
- expect(error.stack).toContain('ClawSQLError');
33
- });
34
- });
35
- describe('ValidationError', () => {
36
- it('should create validation error', () => {
37
- const error = new exceptions_1.ValidationError('Invalid input', { field: 'name' });
38
- expect(error.name).toBe('ValidationError');
39
- expect(error.code).toBe('VALIDATION_ERROR');
40
- expect(error.message).toBe('Invalid input');
41
- expect(error.details).toEqual({ field: 'name' });
42
- });
43
- });
44
- describe('NotFoundError', () => {
45
- it('should create not found error for resource', () => {
46
- const error = new exceptions_1.NotFoundError('Cluster', 'cluster-123');
47
- expect(error.name).toBe('NotFoundError');
48
- expect(error.code).toBe('NOT_FOUND');
49
- expect(error.message).toBe('Cluster not found: cluster-123');
50
- expect(error.details).toEqual({ resource: 'Cluster', identifier: 'cluster-123' });
51
- });
52
- it('should create not found error for instance', () => {
53
- const error = new exceptions_1.NotFoundError('Instance', 'localhost:3306');
54
- expect(error.message).toBe('Instance not found: localhost:3306');
55
- });
56
- });
57
- describe('AlreadyExistsError', () => {
58
- it('should create already exists error', () => {
59
- const error = new exceptions_1.AlreadyExistsError('Instance', 'localhost:3306');
60
- expect(error.name).toBe('AlreadyExistsError');
61
- expect(error.code).toBe('ALREADY_EXISTS');
62
- expect(error.message).toBe('Instance already exists: localhost:3306');
63
- expect(error.details).toEqual({ resource: 'Instance', identifier: 'localhost:3306' });
64
- });
65
- });
66
- describe('ConnectionError', () => {
67
- it('should create connection error', () => {
68
- const error = new exceptions_1.ConnectionError('Failed to connect to database', { host: 'localhost' });
69
- expect(error.name).toBe('ConnectionError');
70
- expect(error.code).toBe('CONNECTION_ERROR');
71
- expect(error.message).toBe('Failed to connect to database');
72
- expect(error.details).toEqual({ host: 'localhost' });
73
- });
74
- });
75
- describe('OrchestratorError', () => {
76
- it('should create orchestrator error', () => {
77
- const error = new exceptions_1.OrchestratorError('Orchestrator unreachable', { url: 'http://orchestrator:3000' });
78
- expect(error.name).toBe('OrchestratorError');
79
- expect(error.code).toBe('ORCHESTRATOR_ERROR');
80
- expect(error.message).toBe('Orchestrator unreachable');
81
- });
82
- });
83
- describe('ProxySQLError', () => {
84
- it('should create proxysql error', () => {
85
- const error = new exceptions_1.ProxySQLError('Failed to add server', { hostgroup: 10 });
86
- expect(error.name).toBe('ProxySQLError');
87
- expect(error.code).toBe('PROXYSQL_ERROR');
88
- expect(error.message).toBe('Failed to add server');
89
- });
90
- });
91
- describe('FailoverError', () => {
92
- it('should create failover error', () => {
93
- const error = new exceptions_1.FailoverError('Failover failed', { clusterId: 'cluster-1' });
94
- expect(error.name).toBe('FailoverError');
95
- expect(error.code).toBe('FAILOVER_ERROR');
96
- expect(error.message).toBe('Failover failed');
97
- });
98
- });
99
- describe('AuthenticationError', () => {
100
- it('should create authentication error with default message', () => {
101
- const error = new exceptions_1.AuthenticationError();
102
- expect(error.name).toBe('AuthenticationError');
103
- expect(error.code).toBe('AUTHENTICATION_ERROR');
104
- expect(error.message).toBe('Authentication failed');
105
- });
106
- it('should create authentication error with custom message', () => {
107
- const error = new exceptions_1.AuthenticationError('Invalid token');
108
- expect(error.message).toBe('Invalid token');
109
- });
110
- });
111
- describe('AuthorizationError', () => {
112
- it('should create authorization error with default message', () => {
113
- const error = new exceptions_1.AuthorizationError();
114
- expect(error.name).toBe('AuthorizationError');
115
- expect(error.code).toBe('AUTHORIZATION_ERROR');
116
- expect(error.message).toBe('Access denied');
117
- });
118
- it('should create authorization error with custom message', () => {
119
- const error = new exceptions_1.AuthorizationError('Insufficient permissions');
120
- expect(error.message).toBe('Insufficient permissions');
121
- });
122
- });
123
- describe('Error inheritance', () => {
124
- it('all errors should be instance of ClawSQLError', () => {
125
- const errors = [
126
- new exceptions_1.ValidationError('test'),
127
- new exceptions_1.NotFoundError('Resource', 'id'),
128
- new exceptions_1.AlreadyExistsError('Resource', 'id'),
129
- new exceptions_1.ConnectionError('test'),
130
- new exceptions_1.OrchestratorError('test'),
131
- new exceptions_1.ProxySQLError('test'),
132
- new exceptions_1.FailoverError('test'),
133
- new exceptions_1.AuthenticationError(),
134
- new exceptions_1.AuthorizationError(),
135
- ];
136
- for (const error of errors) {
137
- expect(error).toBeInstanceOf(exceptions_1.ClawSQLError);
138
- expect(error).toBeInstanceOf(Error);
139
- }
140
- });
141
- });
142
- //# sourceMappingURL=exceptions.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"exceptions.test.js","sourceRoot":"","sources":["../../../src/__tests__/utils/exceptions.test.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- /**
2
- * ClawSQL CLI - Health Command
3
- *
4
- * Shows health status of system components.
5
- */
6
- import { Command } from '../registry.js';
7
- /**
8
- * Health command
9
- */
10
- export declare const healthCommand: Command;
11
- export default healthCommand;
12
- //# sourceMappingURL=health.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/health.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAc,MAAM,gBAAgB,CAAC;AAGrD;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,OAyG3B,CAAC;AAWF,eAAe,aAAa,CAAC"}
@@ -1,125 +0,0 @@
1
- "use strict";
2
- /**
3
- * ClawSQL CLI - Health Command
4
- *
5
- * Shows health status of system components.
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.healthCommand = void 0;
12
- const chalk_1 = __importDefault(require("chalk"));
13
- /**
14
- * Health command
15
- */
16
- exports.healthCommand = {
17
- name: 'health',
18
- description: 'Show system health status',
19
- usage: '/health [component]',
20
- handler: async (_args, ctx) => {
21
- const formatter = ctx.formatter;
22
- const orchestrator = ctx.orchestrator;
23
- const proxysql = ctx.proxysql;
24
- // Collect health data
25
- const healthData = { components: {}, clusters: [] };
26
- // Check Orchestrator
27
- let orchestratorHealth;
28
- try {
29
- const isHealthy = await orchestrator.healthCheck();
30
- orchestratorHealth = isHealthy ? 'healthy' : 'unhealthy';
31
- }
32
- catch {
33
- orchestratorHealth = 'unreachable';
34
- }
35
- healthData.components.Orchestrator = orchestratorHealth;
36
- // Check ProxySQL
37
- let proxysqlHealth;
38
- try {
39
- await proxysql.connect();
40
- proxysqlHealth = 'healthy';
41
- await proxysql.close();
42
- }
43
- catch {
44
- proxysqlHealth = 'unreachable';
45
- }
46
- healthData.components.ProxySQL = proxysqlHealth;
47
- // Check Prometheus
48
- let prometheusHealth;
49
- try {
50
- const response = await fetch(`${ctx.settings.prometheus.url}/-/healthy`);
51
- prometheusHealth = response.ok ? 'healthy' : 'unhealthy';
52
- }
53
- catch {
54
- prometheusHealth = 'unreachable';
55
- }
56
- healthData.components.Prometheus = prometheusHealth;
57
- healthData.components['ClawSQL API'] = 'healthy';
58
- // Output JSON if requested
59
- if (ctx.outputFormat === 'json') {
60
- // Get cluster health for JSON output
61
- try {
62
- const clusters = await orchestrator.getClusters();
63
- for (const clusterName of clusters) {
64
- const cluster = await orchestrator.getTopology(clusterName);
65
- if (cluster) {
66
- const primaryOk = cluster.primary?.state === 'online';
67
- const replicaCount = cluster.replicas.length;
68
- const healthyReplicas = cluster.replicas.filter(r => r.state === 'online').length;
69
- healthData.clusters.push({
70
- name: clusterName,
71
- status: primaryOk && healthyReplicas === replicaCount ? 'ok' : 'degraded',
72
- replicas: `${healthyReplicas}/${replicaCount}`,
73
- });
74
- }
75
- }
76
- }
77
- catch {
78
- // Ignore errors getting cluster health
79
- }
80
- console.log(JSON.stringify(healthData, null, 2));
81
- return;
82
- }
83
- // Table output
84
- console.log(formatter.header('System Health'));
85
- console.log(formatter.keyValue('Orchestrator', colorStatus(orchestratorHealth)));
86
- console.log(formatter.keyValue('ProxySQL', colorStatus(proxysqlHealth)));
87
- console.log(formatter.keyValue('Prometheus', colorStatus(prometheusHealth)));
88
- console.log(formatter.keyValue('ClawSQL API', chalk_1.default.green('healthy')));
89
- // Try to get cluster health
90
- try {
91
- const clusters = await orchestrator.getClusters();
92
- if (clusters.length > 0) {
93
- console.log('\n' + formatter.section('Cluster Health'));
94
- for (const clusterName of clusters) {
95
- const cluster = await orchestrator.getTopology(clusterName);
96
- if (cluster) {
97
- const primaryOk = cluster.primary?.state === 'online';
98
- const replicaCount = cluster.replicas.length;
99
- const healthyReplicas = cluster.replicas.filter(r => r.state === 'online').length;
100
- const status = primaryOk && healthyReplicas === replicaCount
101
- ? chalk_1.default.green('ok')
102
- : chalk_1.default.yellow('degraded');
103
- console.log(` ${clusterName}: ${status} (${healthyReplicas}/${replicaCount} replicas)`);
104
- }
105
- }
106
- }
107
- }
108
- catch {
109
- // Ignore errors getting cluster health
110
- }
111
- console.log();
112
- },
113
- };
114
- /**
115
- * Colorize status string
116
- */
117
- function colorStatus(status) {
118
- if (status === 'healthy')
119
- return chalk_1.default.green(status);
120
- if (status === 'unreachable' || status === 'unhealthy')
121
- return chalk_1.default.red(status);
122
- return chalk_1.default.yellow(status);
123
- }
124
- exports.default = exports.healthCommand;
125
- //# sourceMappingURL=health.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"health.js","sourceRoot":"","sources":["../../../src/cli/commands/health.ts"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
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;
@@ -1,16 +0,0 @@
1
- -- MySQL Replica Initialization Script
2
- -- This script runs on replica MySQL instances startup
3
-
4
- -- Stop any existing replication
5
- STOP SLAVE;
6
-
7
- -- Configure replication to primary
8
- CHANGE MASTER TO
9
- MASTER_HOST='mysql-primary',
10
- MASTER_PORT=3306,
11
- MASTER_USER='repl',
12
- MASTER_PASSWORD='replpassword',
13
- MASTER_AUTO_POSITION=1;
14
-
15
- -- Start replication
16
- START SLAVE;