clawsql 0.1.6 → 0.1.7

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 (62) hide show
  1. package/dist/api/routes/instances.d.ts.map +1 -1
  2. package/dist/api/routes/instances.js +9 -6
  3. package/dist/api/routes/instances.js.map +1 -1
  4. package/dist/api/schemas/index.d.ts +142 -142
  5. package/dist/bin/clawsql.js +0 -0
  6. package/dist/cli/commands/cleanup.d.ts.map +1 -1
  7. package/dist/cli/commands/cleanup.js +40 -44
  8. package/dist/cli/commands/cleanup.js.map +1 -1
  9. package/dist/cli/commands/start.d.ts.map +1 -1
  10. package/dist/cli/commands/start.js +16 -36
  11. package/dist/cli/commands/start.js.map +1 -1
  12. package/dist/cli/commands/stop.d.ts.map +1 -1
  13. package/dist/cli/commands/stop.js +18 -35
  14. package/dist/cli/commands/stop.js.map +1 -1
  15. package/dist/cli/utils/command-executor.d.ts +62 -0
  16. package/dist/cli/utils/command-executor.d.ts.map +1 -0
  17. package/dist/cli/utils/command-executor.js +224 -0
  18. package/dist/cli/utils/command-executor.js.map +1 -0
  19. package/dist/core/discovery/topology.d.ts.map +1 -1
  20. package/dist/core/discovery/topology.js +4 -1
  21. package/dist/core/discovery/topology.js.map +1 -1
  22. package/docker/Dockerfile.allinone +37 -28
  23. package/docker-compose.yml +3 -0
  24. package/init/metadata.sql +11 -0
  25. package/init/replica.sql +12 -2
  26. package/package.json +1 -1
  27. package/dist/__tests__/config/settings.test.d.ts +0 -5
  28. package/dist/__tests__/config/settings.test.d.ts.map +0 -1
  29. package/dist/__tests__/config/settings.test.js +0 -154
  30. package/dist/__tests__/config/settings.test.js.map +0 -1
  31. package/dist/__tests__/core/discovery/topology.test.d.ts +0 -5
  32. package/dist/__tests__/core/discovery/topology.test.d.ts.map +0 -1
  33. package/dist/__tests__/core/discovery/topology.test.js +0 -191
  34. package/dist/__tests__/core/discovery/topology.test.js.map +0 -1
  35. package/dist/__tests__/core/failover/executor.test.d.ts +0 -5
  36. package/dist/__tests__/core/failover/executor.test.d.ts.map +0 -1
  37. package/dist/__tests__/core/failover/executor.test.js +0 -256
  38. package/dist/__tests__/core/failover/executor.test.js.map +0 -1
  39. package/dist/__tests__/core/monitoring/collector.test.d.ts +0 -5
  40. package/dist/__tests__/core/monitoring/collector.test.d.ts.map +0 -1
  41. package/dist/__tests__/core/monitoring/collector.test.js +0 -131
  42. package/dist/__tests__/core/monitoring/collector.test.js.map +0 -1
  43. package/dist/__tests__/core/monitoring/exporters.test.d.ts +0 -5
  44. package/dist/__tests__/core/monitoring/exporters.test.d.ts.map +0 -1
  45. package/dist/__tests__/core/monitoring/exporters.test.js +0 -90
  46. package/dist/__tests__/core/monitoring/exporters.test.js.map +0 -1
  47. package/dist/__tests__/core/routing/proxysql-manager.test.d.ts +0 -5
  48. package/dist/__tests__/core/routing/proxysql-manager.test.d.ts.map +0 -1
  49. package/dist/__tests__/core/routing/proxysql-manager.test.js +0 -155
  50. package/dist/__tests__/core/routing/proxysql-manager.test.js.map +0 -1
  51. package/dist/__tests__/types/index.test.d.ts +0 -5
  52. package/dist/__tests__/types/index.test.d.ts.map +0 -1
  53. package/dist/__tests__/types/index.test.js +0 -290
  54. package/dist/__tests__/types/index.test.js.map +0 -1
  55. package/dist/__tests__/utils/exceptions.test.d.ts +0 -5
  56. package/dist/__tests__/utils/exceptions.test.d.ts.map +0 -1
  57. package/dist/__tests__/utils/exceptions.test.js +0 -142
  58. package/dist/__tests__/utils/exceptions.test.js.map +0 -1
  59. package/dist/cli/commands/health.d.ts +0 -12
  60. package/dist/cli/commands/health.d.ts.map +0 -1
  61. package/dist/cli/commands/health.js +0 -125
  62. package/dist/cli/commands/health.js.map +0 -1
@@ -1,290 +0,0 @@
1
- "use strict";
2
- /**
3
- * Tests for ClawSQL core types and models
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const index_1 = require("../../types/index");
7
- describe('Enums', () => {
8
- describe('InstanceRole', () => {
9
- it('should have correct values', () => {
10
- expect(index_1.InstanceRole.PRIMARY).toBe('primary');
11
- expect(index_1.InstanceRole.REPLICA).toBe('replica');
12
- expect(index_1.InstanceRole.UNKNOWN).toBe('unknown');
13
- });
14
- });
15
- describe('InstanceState', () => {
16
- it('should have correct values', () => {
17
- expect(index_1.InstanceState.ONLINE).toBe('online');
18
- expect(index_1.InstanceState.OFFLINE).toBe('offline');
19
- expect(index_1.InstanceState.RECOVERING).toBe('recovering');
20
- expect(index_1.InstanceState.FAILED).toBe('failed');
21
- expect(index_1.InstanceState.MAINTENANCE).toBe('maintenance');
22
- });
23
- });
24
- describe('HealthStatus', () => {
25
- it('should have correct values', () => {
26
- expect(index_1.HealthStatus.HEALTHY).toBe('healthy');
27
- expect(index_1.HealthStatus.DEGRADED).toBe('degraded');
28
- expect(index_1.HealthStatus.UNHEALTHY).toBe('unhealthy');
29
- expect(index_1.HealthStatus.UNKNOWN).toBe('unknown');
30
- });
31
- });
32
- describe('AlertSeverity', () => {
33
- it('should have correct values', () => {
34
- expect(index_1.AlertSeverity.INFO).toBe('info');
35
- expect(index_1.AlertSeverity.WARNING).toBe('warning');
36
- expect(index_1.AlertSeverity.CRITICAL).toBe('critical');
37
- });
38
- });
39
- describe('FailoverState', () => {
40
- it('should have correct values', () => {
41
- expect(index_1.FailoverState.IDLE).toBe('idle');
42
- expect(index_1.FailoverState.DETECTING).toBe('detecting');
43
- expect(index_1.FailoverState.CANDIDATE_SELECTION).toBe('candidate_selection');
44
- expect(index_1.FailoverState.PROMOTING).toBe('promoting');
45
- expect(index_1.FailoverState.RECONFIGURING).toBe('reconfiguring');
46
- expect(index_1.FailoverState.COMPLETED).toBe('completed');
47
- expect(index_1.FailoverState.FAILED).toBe('failed');
48
- });
49
- });
50
- describe('FailureType', () => {
51
- it('should have correct values', () => {
52
- expect(index_1.FailureType.PRIMARY_UNREACHABLE).toBe('primary_unreachable');
53
- expect(index_1.FailureType.PRIMARY_NOT_WRITING).toBe('primary_not_writing');
54
- expect(index_1.FailureType.REPLICATION_STOPPED).toBe('replication_stopped');
55
- expect(index_1.FailureType.REPLICATION_LAG_HIGH).toBe('replication_lag_high');
56
- expect(index_1.FailureType.DISK_FULL).toBe('disk_full');
57
- expect(index_1.FailureType.MEMORY_EXHAUSTED).toBe('memory_exhausted');
58
- });
59
- });
60
- });
61
- describe('Helper Functions', () => {
62
- describe('createInstanceId', () => {
63
- it('should create instance ID from host and port', () => {
64
- expect((0, index_1.createInstanceId)('localhost', 3306)).toBe('localhost:3306');
65
- expect((0, index_1.createInstanceId)('192.168.1.1', 3307)).toBe('192.168.1.1:3307');
66
- expect((0, index_1.createInstanceId)('mysql-primary', 3306)).toBe('mysql-primary:3306');
67
- });
68
- });
69
- describe('createMySQLInstance', () => {
70
- it('should create instance with default values', () => {
71
- const instance = (0, index_1.createMySQLInstance)('localhost', 3306);
72
- expect(instance.host).toBe('localhost');
73
- expect(instance.port).toBe(3306);
74
- expect(instance.role).toBe(index_1.InstanceRole.UNKNOWN);
75
- expect(instance.state).toBe(index_1.InstanceState.OFFLINE);
76
- expect(instance.labels).toEqual({});
77
- expect(instance.extra).toEqual({});
78
- expect(instance.lastSeen).toBeInstanceOf(Date);
79
- });
80
- it('should create instance with overrides', () => {
81
- const instance = (0, index_1.createMySQLInstance)('localhost', 3306, {
82
- role: index_1.InstanceRole.PRIMARY,
83
- state: index_1.InstanceState.ONLINE,
84
- serverId: 1,
85
- version: '8.0.32',
86
- clusterId: 'cluster-123',
87
- labels: { env: 'production' },
88
- });
89
- expect(instance.role).toBe(index_1.InstanceRole.PRIMARY);
90
- expect(instance.state).toBe(index_1.InstanceState.ONLINE);
91
- expect(instance.serverId).toBe(1);
92
- expect(instance.version).toBe('8.0.32');
93
- expect(instance.clusterId).toBe('cluster-123');
94
- expect(instance.labels).toEqual({ env: 'production' });
95
- });
96
- });
97
- describe('createMySQLCluster', () => {
98
- it('should create cluster with default values', () => {
99
- const cluster = (0, index_1.createMySQLCluster)('cluster-123', 'test-cluster');
100
- expect(cluster.clusterId).toBe('cluster-123');
101
- expect(cluster.name).toBe('test-cluster');
102
- expect(cluster.primary).toBeUndefined();
103
- expect(cluster.replicas).toEqual([]);
104
- expect(cluster.createdAt).toBeInstanceOf(Date);
105
- expect(cluster.updatedAt).toBeInstanceOf(Date);
106
- });
107
- it('should create cluster with overrides', () => {
108
- const primary = (0, index_1.createMySQLInstance)('primary', 3306, { role: index_1.InstanceRole.PRIMARY });
109
- const replica = (0, index_1.createMySQLInstance)('replica', 3306, { role: index_1.InstanceRole.REPLICA });
110
- const cluster = (0, index_1.createMySQLCluster)('cluster-123', 'test-cluster', {
111
- primary,
112
- replicas: [replica],
113
- description: 'Test cluster',
114
- });
115
- expect(cluster.primary).toBe(primary);
116
- expect(cluster.replicas).toHaveLength(1);
117
- expect(cluster.description).toBe('Test cluster');
118
- });
119
- });
120
- describe('isPrimary', () => {
121
- it('should return true for primary instances', () => {
122
- const instance = (0, index_1.createMySQLInstance)('host', 3306, { role: index_1.InstanceRole.PRIMARY });
123
- expect((0, index_1.isPrimary)(instance)).toBe(true);
124
- });
125
- it('should return false for non-primary instances', () => {
126
- const instance = (0, index_1.createMySQLInstance)('host', 3306, { role: index_1.InstanceRole.REPLICA });
127
- expect((0, index_1.isPrimary)(instance)).toBe(false);
128
- });
129
- it('should return false for unknown role', () => {
130
- const instance = (0, index_1.createMySQLInstance)('host', 3306);
131
- expect((0, index_1.isPrimary)(instance)).toBe(false);
132
- });
133
- });
134
- describe('isReplica', () => {
135
- it('should return true for replica instances', () => {
136
- const instance = (0, index_1.createMySQLInstance)('host', 3306, { role: index_1.InstanceRole.REPLICA });
137
- expect((0, index_1.isReplica)(instance)).toBe(true);
138
- });
139
- it('should return false for non-replica instances', () => {
140
- const instance = (0, index_1.createMySQLInstance)('host', 3306, { role: index_1.InstanceRole.PRIMARY });
141
- expect((0, index_1.isReplica)(instance)).toBe(false);
142
- });
143
- });
144
- describe('isOnline', () => {
145
- it('should return true for online instances', () => {
146
- const instance = (0, index_1.createMySQLInstance)('host', 3306, { state: index_1.InstanceState.ONLINE });
147
- expect((0, index_1.isOnline)(instance)).toBe(true);
148
- });
149
- it('should return false for offline instances', () => {
150
- const instance = (0, index_1.createMySQLInstance)('host', 3306, { state: index_1.InstanceState.OFFLINE });
151
- expect((0, index_1.isOnline)(instance)).toBe(false);
152
- });
153
- });
154
- describe('isHealthy', () => {
155
- it('should return true for online primary instances', () => {
156
- const instance = (0, index_1.createMySQLInstance)('host', 3306, {
157
- state: index_1.InstanceState.ONLINE,
158
- role: index_1.InstanceRole.PRIMARY,
159
- });
160
- expect((0, index_1.isHealthy)(instance)).toBe(true);
161
- });
162
- it('should return true for online replica instances', () => {
163
- const instance = (0, index_1.createMySQLInstance)('host', 3306, {
164
- state: index_1.InstanceState.ONLINE,
165
- role: index_1.InstanceRole.REPLICA,
166
- });
167
- expect((0, index_1.isHealthy)(instance)).toBe(true);
168
- });
169
- it('should return false for offline instances', () => {
170
- const instance = (0, index_1.createMySQLInstance)('host', 3306, {
171
- state: index_1.InstanceState.OFFLINE,
172
- role: index_1.InstanceRole.PRIMARY,
173
- });
174
- expect((0, index_1.isHealthy)(instance)).toBe(false);
175
- });
176
- it('should return false for unknown role', () => {
177
- const instance = (0, index_1.createMySQLInstance)('host', 3306, {
178
- state: index_1.InstanceState.ONLINE,
179
- role: index_1.InstanceRole.UNKNOWN,
180
- });
181
- expect((0, index_1.isHealthy)(instance)).toBe(false);
182
- });
183
- });
184
- describe('getInstanceCount', () => {
185
- it('should return 0 for empty cluster', () => {
186
- const cluster = (0, index_1.createMySQLCluster)('cluster-1', 'test');
187
- expect((0, index_1.getInstanceCount)(cluster)).toBe(0);
188
- });
189
- it('should return 1 for cluster with only primary', () => {
190
- const primary = (0, index_1.createMySQLInstance)('primary', 3306);
191
- const cluster = (0, index_1.createMySQLCluster)('cluster-1', 'test', { primary });
192
- expect((0, index_1.getInstanceCount)(cluster)).toBe(1);
193
- });
194
- it('should count replicas correctly', () => {
195
- const replica1 = (0, index_1.createMySQLInstance)('replica1', 3306);
196
- const replica2 = (0, index_1.createMySQLInstance)('replica2', 3306);
197
- const cluster = (0, index_1.createMySQLCluster)('cluster-1', 'test', {
198
- replicas: [replica1, replica2],
199
- });
200
- expect((0, index_1.getInstanceCount)(cluster)).toBe(2);
201
- });
202
- it('should count all instances', () => {
203
- const primary = (0, index_1.createMySQLInstance)('primary', 3306);
204
- const replica1 = (0, index_1.createMySQLInstance)('replica1', 3306);
205
- const replica2 = (0, index_1.createMySQLInstance)('replica2', 3306);
206
- const cluster = (0, index_1.createMySQLCluster)('cluster-1', 'test', {
207
- primary,
208
- replicas: [replica1, replica2],
209
- });
210
- expect((0, index_1.getInstanceCount)(cluster)).toBe(3);
211
- });
212
- });
213
- describe('getHealthyCount', () => {
214
- it('should return 0 for empty cluster', () => {
215
- const cluster = (0, index_1.createMySQLCluster)('cluster-1', 'test');
216
- expect((0, index_1.getHealthyCount)(cluster)).toBe(0);
217
- });
218
- it('should count healthy instances only', () => {
219
- const primary = (0, index_1.createMySQLInstance)('primary', 3306, {
220
- state: index_1.InstanceState.ONLINE,
221
- role: index_1.InstanceRole.PRIMARY,
222
- });
223
- const replica1 = (0, index_1.createMySQLInstance)('replica1', 3306, {
224
- state: index_1.InstanceState.ONLINE,
225
- role: index_1.InstanceRole.REPLICA,
226
- });
227
- const replica2 = (0, index_1.createMySQLInstance)('replica2', 3306, {
228
- state: index_1.InstanceState.OFFLINE,
229
- role: index_1.InstanceRole.REPLICA,
230
- });
231
- const cluster = (0, index_1.createMySQLCluster)('cluster-1', 'test', {
232
- primary,
233
- replicas: [replica1, replica2],
234
- });
235
- expect((0, index_1.getHealthyCount)(cluster)).toBe(2);
236
- });
237
- });
238
- describe('getClusterHealthStatus', () => {
239
- it('should return UNKNOWN for empty cluster', () => {
240
- const cluster = (0, index_1.createMySQLCluster)('cluster-1', 'test');
241
- expect((0, index_1.getClusterHealthStatus)(cluster)).toBe(index_1.HealthStatus.UNKNOWN);
242
- });
243
- it('should return HEALTHY when all instances are healthy', () => {
244
- const primary = (0, index_1.createMySQLInstance)('primary', 3306, {
245
- state: index_1.InstanceState.ONLINE,
246
- role: index_1.InstanceRole.PRIMARY,
247
- });
248
- const replica = (0, index_1.createMySQLInstance)('replica', 3306, {
249
- state: index_1.InstanceState.ONLINE,
250
- role: index_1.InstanceRole.REPLICA,
251
- });
252
- const cluster = (0, index_1.createMySQLCluster)('cluster-1', 'test', {
253
- primary,
254
- replicas: [replica],
255
- });
256
- expect((0, index_1.getClusterHealthStatus)(cluster)).toBe(index_1.HealthStatus.HEALTHY);
257
- });
258
- it('should return DEGRADED when half or more instances are healthy', () => {
259
- const primary = (0, index_1.createMySQLInstance)('primary', 3306, {
260
- state: index_1.InstanceState.ONLINE,
261
- role: index_1.InstanceRole.PRIMARY,
262
- });
263
- const replica1 = (0, index_1.createMySQLInstance)('replica1', 3306, {
264
- state: index_1.InstanceState.OFFLINE,
265
- role: index_1.InstanceRole.REPLICA,
266
- });
267
- const cluster = (0, index_1.createMySQLCluster)('cluster-1', 'test', {
268
- primary,
269
- replicas: [replica1],
270
- });
271
- expect((0, index_1.getClusterHealthStatus)(cluster)).toBe(index_1.HealthStatus.DEGRADED);
272
- });
273
- it('should return UNHEALTHY when less than half instances are healthy', () => {
274
- const primary = (0, index_1.createMySQLInstance)('primary', 3306, {
275
- state: index_1.InstanceState.OFFLINE,
276
- role: index_1.InstanceRole.PRIMARY,
277
- });
278
- const replica = (0, index_1.createMySQLInstance)('replica', 3306, {
279
- state: index_1.InstanceState.OFFLINE,
280
- role: index_1.InstanceRole.REPLICA,
281
- });
282
- const cluster = (0, index_1.createMySQLCluster)('cluster-1', 'test', {
283
- primary,
284
- replicas: [replica],
285
- });
286
- expect((0, index_1.getClusterHealthStatus)(cluster)).toBe(index_1.HealthStatus.UNHEALTHY);
287
- });
288
- });
289
- });
290
- //# sourceMappingURL=index.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../src/__tests__/types/index.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- /**
2
- * Tests for ClawSQL custom exceptions
3
- */
4
- export {};
5
- //# sourceMappingURL=exceptions.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"exceptions.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/utils/exceptions.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -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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"}