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.
Files changed (59) hide show
  1. package/README.md +67 -16
  2. package/dist/api/schemas/index.d.ts +20 -20
  3. package/dist/app.d.ts.map +1 -1
  4. package/dist/app.js +12 -0
  5. package/dist/app.js.map +1 -1
  6. package/dist/bin/clawsql.js +0 -0
  7. package/dist/cli/commands/clusters.d.ts +1 -1
  8. package/dist/cli/commands/clusters.d.ts.map +1 -1
  9. package/dist/cli/commands/clusters.js +291 -56
  10. package/dist/cli/commands/clusters.js.map +1 -1
  11. package/dist/cli/commands/templates.d.ts +11 -0
  12. package/dist/cli/commands/templates.d.ts.map +1 -0
  13. package/dist/cli/commands/templates.js +206 -0
  14. package/dist/cli/commands/templates.js.map +1 -0
  15. package/dist/cli/formatter.d.ts +24 -0
  16. package/dist/cli/formatter.d.ts.map +1 -1
  17. package/dist/cli/formatter.js +22 -0
  18. package/dist/cli/formatter.js.map +1 -1
  19. package/dist/cli/index.d.ts.map +1 -1
  20. package/dist/cli/index.js +2 -0
  21. package/dist/cli/index.js.map +1 -1
  22. package/dist/cli/utils/args.d.ts +25 -0
  23. package/dist/cli/utils/args.d.ts.map +1 -0
  24. package/dist/cli/utils/args.js +51 -0
  25. package/dist/cli/utils/args.js.map +1 -0
  26. package/dist/config/settings.d.ts +38 -6
  27. package/dist/config/settings.d.ts.map +1 -1
  28. package/dist/config/settings.js +8 -0
  29. package/dist/config/settings.js.map +1 -1
  30. package/dist/core/provisioning/cluster-provisioner.d.ts +99 -0
  31. package/dist/core/provisioning/cluster-provisioner.d.ts.map +1 -0
  32. package/dist/core/provisioning/cluster-provisioner.js +415 -0
  33. package/dist/core/provisioning/cluster-provisioner.js.map +1 -0
  34. package/dist/core/provisioning/index.d.ts +12 -0
  35. package/dist/core/provisioning/index.d.ts.map +1 -0
  36. package/dist/core/provisioning/index.js +21 -0
  37. package/dist/core/provisioning/index.js.map +1 -0
  38. package/dist/core/provisioning/predefined-templates.d.ts +43 -0
  39. package/dist/core/provisioning/predefined-templates.d.ts.map +1 -0
  40. package/dist/core/provisioning/predefined-templates.js +117 -0
  41. package/dist/core/provisioning/predefined-templates.js.map +1 -0
  42. package/dist/core/provisioning/template-manager.d.ts +113 -0
  43. package/dist/core/provisioning/template-manager.d.ts.map +1 -0
  44. package/dist/core/provisioning/template-manager.js +274 -0
  45. package/dist/core/provisioning/template-manager.js.map +1 -0
  46. package/dist/core/routing/proxysql-manager.d.ts +17 -0
  47. package/dist/core/routing/proxysql-manager.d.ts.map +1 -1
  48. package/dist/core/routing/proxysql-manager.js +77 -0
  49. package/dist/core/routing/proxysql-manager.js.map +1 -1
  50. package/dist/types/index.d.ts +52 -0
  51. package/dist/types/index.d.ts.map +1 -1
  52. package/dist/types/index.js +45 -1
  53. package/dist/types/index.js.map +1 -1
  54. package/dist/utils/database.d.ts.map +1 -1
  55. package/dist/utils/database.js +40 -0
  56. package/dist/utils/database.js.map +1 -1
  57. package/docker/Dockerfile.allinone +1 -1
  58. package/docker/Dockerfile.node +1 -1
  59. 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":"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"}
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;IAcvC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAc9B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5B;;;OAGG;YACW,OAAO;IAgCrB;;OAEG;IACG,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB7E;;OAEG;IACG,SAAS,CACb,QAAQ,EAAE,aAAa,EACvB,WAAW,EAAE,MAAM,EACnB,MAAM,GAAE,MAAU,EAClB,cAAc,GAAE,MAAa,GAC5B,OAAO,CAAC,OAAO,CAAC;IAqCnB;;OAEG;IACG,gBAAgB,CACpB,QAAQ,EAAE,aAAa,EACvB,SAAS,GAAE,OAAe,EAC1B,eAAe,GAAE,MAAiD,EAClE,eAAe,GAAE,MAAiD,GACjE,OAAO,CAAC,OAAO,CAAC;IAKnB;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA+BlF;;OAEG;IACG,mBAAmB,CACvB,QAAQ,EAAE,YAAY,EACtB,eAAe,GAAE,MAAiD,EAClE,eAAe,GAAE,MAAiD,GACjE,OAAO,CAAC,OAAO,CAAC;IAsDnB;;;OAGG;IACG,WAAW,CACf,OAAO,EAAE,YAAY,EACrB,eAAe,GAAE,MAAiD,EAClE,eAAe,GAAE,MAAiD,EAClE,SAAS,CAAC,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC;QACT,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QAC/C,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IA+HF;;OAEG;IACG,aAAa,CACjB,OAAO,EAAE,YAAY,EACrB,gBAAgB,GAAE,MAAiD,EACnE,gBAAgB,GAAE,MAAiD,GAClE,OAAO,CAAC,OAAO,CAAC;IA4BnB;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC;IAY7C;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAY1C;;OAEG;IACG,UAAU,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAuCjE;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAyBtD;;OAEG;IACG,wBAAwB,IAAI,OAAO,CAAC,4BAA4B,EAAE,CAAC;IAkBzE;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;;OAGG;IACG,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAIzE;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAqB5C;;OAEG;IACG,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAyBtD;;OAEG;IACG,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA0BzD;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;;OAGG;IACG,eAAe,CAAC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAW1F;;OAEG;IACH,gBAAgB,IAAI;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IAY1E;;OAEG;YACW,YAAY;IAyC1B;;OAEG;YACW,eAAe;IA2B7B;;OAEG;YACW,eAAe;IAqB7B;;OAEG;YACW,QAAQ;IAyBtB;;;OAGG;IACG,mBAAmB,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAwF5F;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAuBrD;;OAEG;IACG,WAAW,CAAC,KAAK,GAAE,MAAY,GAAG,OAAO,CAAC;QAC9C,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC;QACnB,SAAS,EAAE,OAAO,CAAC;QACnB,UAAU,EAAE,IAAI,CAAC;KAClB,EAAE,CAAC;CAOL;AAKD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,eAAe,CAMpD"}