clawsql 0.2.4 → 0.2.6
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/README.md +67 -16
- package/dist/api/schemas/index.d.ts +20 -20
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +12 -0
- package/dist/app.js.map +1 -1
- package/dist/bin/clawsql.js +0 -0
- package/dist/cli/commands/clusters.d.ts +1 -1
- package/dist/cli/commands/clusters.d.ts.map +1 -1
- package/dist/cli/commands/clusters.js +291 -56
- package/dist/cli/commands/clusters.js.map +1 -1
- package/dist/cli/commands/templates.d.ts +11 -0
- package/dist/cli/commands/templates.d.ts.map +1 -0
- package/dist/cli/commands/templates.js +206 -0
- package/dist/cli/commands/templates.js.map +1 -0
- package/dist/cli/formatter.d.ts +24 -0
- package/dist/cli/formatter.d.ts.map +1 -1
- package/dist/cli/formatter.js +22 -0
- package/dist/cli/formatter.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/utils/args.d.ts +25 -0
- package/dist/cli/utils/args.d.ts.map +1 -0
- package/dist/cli/utils/args.js +51 -0
- package/dist/cli/utils/args.js.map +1 -0
- package/dist/config/settings.d.ts +38 -6
- package/dist/config/settings.d.ts.map +1 -1
- package/dist/config/settings.js +8 -0
- package/dist/config/settings.js.map +1 -1
- package/dist/core/provisioning/cluster-provisioner.d.ts +99 -0
- package/dist/core/provisioning/cluster-provisioner.d.ts.map +1 -0
- package/dist/core/provisioning/cluster-provisioner.js +415 -0
- package/dist/core/provisioning/cluster-provisioner.js.map +1 -0
- package/dist/core/provisioning/index.d.ts +12 -0
- package/dist/core/provisioning/index.d.ts.map +1 -0
- package/dist/core/provisioning/index.js +21 -0
- package/dist/core/provisioning/index.js.map +1 -0
- package/dist/core/provisioning/predefined-templates.d.ts +43 -0
- package/dist/core/provisioning/predefined-templates.d.ts.map +1 -0
- package/dist/core/provisioning/predefined-templates.js +117 -0
- package/dist/core/provisioning/predefined-templates.js.map +1 -0
- package/dist/core/provisioning/template-manager.d.ts +113 -0
- package/dist/core/provisioning/template-manager.d.ts.map +1 -0
- package/dist/core/provisioning/template-manager.js +274 -0
- package/dist/core/provisioning/template-manager.js.map +1 -0
- package/dist/core/routing/proxysql-manager.d.ts +17 -0
- package/dist/core/routing/proxysql-manager.d.ts.map +1 -1
- package/dist/core/routing/proxysql-manager.js +77 -0
- package/dist/core/routing/proxysql-manager.js.map +1 -1
- package/dist/types/index.d.ts +52 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +45 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utils/database.d.ts.map +1 -1
- package/dist/utils/database.js +40 -0
- package/dist/utils/database.js.map +1 -1
- package/docker/Dockerfile.allinone +1 -1
- package/docker/Dockerfile.node +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ClawSQL - Provisioning Module
|
|
4
|
+
*
|
|
5
|
+
* Template-based cluster provisioning.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.getPredefinedTemplateNames = exports.isPredefinedTemplate = exports.getPredefinedTemplate = exports.createPredefinedTemplate = exports.PREDEFINED_TEMPLATES = exports.getClusterProvisioner = exports.ClusterProvisioner = exports.getTemplateManager = exports.TemplateManager = void 0;
|
|
9
|
+
var template_manager_js_1 = require("./template-manager.js");
|
|
10
|
+
Object.defineProperty(exports, "TemplateManager", { enumerable: true, get: function () { return template_manager_js_1.TemplateManager; } });
|
|
11
|
+
Object.defineProperty(exports, "getTemplateManager", { enumerable: true, get: function () { return template_manager_js_1.getTemplateManager; } });
|
|
12
|
+
var cluster_provisioner_js_1 = require("./cluster-provisioner.js");
|
|
13
|
+
Object.defineProperty(exports, "ClusterProvisioner", { enumerable: true, get: function () { return cluster_provisioner_js_1.ClusterProvisioner; } });
|
|
14
|
+
Object.defineProperty(exports, "getClusterProvisioner", { enumerable: true, get: function () { return cluster_provisioner_js_1.getClusterProvisioner; } });
|
|
15
|
+
var predefined_templates_js_1 = require("./predefined-templates.js");
|
|
16
|
+
Object.defineProperty(exports, "PREDEFINED_TEMPLATES", { enumerable: true, get: function () { return predefined_templates_js_1.PREDEFINED_TEMPLATES; } });
|
|
17
|
+
Object.defineProperty(exports, "createPredefinedTemplate", { enumerable: true, get: function () { return predefined_templates_js_1.createPredefinedTemplate; } });
|
|
18
|
+
Object.defineProperty(exports, "getPredefinedTemplate", { enumerable: true, get: function () { return predefined_templates_js_1.getPredefinedTemplate; } });
|
|
19
|
+
Object.defineProperty(exports, "isPredefinedTemplate", { enumerable: true, get: function () { return predefined_templates_js_1.isPredefinedTemplate; } });
|
|
20
|
+
Object.defineProperty(exports, "getPredefinedTemplateNames", { enumerable: true, get: function () { return predefined_templates_js_1.getPredefinedTemplateNames; } });
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/provisioning/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,6DAA4E;AAAnE,sHAAA,eAAe,OAAA;AAAE,yHAAA,kBAAkB,OAAA;AAE5C,mEAAqF;AAA5E,4HAAA,kBAAkB,OAAA;AAAE,+HAAA,qBAAqB,OAAA;AAElD,qEAMmC;AALjC,+HAAA,oBAAoB,OAAA;AACpB,mIAAA,wBAAwB,OAAA;AACxB,gIAAA,qBAAqB,OAAA;AACrB,+HAAA,oBAAoB,OAAA;AACpB,qIAAA,0BAA0B,OAAA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ClawSQL - Predefined Templates
|
|
3
|
+
*
|
|
4
|
+
* Benchmarking templates for common MySQL cluster scenarios.
|
|
5
|
+
* These templates are automatically initialized on first start.
|
|
6
|
+
*/
|
|
7
|
+
import { TopologyTemplate, ReplicationMode } from '../../types/index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Predefined template definitions
|
|
10
|
+
*/
|
|
11
|
+
export interface PredefinedTemplateDefinition {
|
|
12
|
+
name: string;
|
|
13
|
+
description: string;
|
|
14
|
+
primaryCount: number;
|
|
15
|
+
replicaCount: number;
|
|
16
|
+
replicationMode: ReplicationMode;
|
|
17
|
+
settings?: TopologyTemplate['settings'];
|
|
18
|
+
useCase: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Predefined benchmarking templates for MySQL clusters
|
|
22
|
+
*
|
|
23
|
+
* These templates cover common deployment scenarios from development
|
|
24
|
+
* to high-availability production setups.
|
|
25
|
+
*/
|
|
26
|
+
export declare const PREDEFINED_TEMPLATES: PredefinedTemplateDefinition[];
|
|
27
|
+
/**
|
|
28
|
+
* Create a TopologyTemplate from a predefined definition
|
|
29
|
+
*/
|
|
30
|
+
export declare function createPredefinedTemplate(definition: PredefinedTemplateDefinition): TopologyTemplate;
|
|
31
|
+
/**
|
|
32
|
+
* Get predefined template by name
|
|
33
|
+
*/
|
|
34
|
+
export declare function getPredefinedTemplate(name: string): PredefinedTemplateDefinition | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* Check if a template name is a predefined template
|
|
37
|
+
*/
|
|
38
|
+
export declare function isPredefinedTemplate(name: string): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Get all predefined template names
|
|
41
|
+
*/
|
|
42
|
+
export declare function getPredefinedTemplateNames(): string[];
|
|
43
|
+
//# sourceMappingURL=predefined-templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"predefined-templates.d.ts","sourceRoot":"","sources":["../../../src/core/provisioning/predefined-templates.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAA0B,MAAM,sBAAsB,CAAC;AAGjG;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,EAAE,4BAA4B,EA+D9D,CAAC;AAEF;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,4BAA4B,GACvC,gBAAgB,CASlB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,4BAA4B,GAAG,SAAS,CAE5F;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,EAAE,CAErD"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ClawSQL - Predefined Templates
|
|
4
|
+
*
|
|
5
|
+
* Benchmarking templates for common MySQL cluster scenarios.
|
|
6
|
+
* These templates are automatically initialized on first start.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.PREDEFINED_TEMPLATES = void 0;
|
|
10
|
+
exports.createPredefinedTemplate = createPredefinedTemplate;
|
|
11
|
+
exports.getPredefinedTemplate = getPredefinedTemplate;
|
|
12
|
+
exports.isPredefinedTemplate = isPredefinedTemplate;
|
|
13
|
+
exports.getPredefinedTemplateNames = getPredefinedTemplateNames;
|
|
14
|
+
const index_js_1 = require("../../types/index.js");
|
|
15
|
+
const crypto_1 = require("crypto");
|
|
16
|
+
/**
|
|
17
|
+
* Predefined benchmarking templates for MySQL clusters
|
|
18
|
+
*
|
|
19
|
+
* These templates cover common deployment scenarios from development
|
|
20
|
+
* to high-availability production setups.
|
|
21
|
+
*/
|
|
22
|
+
exports.PREDEFINED_TEMPLATES = [
|
|
23
|
+
{
|
|
24
|
+
name: 'dev-single',
|
|
25
|
+
description: 'Single MySQL instance for development/testing',
|
|
26
|
+
primaryCount: 1,
|
|
27
|
+
replicaCount: 0,
|
|
28
|
+
replicationMode: index_js_1.ReplicationMode.ASYNC,
|
|
29
|
+
useCase: 'Local development, testing, CI/CD pipelines',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
name: 'dev-replica',
|
|
33
|
+
description: 'Primary with one replica for development with redundancy',
|
|
34
|
+
primaryCount: 1,
|
|
35
|
+
replicaCount: 1,
|
|
36
|
+
replicationMode: index_js_1.ReplicationMode.ASYNC,
|
|
37
|
+
settings: { maxReplicationLag: 60 },
|
|
38
|
+
useCase: 'Development with backup, read scaling tests',
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
name: 'standard',
|
|
42
|
+
description: 'Standard production setup: 1 primary + 2 async replicas',
|
|
43
|
+
primaryCount: 1,
|
|
44
|
+
replicaCount: 2,
|
|
45
|
+
replicationMode: index_js_1.ReplicationMode.ASYNC,
|
|
46
|
+
settings: { maxReplicationLag: 30, failoverPriority: 'lowest-lag' },
|
|
47
|
+
useCase: 'General production workloads, moderate read scaling',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: 'ha-semisync',
|
|
51
|
+
description: 'High availability with semi-sync replication: 1 primary + 2 replicas',
|
|
52
|
+
primaryCount: 1,
|
|
53
|
+
replicaCount: 2,
|
|
54
|
+
replicationMode: index_js_1.ReplicationMode.SEMI_SYNC,
|
|
55
|
+
settings: { maxReplicationLag: 10, failoverPriority: 'highest-binlog' },
|
|
56
|
+
useCase: 'Critical production, financial transactions, zero data loss requirement',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
name: 'read-heavy',
|
|
60
|
+
description: 'Read-heavy workload: 1 primary + 4 async replicas',
|
|
61
|
+
primaryCount: 1,
|
|
62
|
+
replicaCount: 4,
|
|
63
|
+
replicationMode: index_js_1.ReplicationMode.ASYNC,
|
|
64
|
+
settings: { maxReplicationLag: 30, failoverPriority: 'lowest-lag' },
|
|
65
|
+
useCase: 'Analytics, reporting, content delivery, high read throughput',
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
name: 'production-ha',
|
|
69
|
+
description: 'Maximum availability: 1 primary + 3 semi-sync replicas',
|
|
70
|
+
primaryCount: 1,
|
|
71
|
+
replicaCount: 3,
|
|
72
|
+
replicationMode: index_js_1.ReplicationMode.SEMI_SYNC,
|
|
73
|
+
settings: { maxReplicationLag: 5, failoverPriority: 'highest-binlog' },
|
|
74
|
+
useCase: 'Mission-critical production, enterprise databases, compliance requirements',
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: 'geo-distributed',
|
|
78
|
+
description: 'Geo-distributed setup: 1 primary + 5 async replicas across regions',
|
|
79
|
+
primaryCount: 1,
|
|
80
|
+
replicaCount: 5,
|
|
81
|
+
replicationMode: index_js_1.ReplicationMode.ASYNC,
|
|
82
|
+
settings: { maxReplicationLag: 120, failoverPriority: 'lowest-lag' },
|
|
83
|
+
useCase: 'Multi-region deployment, disaster recovery, global read availability',
|
|
84
|
+
},
|
|
85
|
+
];
|
|
86
|
+
/**
|
|
87
|
+
* Create a TopologyTemplate from a predefined definition
|
|
88
|
+
*/
|
|
89
|
+
function createPredefinedTemplate(definition) {
|
|
90
|
+
return (0, index_js_1.createTopologyTemplate)((0, crypto_1.randomUUID)(), {
|
|
91
|
+
name: definition.name,
|
|
92
|
+
description: definition.description,
|
|
93
|
+
primaryCount: definition.primaryCount,
|
|
94
|
+
replicaCount: definition.replicaCount,
|
|
95
|
+
replicationMode: definition.replicationMode,
|
|
96
|
+
settings: definition.settings,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Get predefined template by name
|
|
101
|
+
*/
|
|
102
|
+
function getPredefinedTemplate(name) {
|
|
103
|
+
return exports.PREDEFINED_TEMPLATES.find((t) => t.name === name);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Check if a template name is a predefined template
|
|
107
|
+
*/
|
|
108
|
+
function isPredefinedTemplate(name) {
|
|
109
|
+
return exports.PREDEFINED_TEMPLATES.some((t) => t.name === name);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Get all predefined template names
|
|
113
|
+
*/
|
|
114
|
+
function getPredefinedTemplateNames() {
|
|
115
|
+
return exports.PREDEFINED_TEMPLATES.map((t) => t.name);
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=predefined-templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"predefined-templates.js","sourceRoot":"","sources":["../../../src/core/provisioning/predefined-templates.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ClawSQL - Template Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages topology templates for cluster provisioning.
|
|
5
|
+
*/
|
|
6
|
+
import { TopologyTemplate, ReplicationMode } from '../../types/index.js';
|
|
7
|
+
import { PredefinedTemplateDefinition } from './predefined-templates.js';
|
|
8
|
+
/**
|
|
9
|
+
* Template creation options
|
|
10
|
+
*/
|
|
11
|
+
export interface TemplateCreateOptions {
|
|
12
|
+
name: string;
|
|
13
|
+
description?: string;
|
|
14
|
+
primaryCount?: number;
|
|
15
|
+
replicaCount?: number;
|
|
16
|
+
replicationMode?: ReplicationMode;
|
|
17
|
+
settings?: TopologyTemplate['settings'];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Template update options
|
|
21
|
+
*/
|
|
22
|
+
export interface TemplateUpdateOptions {
|
|
23
|
+
name?: string;
|
|
24
|
+
description?: string;
|
|
25
|
+
primaryCount?: number;
|
|
26
|
+
replicaCount?: number;
|
|
27
|
+
replicationMode?: ReplicationMode;
|
|
28
|
+
settings?: TopologyTemplate['settings'];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Host validation result
|
|
32
|
+
*/
|
|
33
|
+
export interface HostValidationResult {
|
|
34
|
+
valid: boolean;
|
|
35
|
+
error?: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Host specification for provisioning
|
|
39
|
+
*/
|
|
40
|
+
export interface HostSpec {
|
|
41
|
+
host: string;
|
|
42
|
+
port: number;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Template Manager
|
|
46
|
+
*
|
|
47
|
+
* Handles CRUD operations for topology templates.
|
|
48
|
+
*/
|
|
49
|
+
export declare class TemplateManager {
|
|
50
|
+
private db;
|
|
51
|
+
private initialized;
|
|
52
|
+
/**
|
|
53
|
+
* List all templates
|
|
54
|
+
*/
|
|
55
|
+
list(): Promise<TopologyTemplate[]>;
|
|
56
|
+
/**
|
|
57
|
+
* Get a template by name
|
|
58
|
+
*/
|
|
59
|
+
get(name: string): Promise<TopologyTemplate | null>;
|
|
60
|
+
/**
|
|
61
|
+
* Get a template by ID
|
|
62
|
+
*/
|
|
63
|
+
getById(templateId: string): Promise<TopologyTemplate | null>;
|
|
64
|
+
/**
|
|
65
|
+
* Create a new template
|
|
66
|
+
*/
|
|
67
|
+
create(options: TemplateCreateOptions): Promise<TopologyTemplate>;
|
|
68
|
+
/**
|
|
69
|
+
* Update an existing template
|
|
70
|
+
*/
|
|
71
|
+
update(name: string, updates: TemplateUpdateOptions): Promise<TopologyTemplate | null>;
|
|
72
|
+
/**
|
|
73
|
+
* Delete a template
|
|
74
|
+
*/
|
|
75
|
+
delete(name: string): Promise<boolean>;
|
|
76
|
+
/**
|
|
77
|
+
* Validate hosts against template requirements
|
|
78
|
+
*/
|
|
79
|
+
validateHosts(templateOrName: string | TopologyTemplate, hosts: HostSpec[]): Promise<HostValidationResult>;
|
|
80
|
+
/**
|
|
81
|
+
* Initialize predefined templates
|
|
82
|
+
*
|
|
83
|
+
* Creates predefined benchmarking templates if they don't already exist.
|
|
84
|
+
* This is called during platform startup.
|
|
85
|
+
*/
|
|
86
|
+
initializePredefinedTemplates(): Promise<number>;
|
|
87
|
+
/**
|
|
88
|
+
* Get predefined template definitions
|
|
89
|
+
*
|
|
90
|
+
* Returns the list of predefined template definitions with use cases.
|
|
91
|
+
*/
|
|
92
|
+
getPredefinedTemplateDefinitions(): PredefinedTemplateDefinition[];
|
|
93
|
+
/**
|
|
94
|
+
* Check if a template name is predefined
|
|
95
|
+
*/
|
|
96
|
+
isPredefined(name: string): boolean;
|
|
97
|
+
/**
|
|
98
|
+
* Get template or create predefined if name matches
|
|
99
|
+
*
|
|
100
|
+
* If the name matches a predefined template and it doesn't exist,
|
|
101
|
+
* it will be created automatically.
|
|
102
|
+
*/
|
|
103
|
+
getOrCreate(name: string): Promise<TopologyTemplate | null>;
|
|
104
|
+
/**
|
|
105
|
+
* Convert database row to TopologyTemplate object
|
|
106
|
+
*/
|
|
107
|
+
private rowToTemplate;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Get the template manager instance
|
|
111
|
+
*/
|
|
112
|
+
export declare function getTemplateManager(): TemplateManager;
|
|
113
|
+
//# sourceMappingURL=template-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-manager.d.ts","sourceRoot":"","sources":["../../../src/core/provisioning/template-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EACL,gBAAgB,EAChB,eAAe,EAEhB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAIL,4BAA4B,EAC7B,MAAM,2BAA2B,CAAC;AAInC;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,WAAW,CAAS;IAE5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAgBzC;;OAEG;IACG,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAkBzD;;OAEG;IACG,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAkBnE;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAqCvE;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAgC5F;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAwB5C;;OAEG;IACG,aAAa,CACjB,cAAc,EAAE,MAAM,GAAG,gBAAgB,EACzC,KAAK,EAAE,QAAQ,EAAE,GAChB,OAAO,CAAC,oBAAoB,CAAC;IA6BhC;;;;;OAKG;IACG,6BAA6B,IAAI,OAAO,CAAC,MAAM,CAAC;IAiDtD;;;;OAIG;IACH,gCAAgC,IAAI,4BAA4B,EAAE;IAIlE;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAInC;;;;;OAKG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAmCjE;;OAEG;IACH,OAAO,CAAC,aAAa;CA+BtB;AAKD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,eAAe,CAKpD"}
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ClawSQL - Template Manager
|
|
4
|
+
*
|
|
5
|
+
* Manages topology templates for cluster provisioning.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.TemplateManager = void 0;
|
|
9
|
+
exports.getTemplateManager = getTemplateManager;
|
|
10
|
+
const logger_js_1 = require("../../utils/logger.js");
|
|
11
|
+
const database_js_1 = require("../../utils/database.js");
|
|
12
|
+
const index_js_1 = require("../../types/index.js");
|
|
13
|
+
const crypto_1 = require("crypto");
|
|
14
|
+
const predefined_templates_js_1 = require("./predefined-templates.js");
|
|
15
|
+
const logger = (0, logger_js_1.getLogger)('template-manager');
|
|
16
|
+
/**
|
|
17
|
+
* Template Manager
|
|
18
|
+
*
|
|
19
|
+
* Handles CRUD operations for topology templates.
|
|
20
|
+
*/
|
|
21
|
+
class TemplateManager {
|
|
22
|
+
db = (0, database_js_1.getDatabase)();
|
|
23
|
+
initialized = false;
|
|
24
|
+
/**
|
|
25
|
+
* List all templates
|
|
26
|
+
*/
|
|
27
|
+
async list() {
|
|
28
|
+
const rows = await this.db.query('SELECT * FROM topology_templates ORDER BY created_at DESC');
|
|
29
|
+
return rows.map((row) => this.rowToTemplate(row));
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get a template by name
|
|
33
|
+
*/
|
|
34
|
+
async get(name) {
|
|
35
|
+
const row = await this.db.get('SELECT * FROM topology_templates WHERE name = ?', [name]);
|
|
36
|
+
if (!row)
|
|
37
|
+
return null;
|
|
38
|
+
return this.rowToTemplate(row);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get a template by ID
|
|
42
|
+
*/
|
|
43
|
+
async getById(templateId) {
|
|
44
|
+
const row = await this.db.get('SELECT * FROM topology_templates WHERE template_id = ?', [templateId]);
|
|
45
|
+
if (!row)
|
|
46
|
+
return null;
|
|
47
|
+
return this.rowToTemplate(row);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Create a new template
|
|
51
|
+
*/
|
|
52
|
+
async create(options) {
|
|
53
|
+
// Check if template name already exists
|
|
54
|
+
const existing = await this.get(options.name);
|
|
55
|
+
if (existing) {
|
|
56
|
+
throw new Error(`Template "${options.name}" already exists`);
|
|
57
|
+
}
|
|
58
|
+
const templateId = (0, crypto_1.randomUUID)();
|
|
59
|
+
const settingsJson = options.settings ? JSON.stringify(options.settings) : null;
|
|
60
|
+
await this.db.execute(`INSERT INTO topology_templates
|
|
61
|
+
(template_id, name, description, primary_count, replica_count, replication_mode, settings)
|
|
62
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)`, [
|
|
63
|
+
templateId,
|
|
64
|
+
options.name,
|
|
65
|
+
options.description ?? null,
|
|
66
|
+
options.primaryCount ?? 1,
|
|
67
|
+
options.replicaCount ?? 2,
|
|
68
|
+
options.replicationMode ?? index_js_1.ReplicationMode.ASYNC,
|
|
69
|
+
settingsJson,
|
|
70
|
+
]);
|
|
71
|
+
logger.info({ templateId, name: options.name }, 'Template created');
|
|
72
|
+
return (0, index_js_1.createTopologyTemplate)(templateId, {
|
|
73
|
+
name: options.name,
|
|
74
|
+
description: options.description,
|
|
75
|
+
primaryCount: options.primaryCount ?? 1,
|
|
76
|
+
replicaCount: options.replicaCount ?? 2,
|
|
77
|
+
replicationMode: options.replicationMode ?? index_js_1.ReplicationMode.ASYNC,
|
|
78
|
+
settings: options.settings,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Update an existing template
|
|
83
|
+
*/
|
|
84
|
+
async update(name, updates) {
|
|
85
|
+
const existing = await this.get(name);
|
|
86
|
+
if (!existing)
|
|
87
|
+
return null;
|
|
88
|
+
// If no updates provided, return existing template
|
|
89
|
+
if (Object.keys(updates).length === 0) {
|
|
90
|
+
return existing;
|
|
91
|
+
}
|
|
92
|
+
const settingsJson = updates.settings ? JSON.stringify(updates.settings) : null;
|
|
93
|
+
await this.db.execute(`UPDATE topology_templates
|
|
94
|
+
SET name = ?, description = ?, primary_count = ?, replica_count = ?, replication_mode = ?, settings = ?
|
|
95
|
+
WHERE template_id = ?`, [
|
|
96
|
+
updates.name ?? existing.name,
|
|
97
|
+
updates.description ?? existing.description ?? null,
|
|
98
|
+
updates.primaryCount ?? existing.primaryCount,
|
|
99
|
+
updates.replicaCount ?? existing.replicaCount,
|
|
100
|
+
updates.replicationMode ?? existing.replicationMode,
|
|
101
|
+
settingsJson ?? (existing.settings ? JSON.stringify(existing.settings) : null),
|
|
102
|
+
existing.templateId,
|
|
103
|
+
]);
|
|
104
|
+
logger.info({ templateId: existing.templateId, updates }, 'Template updated');
|
|
105
|
+
// Return updated template
|
|
106
|
+
return this.get(updates.name ?? name);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Delete a template
|
|
110
|
+
*/
|
|
111
|
+
async delete(name) {
|
|
112
|
+
const existing = await this.get(name);
|
|
113
|
+
if (!existing)
|
|
114
|
+
return false;
|
|
115
|
+
// Check if template is being used by any clusters
|
|
116
|
+
const clusters = await this.db.query('SELECT cluster_id FROM cluster_metadata WHERE template_id = ?', [existing.templateId]);
|
|
117
|
+
if (clusters.length > 0) {
|
|
118
|
+
throw new Error(`Template "${name}" is being used by ${clusters.length} cluster(s)`);
|
|
119
|
+
}
|
|
120
|
+
await this.db.execute('DELETE FROM topology_templates WHERE template_id = ?', [existing.templateId]);
|
|
121
|
+
logger.info({ templateId: existing.templateId, name }, 'Template deleted');
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Validate hosts against template requirements
|
|
126
|
+
*/
|
|
127
|
+
async validateHosts(templateOrName, hosts) {
|
|
128
|
+
// If templateOrName is a string, fetch the template
|
|
129
|
+
const template = typeof templateOrName === 'string' ? await this.get(templateOrName) : templateOrName;
|
|
130
|
+
if (!template) {
|
|
131
|
+
return { valid: false, error: `Template "${templateOrName}" not found` };
|
|
132
|
+
}
|
|
133
|
+
const requiredCount = template.primaryCount + template.replicaCount;
|
|
134
|
+
const hostCount = hosts.length;
|
|
135
|
+
if (hostCount < requiredCount) {
|
|
136
|
+
return {
|
|
137
|
+
valid: false,
|
|
138
|
+
error: `Template requires ${requiredCount} instances but only ${hostCount} provided`,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
if (hostCount > requiredCount) {
|
|
142
|
+
return {
|
|
143
|
+
valid: false,
|
|
144
|
+
error: `Template requires exactly ${requiredCount} instances but ${hostCount} provided`,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
return { valid: true };
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Initialize predefined templates
|
|
151
|
+
*
|
|
152
|
+
* Creates predefined benchmarking templates if they don't already exist.
|
|
153
|
+
* This is called during platform startup.
|
|
154
|
+
*/
|
|
155
|
+
async initializePredefinedTemplates() {
|
|
156
|
+
// Skip if already initialized
|
|
157
|
+
if (this.initialized) {
|
|
158
|
+
return 0;
|
|
159
|
+
}
|
|
160
|
+
// Batch check existing templates with a single query
|
|
161
|
+
const predefinedNames = predefined_templates_js_1.PREDEFINED_TEMPLATES.map((t) => t.name);
|
|
162
|
+
const existingRows = await this.db.query(`SELECT name FROM topology_templates WHERE name IN (${predefinedNames.map(() => '?').join(', ')})`, predefinedNames);
|
|
163
|
+
const existingNames = new Set(existingRows.map((r) => r.name));
|
|
164
|
+
let created = 0;
|
|
165
|
+
for (const definition of predefined_templates_js_1.PREDEFINED_TEMPLATES) {
|
|
166
|
+
if (existingNames.has(definition.name)) {
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
const template = (0, predefined_templates_js_1.createPredefinedTemplate)(definition);
|
|
170
|
+
await this.db.execute(`INSERT INTO topology_templates
|
|
171
|
+
(template_id, name, description, primary_count, replica_count, replication_mode, settings)
|
|
172
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)`, [
|
|
173
|
+
template.templateId,
|
|
174
|
+
template.name,
|
|
175
|
+
template.description ?? null,
|
|
176
|
+
template.primaryCount,
|
|
177
|
+
template.replicaCount,
|
|
178
|
+
template.replicationMode,
|
|
179
|
+
template.settings ? JSON.stringify(template.settings) : null,
|
|
180
|
+
]);
|
|
181
|
+
logger.info({ name: template.name, templateId: template.templateId }, 'Predefined template created');
|
|
182
|
+
created++;
|
|
183
|
+
}
|
|
184
|
+
this.initialized = true;
|
|
185
|
+
if (created > 0) {
|
|
186
|
+
logger.info({ count: created }, 'Predefined templates initialized');
|
|
187
|
+
}
|
|
188
|
+
return created;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Get predefined template definitions
|
|
192
|
+
*
|
|
193
|
+
* Returns the list of predefined template definitions with use cases.
|
|
194
|
+
*/
|
|
195
|
+
getPredefinedTemplateDefinitions() {
|
|
196
|
+
return predefined_templates_js_1.PREDEFINED_TEMPLATES;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Check if a template name is predefined
|
|
200
|
+
*/
|
|
201
|
+
isPredefined(name) {
|
|
202
|
+
return (0, predefined_templates_js_1.isPredefinedTemplate)(name);
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Get template or create predefined if name matches
|
|
206
|
+
*
|
|
207
|
+
* If the name matches a predefined template and it doesn't exist,
|
|
208
|
+
* it will be created automatically.
|
|
209
|
+
*/
|
|
210
|
+
async getOrCreate(name) {
|
|
211
|
+
// First try to get existing template
|
|
212
|
+
const existing = await this.get(name);
|
|
213
|
+
if (existing) {
|
|
214
|
+
return existing;
|
|
215
|
+
}
|
|
216
|
+
// Check if it's a predefined template
|
|
217
|
+
const definition = predefined_templates_js_1.PREDEFINED_TEMPLATES.find((t) => t.name === name);
|
|
218
|
+
if (!definition) {
|
|
219
|
+
return null;
|
|
220
|
+
}
|
|
221
|
+
// Create only this one template directly
|
|
222
|
+
const template = (0, predefined_templates_js_1.createPredefinedTemplate)(definition);
|
|
223
|
+
await this.db.execute(`INSERT INTO topology_templates
|
|
224
|
+
(template_id, name, description, primary_count, replica_count, replication_mode, settings)
|
|
225
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)`, [
|
|
226
|
+
template.templateId,
|
|
227
|
+
template.name,
|
|
228
|
+
template.description ?? null,
|
|
229
|
+
template.primaryCount,
|
|
230
|
+
template.replicaCount,
|
|
231
|
+
template.replicationMode,
|
|
232
|
+
template.settings ? JSON.stringify(template.settings) : null,
|
|
233
|
+
]);
|
|
234
|
+
logger.info({ name: template.name, templateId: template.templateId }, 'Predefined template created on demand');
|
|
235
|
+
return template;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Convert database row to TopologyTemplate object
|
|
239
|
+
*/
|
|
240
|
+
rowToTemplate(row) {
|
|
241
|
+
let settings = undefined;
|
|
242
|
+
if (row.settings) {
|
|
243
|
+
try {
|
|
244
|
+
settings = JSON.parse(row.settings);
|
|
245
|
+
}
|
|
246
|
+
catch (error) {
|
|
247
|
+
logger.warn({ templateId: row.template_id, settings: row.settings }, 'Failed to parse template settings JSON');
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return (0, index_js_1.createTopologyTemplate)(row.template_id, {
|
|
251
|
+
name: row.name,
|
|
252
|
+
description: row.description ?? undefined,
|
|
253
|
+
primaryCount: row.primary_count,
|
|
254
|
+
replicaCount: row.replica_count,
|
|
255
|
+
replicationMode: row.replication_mode,
|
|
256
|
+
settings,
|
|
257
|
+
createdAt: row.created_at,
|
|
258
|
+
updatedAt: row.updated_at,
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
exports.TemplateManager = TemplateManager;
|
|
263
|
+
// Singleton instance
|
|
264
|
+
let templateManager = null;
|
|
265
|
+
/**
|
|
266
|
+
* Get the template manager instance
|
|
267
|
+
*/
|
|
268
|
+
function getTemplateManager() {
|
|
269
|
+
if (!templateManager) {
|
|
270
|
+
templateManager = new TemplateManager();
|
|
271
|
+
}
|
|
272
|
+
return templateManager;
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=template-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-manager.js","sourceRoot":"","sources":["../../../src/core/provisioning/template-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -148,6 +148,23 @@ export declare class ProxySQLManager {
|
|
|
148
148
|
* Get the MySQL port that clients connect to
|
|
149
149
|
*/
|
|
150
150
|
getMySQLPort(): number;
|
|
151
|
+
/**
|
|
152
|
+
* Execute a raw SQL query on ProxySQL admin interface
|
|
153
|
+
* Public method for external use
|
|
154
|
+
*/
|
|
155
|
+
executeRaw(sql: string, params?: unknown[]): Promise<unknown[]>;
|
|
156
|
+
/**
|
|
157
|
+
* Get listening ports from ProxySQL
|
|
158
|
+
*/
|
|
159
|
+
getListeningPorts(): Promise<number[]>;
|
|
160
|
+
/**
|
|
161
|
+
* Add a listening port to ProxySQL
|
|
162
|
+
*/
|
|
163
|
+
addListeningPort(port: number): Promise<boolean>;
|
|
164
|
+
/**
|
|
165
|
+
* Remove a listening port from ProxySQL
|
|
166
|
+
*/
|
|
167
|
+
removeListeningPort(port: number): Promise<boolean>;
|
|
151
168
|
/**
|
|
152
169
|
* Get the ProxySQL host
|
|
153
170
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxysql-manager.d.ts","sourceRoot":"","sources":["../../../src/core/routing/proxysql-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAK5D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,QAAQ,GAAG,cAAc,GAAG,cAAc,CAAC;IACnD,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,UAAU,CAAiC;IACnD,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,UAAU,CAA6C;IAC/D,OAAO,CAAC,OAAO,CAA0C;IACzD,OAAO,CAAC,KAAK,CAAsB;IAEnC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,MAAM;IAC9C,MAAM,CAAC,QAAQ,CAAC,wBAAwB,MAAM;gBAElC,QAAQ,CAAC,EAAE,gBAAgB;
|
|
1
|
+
{"version":3,"file":"proxysql-manager.d.ts","sourceRoot":"","sources":["../../../src/core/routing/proxysql-manager.ts"],"names":[],"mappings":"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"}
|