@selentar/analitoly 0.1.1
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/LICENSE +21 -0
- package/README.md +93 -0
- package/api/dist/dashboards/dash_1775220041958_v1r8io.json +829 -0
- package/api/dist/dashboards/dash_1775222037264_1rrsrd.json +309 -0
- package/api/dist/src/agent/agent.controller.d.ts +26 -0
- package/api/dist/src/agent/agent.controller.js +124 -0
- package/api/dist/src/agent/agent.controller.js.map +1 -0
- package/api/dist/src/agent/agent.module.d.ts +2 -0
- package/api/dist/src/agent/agent.module.js +23 -0
- package/api/dist/src/agent/agent.module.js.map +1 -0
- package/api/dist/src/agent/agent.service.d.ts +39 -0
- package/api/dist/src/agent/agent.service.js +389 -0
- package/api/dist/src/agent/agent.service.js.map +1 -0
- package/api/dist/src/agent/mcp-config.d.ts +9 -0
- package/api/dist/src/agent/mcp-config.js +51 -0
- package/api/dist/src/agent/mcp-config.js.map +1 -0
- package/api/dist/src/app.module.d.ts +2 -0
- package/api/dist/src/app.module.js +52 -0
- package/api/dist/src/app.module.js.map +1 -0
- package/api/dist/src/chart/chart.controller.d.ts +8 -0
- package/api/dist/src/chart/chart.controller.js +38 -0
- package/api/dist/src/chart/chart.controller.js.map +1 -0
- package/api/dist/src/chart/chart.module.d.ts +2 -0
- package/api/dist/src/chart/chart.module.js +24 -0
- package/api/dist/src/chart/chart.module.js.map +1 -0
- package/api/dist/src/chart/chart.service.d.ts +32 -0
- package/api/dist/src/chart/chart.service.js +106 -0
- package/api/dist/src/chart/chart.service.js.map +1 -0
- package/api/dist/src/chat/chat.controller.d.ts +14 -0
- package/api/dist/src/chat/chat.controller.js +73 -0
- package/api/dist/src/chat/chat.controller.js.map +1 -0
- package/api/dist/src/chat/chat.module.d.ts +2 -0
- package/api/dist/src/chat/chat.module.js +22 -0
- package/api/dist/src/chat/chat.module.js.map +1 -0
- package/api/dist/src/chat/chat.service.d.ts +25 -0
- package/api/dist/src/chat/chat.service.js +168 -0
- package/api/dist/src/chat/chat.service.js.map +1 -0
- package/api/dist/src/connection/connection.controller.d.ts +46 -0
- package/api/dist/src/connection/connection.controller.js +189 -0
- package/api/dist/src/connection/connection.controller.js.map +1 -0
- package/api/dist/src/connection/connection.model.d.ts +116 -0
- package/api/dist/src/connection/connection.model.js +23 -0
- package/api/dist/src/connection/connection.model.js.map +1 -0
- package/api/dist/src/connection/connection.module.d.ts +2 -0
- package/api/dist/src/connection/connection.module.js +31 -0
- package/api/dist/src/connection/connection.module.js.map +1 -0
- package/api/dist/src/connection/connection.repository.d.ts +16 -0
- package/api/dist/src/connection/connection.repository.js +195 -0
- package/api/dist/src/connection/connection.repository.js.map +1 -0
- package/api/dist/src/connection/connection.service.d.ts +50 -0
- package/api/dist/src/connection/connection.service.js +343 -0
- package/api/dist/src/connection/connection.service.js.map +1 -0
- package/api/dist/src/context/context.controller.d.ts +13 -0
- package/api/dist/src/context/context.controller.js +86 -0
- package/api/dist/src/context/context.controller.js.map +1 -0
- package/api/dist/src/context/context.module.d.ts +2 -0
- package/api/dist/src/context/context.module.js +39 -0
- package/api/dist/src/context/context.module.js.map +1 -0
- package/api/dist/src/context/context.service.d.ts +32 -0
- package/api/dist/src/context/context.service.js +177 -0
- package/api/dist/src/context/context.service.js.map +1 -0
- package/api/dist/src/dashboard/dashboard.controller.d.ts +21 -0
- package/api/dist/src/dashboard/dashboard.controller.js +109 -0
- package/api/dist/src/dashboard/dashboard.controller.js.map +1 -0
- package/api/dist/src/dashboard/dashboard.model.d.ts +15 -0
- package/api/dist/src/dashboard/dashboard.model.js +3 -0
- package/api/dist/src/dashboard/dashboard.model.js.map +1 -0
- package/api/dist/src/dashboard/dashboard.module.d.ts +2 -0
- package/api/dist/src/dashboard/dashboard.module.js +24 -0
- package/api/dist/src/dashboard/dashboard.module.js.map +1 -0
- package/api/dist/src/dashboard/dashboard.repository.d.ts +9 -0
- package/api/dist/src/dashboard/dashboard.repository.js +72 -0
- package/api/dist/src/dashboard/dashboard.repository.js.map +1 -0
- package/api/dist/src/dashboard/dashboard.service.d.ts +14 -0
- package/api/dist/src/dashboard/dashboard.service.js +87 -0
- package/api/dist/src/dashboard/dashboard.service.js.map +1 -0
- package/api/dist/src/datasource/connectors/connector.interface.d.ts +6 -0
- package/api/dist/src/datasource/connectors/connector.interface.js +3 -0
- package/api/dist/src/datasource/connectors/connector.interface.js.map +1 -0
- package/api/dist/src/datasource/connectors/mongo.connector.d.ts +30 -0
- package/api/dist/src/datasource/connectors/mongo.connector.js +167 -0
- package/api/dist/src/datasource/connectors/mongo.connector.js.map +1 -0
- package/api/dist/src/datasource/connectors/mongo.connector.test.d.ts +1 -0
- package/api/dist/src/datasource/connectors/mongo.connector.test.js +179 -0
- package/api/dist/src/datasource/connectors/mongo.connector.test.js.map +1 -0
- package/api/dist/src/datasource/connectors/postgres.connector.d.ts +50 -0
- package/api/dist/src/datasource/connectors/postgres.connector.js +213 -0
- package/api/dist/src/datasource/connectors/postgres.connector.js.map +1 -0
- package/api/dist/src/datasource/connectors/postgres.connector.test.d.ts +1 -0
- package/api/dist/src/datasource/connectors/postgres.connector.test.js +197 -0
- package/api/dist/src/datasource/connectors/postgres.connector.test.js.map +1 -0
- package/api/dist/src/datasource/datasource.controller.d.ts +16 -0
- package/api/dist/src/datasource/datasource.controller.js +79 -0
- package/api/dist/src/datasource/datasource.controller.js.map +1 -0
- package/api/dist/src/datasource/datasource.model.d.ts +26 -0
- package/api/dist/src/datasource/datasource.model.js +3 -0
- package/api/dist/src/datasource/datasource.model.js.map +1 -0
- package/api/dist/src/datasource/datasource.module.d.ts +2 -0
- package/api/dist/src/datasource/datasource.module.js +31 -0
- package/api/dist/src/datasource/datasource.module.js.map +1 -0
- package/api/dist/src/datasource/datasource.repository.d.ts +11 -0
- package/api/dist/src/datasource/datasource.repository.js +61 -0
- package/api/dist/src/datasource/datasource.repository.js.map +1 -0
- package/api/dist/src/datasource/datasource.service.d.ts +28 -0
- package/api/dist/src/datasource/datasource.service.js +95 -0
- package/api/dist/src/datasource/datasource.service.js.map +1 -0
- package/api/dist/src/example/example.controller.d.ts +10 -0
- package/api/dist/src/example/example.controller.js +43 -0
- package/api/dist/src/example/example.controller.js.map +1 -0
- package/api/dist/src/example/example.model.d.ts +6 -0
- package/api/dist/src/example/example.model.js +3 -0
- package/api/dist/src/example/example.model.js.map +1 -0
- package/api/dist/src/example/example.module.d.ts +2 -0
- package/api/dist/src/example/example.module.js +23 -0
- package/api/dist/src/example/example.module.js.map +1 -0
- package/api/dist/src/example/example.repository.d.ts +6 -0
- package/api/dist/src/example/example.repository.js +30 -0
- package/api/dist/src/example/example.repository.js.map +1 -0
- package/api/dist/src/example/example.service.d.ts +10 -0
- package/api/dist/src/example/example.service.js +31 -0
- package/api/dist/src/example/example.service.js.map +1 -0
- package/api/dist/src/integration/integration.controller.d.ts +15 -0
- package/api/dist/src/integration/integration.controller.js +69 -0
- package/api/dist/src/integration/integration.controller.js.map +1 -0
- package/api/dist/src/integration/integration.model.d.ts +17 -0
- package/api/dist/src/integration/integration.model.js +3 -0
- package/api/dist/src/integration/integration.model.js.map +1 -0
- package/api/dist/src/integration/integration.module.d.ts +2 -0
- package/api/dist/src/integration/integration.module.js +24 -0
- package/api/dist/src/integration/integration.module.js.map +1 -0
- package/api/dist/src/integration/integration.repository.d.ts +6 -0
- package/api/dist/src/integration/integration.repository.js +45 -0
- package/api/dist/src/integration/integration.repository.js.map +1 -0
- package/api/dist/src/integration/integration.service.d.ts +12 -0
- package/api/dist/src/integration/integration.service.js +78 -0
- package/api/dist/src/integration/integration.service.js.map +1 -0
- package/api/dist/src/main.d.ts +1 -0
- package/api/dist/src/main.js +19 -0
- package/api/dist/src/main.js.map +1 -0
- package/api/dist/src/mcp/grafana.mcp.d.ts +1 -0
- package/api/dist/src/mcp/grafana.mcp.js +95 -0
- package/api/dist/src/mcp/grafana.mcp.js.map +1 -0
- package/api/dist/src/mcp/graylog.mcp.d.ts +1 -0
- package/api/dist/src/mcp/graylog.mcp.js +241 -0
- package/api/dist/src/mcp/graylog.mcp.js.map +1 -0
- package/api/dist/src/mcp/mcp-server.d.ts +1 -0
- package/api/dist/src/mcp/mcp-server.js +336 -0
- package/api/dist/src/mcp/mcp-server.js.map +1 -0
- package/api/dist/src/paths.d.ts +8 -0
- package/api/dist/src/paths.js +50 -0
- package/api/dist/src/paths.js.map +1 -0
- package/api/dist/src/paths.test.d.ts +1 -0
- package/api/dist/src/paths.test.js +60 -0
- package/api/dist/src/paths.test.js.map +1 -0
- package/api/dist/src/project/project.controller.d.ts +44 -0
- package/api/dist/src/project/project.controller.js +79 -0
- package/api/dist/src/project/project.controller.js.map +1 -0
- package/api/dist/src/project/project.model.d.ts +19 -0
- package/api/dist/src/project/project.model.js +3 -0
- package/api/dist/src/project/project.model.js.map +1 -0
- package/api/dist/src/project/project.module.d.ts +2 -0
- package/api/dist/src/project/project.module.js +24 -0
- package/api/dist/src/project/project.module.js.map +1 -0
- package/api/dist/src/project/project.repository.d.ts +6 -0
- package/api/dist/src/project/project.repository.js +52 -0
- package/api/dist/src/project/project.repository.js.map +1 -0
- package/api/dist/src/project/project.service.d.ts +17 -0
- package/api/dist/src/project/project.service.js +163 -0
- package/api/dist/src/project/project.service.js.map +1 -0
- package/api/dist/tsconfig.tsbuildinfo +1 -0
- package/api/dist/vitest.config.d.ts +2 -0
- package/api/dist/vitest.config.js +10 -0
- package/api/dist/vitest.config.js.map +1 -0
- package/api/public/dist/Analitoly.png +0 -0
- package/api/public/dist/AnalitolyShort.png +0 -0
- package/api/public/dist/Gitlab.png +0 -0
- package/api/public/dist/Grafana.png +0 -0
- package/api/public/dist/Graylog.png +0 -0
- package/api/public/dist/Mongodb.png +0 -0
- package/api/public/dist/PostgreSQL.png +0 -0
- package/api/public/dist/assets/index-BPB3ckw4.js +222 -0
- package/api/public/dist/assets/index-CSAGa0SG.js +227 -0
- package/api/public/dist/index.html +12 -0
- package/bin/analitoly-mcp.js +18 -0
- package/bin/analitoly.js +38 -0
- package/package.json +54 -0
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ContextService = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const fs = require("fs");
|
|
15
|
+
const path = require("path");
|
|
16
|
+
const crypto = require("crypto");
|
|
17
|
+
const paths_1 = require("../paths");
|
|
18
|
+
const connection_repository_1 = require("../connection/connection.repository");
|
|
19
|
+
const datasource_service_1 = require("../datasource/datasource.service");
|
|
20
|
+
const project_repository_1 = require("../project/project.repository");
|
|
21
|
+
let ContextService = class ContextService {
|
|
22
|
+
constructor(connectionRepo, dataSourceService, projectRepo) {
|
|
23
|
+
this.connectionRepo = connectionRepo;
|
|
24
|
+
this.dataSourceService = dataSourceService;
|
|
25
|
+
this.projectRepo = projectRepo;
|
|
26
|
+
}
|
|
27
|
+
readContext() {
|
|
28
|
+
const filePath = (0, paths_1.contextPath)();
|
|
29
|
+
if (!fs.existsSync(filePath))
|
|
30
|
+
return null;
|
|
31
|
+
const raw = fs.readFileSync(filePath, 'utf-8');
|
|
32
|
+
const frontmatterMatch = raw.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
|
|
33
|
+
if (!frontmatterMatch) {
|
|
34
|
+
return { content: raw, fingerprint: '', updatedAt: '' };
|
|
35
|
+
}
|
|
36
|
+
const meta = frontmatterMatch[1];
|
|
37
|
+
const content = frontmatterMatch[2];
|
|
38
|
+
let fingerprint = '';
|
|
39
|
+
let updatedAt = '';
|
|
40
|
+
for (const line of meta.split('\n')) {
|
|
41
|
+
const [key, ...rest] = line.split(': ');
|
|
42
|
+
const val = rest.join(': ').trim();
|
|
43
|
+
if (key === 'fingerprint')
|
|
44
|
+
fingerprint = val;
|
|
45
|
+
if (key === 'updatedAt')
|
|
46
|
+
updatedAt = val;
|
|
47
|
+
}
|
|
48
|
+
return { content, fingerprint, updatedAt };
|
|
49
|
+
}
|
|
50
|
+
writeContext(content, fingerprint) {
|
|
51
|
+
const fp = fingerprint ?? this.computeFingerprint();
|
|
52
|
+
const now = new Date().toISOString();
|
|
53
|
+
const file = `---\nfingerprint: ${fp}\nupdatedAt: ${now}\n---\n${content}`;
|
|
54
|
+
const dir = path.dirname((0, paths_1.contextPath)());
|
|
55
|
+
if (!fs.existsSync(dir))
|
|
56
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
57
|
+
fs.writeFileSync((0, paths_1.contextPath)(), file, 'utf-8');
|
|
58
|
+
}
|
|
59
|
+
deleteContext() {
|
|
60
|
+
const filePath = (0, paths_1.contextPath)();
|
|
61
|
+
if (fs.existsSync(filePath))
|
|
62
|
+
fs.unlinkSync(filePath);
|
|
63
|
+
}
|
|
64
|
+
computeFingerprint() {
|
|
65
|
+
const connections = this.connectionRepo.readAll(false);
|
|
66
|
+
const activeIds = connections
|
|
67
|
+
.filter((c) => c.active)
|
|
68
|
+
.map((c) => c.id)
|
|
69
|
+
.sort()
|
|
70
|
+
.join(',');
|
|
71
|
+
return crypto.createHash('md5').update(activeIds).digest('hex').slice(0, 12);
|
|
72
|
+
}
|
|
73
|
+
checkStaleness() {
|
|
74
|
+
const ctx = this.readContext();
|
|
75
|
+
if (!ctx)
|
|
76
|
+
return { stale: false, newSources: [] };
|
|
77
|
+
const currentFp = this.computeFingerprint();
|
|
78
|
+
if (ctx.fingerprint === currentFp)
|
|
79
|
+
return { stale: false, newSources: [] };
|
|
80
|
+
const connections = this.connectionRepo.readAll(false).filter((c) => c.active);
|
|
81
|
+
const newSources = connections.map((c) => `${c.type}: ${c.name}`);
|
|
82
|
+
return { stale: true, newSources };
|
|
83
|
+
}
|
|
84
|
+
getStatus() {
|
|
85
|
+
const ctx = this.readContext();
|
|
86
|
+
if (!ctx)
|
|
87
|
+
return { initialized: false };
|
|
88
|
+
const { stale, newSources } = this.checkStaleness();
|
|
89
|
+
return {
|
|
90
|
+
initialized: true,
|
|
91
|
+
updatedAt: ctx.updatedAt,
|
|
92
|
+
fingerprint: ctx.fingerprint,
|
|
93
|
+
stale,
|
|
94
|
+
newSources: stale ? newSources : undefined,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
async collectRawData() {
|
|
98
|
+
const sections = [];
|
|
99
|
+
const connections = this.connectionRepo.readAll(false).filter((c) => c.active);
|
|
100
|
+
for (const type of ['postgresql', 'mongodb']) {
|
|
101
|
+
const dbConns = connections.filter((c) => c.type === type);
|
|
102
|
+
for (const conn of dbConns) {
|
|
103
|
+
try {
|
|
104
|
+
const schema = await this.dataSourceService.getSchema(type, conn.name);
|
|
105
|
+
sections.push(`## ${type === 'postgresql' ? 'PostgreSQL' : 'MongoDB'}: ${conn.name}\nБаза данных: ${conn.config.database}\n\nСхема:\n\`\`\`json\n${JSON.stringify(schema, null, 2)}\n\`\`\``);
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
sections.push(`## ${type === 'postgresql' ? 'PostgreSQL' : 'MongoDB'}: ${conn.name}\nОшибка получения схемы: ${err instanceof Error ? err.message : String(err)}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
const project = this.projectRepo.read();
|
|
113
|
+
if (project && project.status === 'ready') {
|
|
114
|
+
let projectSection = `## Проект: ${project.localPath}\nТип: ${project.config.type}`;
|
|
115
|
+
const claudeMdPath = path.join(project.localPath, 'CLAUDE.md');
|
|
116
|
+
try {
|
|
117
|
+
if (fs.existsSync(claudeMdPath)) {
|
|
118
|
+
const claudeMd = fs.readFileSync(claudeMdPath, 'utf-8');
|
|
119
|
+
projectSection += `\n\nCLAUDE.md:\n\`\`\`\n${claudeMd}\n\`\`\``;
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
projectSection += '\n\nCLAUDE.md: не найден';
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
projectSection += '\n\nCLAUDE.md: ошибка чтения';
|
|
127
|
+
}
|
|
128
|
+
sections.push(projectSection);
|
|
129
|
+
}
|
|
130
|
+
const graylogConn = connections.find((c) => c.type === 'graylog');
|
|
131
|
+
const grafanaConn = connections.find((c) => c.type === 'grafana');
|
|
132
|
+
if (graylogConn || grafanaConn) {
|
|
133
|
+
let integrations = '## Активные интеграции\n';
|
|
134
|
+
if (graylogConn) {
|
|
135
|
+
integrations += `- **Graylog**: подключён (${graylogConn.config.baseUrl}). Используй list_streams для получения списка стримов.\n`;
|
|
136
|
+
}
|
|
137
|
+
if (grafanaConn) {
|
|
138
|
+
integrations += `- **Grafana**: подключён (${grafanaConn.config.url}). Используй search_dashboards и list_datasources для деталей.\n`;
|
|
139
|
+
}
|
|
140
|
+
sections.push(integrations);
|
|
141
|
+
}
|
|
142
|
+
if (sections.length === 0) {
|
|
143
|
+
return 'Нет активных подключений.';
|
|
144
|
+
}
|
|
145
|
+
return sections.join('\n\n');
|
|
146
|
+
}
|
|
147
|
+
async buildInitializationPrompt() {
|
|
148
|
+
const rawData = await this.collectRawData();
|
|
149
|
+
const fingerprint = this.computeFingerprint();
|
|
150
|
+
return `Инициализация контекста. Проанализируй подключённые источники и создай подробный контекст.
|
|
151
|
+
|
|
152
|
+
Вот собранные данные:
|
|
153
|
+
|
|
154
|
+
${rawData}
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
Задачи:
|
|
159
|
+
1. Проанализируй схемы БД — опиши таблицы/коллекции, их назначение, связи между ними, типы данных ключевых полей
|
|
160
|
+
2. Если подключён проект — изучи код (используй Read, Glob, Grep), пойми бизнес-логику, опиши стек и ключевые сущности
|
|
161
|
+
3. Если есть Graylog — вызови list_streams, опиши какие логи доступны и что они содержат
|
|
162
|
+
4. Если есть Grafana — вызови search_dashboards и list_datasources, опиши что мониторится
|
|
163
|
+
5. Запиши всё через write_context одним markdown-документом
|
|
164
|
+
|
|
165
|
+
Fingerprint текущих подключений: ${fingerprint}
|
|
166
|
+
|
|
167
|
+
Формат контекста — markdown с секциями по каждому источнику. Пиши на русском. Будь конкретен — укажи имена таблиц, полей, типы данных, связи. Опиши бизнес-контекст если удалось его понять из кода/данных.`;
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
exports.ContextService = ContextService;
|
|
171
|
+
exports.ContextService = ContextService = __decorate([
|
|
172
|
+
(0, common_1.Injectable)(),
|
|
173
|
+
__metadata("design:paramtypes", [connection_repository_1.ConnectionRepository,
|
|
174
|
+
datasource_service_1.DataSourceService,
|
|
175
|
+
project_repository_1.ProjectRepository])
|
|
176
|
+
], ContextService);
|
|
177
|
+
//# sourceMappingURL=context.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.service.js","sourceRoot":"","sources":["../../../src/context/context.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Response } from 'express';
|
|
2
|
+
import { DashboardService } from './dashboard.service';
|
|
3
|
+
export declare class DashboardController {
|
|
4
|
+
private readonly service;
|
|
5
|
+
constructor(service: DashboardService);
|
|
6
|
+
list(): import("./dashboard.model").Dashboard[];
|
|
7
|
+
get(id: string): import("./dashboard.model").Dashboard;
|
|
8
|
+
create(body: {
|
|
9
|
+
name: string;
|
|
10
|
+
charts?: any[];
|
|
11
|
+
}): import("./dashboard.model").Dashboard;
|
|
12
|
+
update(id: string, body: {
|
|
13
|
+
name?: string;
|
|
14
|
+
charts?: any[];
|
|
15
|
+
}): import("./dashboard.model").Dashboard;
|
|
16
|
+
delete(id: string): {
|
|
17
|
+
ok: boolean;
|
|
18
|
+
};
|
|
19
|
+
import(body: any): import("./dashboard.model").Dashboard;
|
|
20
|
+
export(id: string, res: Response): void;
|
|
21
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var _a;
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.DashboardController = void 0;
|
|
17
|
+
const common_1 = require("@nestjs/common");
|
|
18
|
+
const express_1 = require("express");
|
|
19
|
+
const dashboard_service_1 = require("./dashboard.service");
|
|
20
|
+
let DashboardController = class DashboardController {
|
|
21
|
+
constructor(service) {
|
|
22
|
+
this.service = service;
|
|
23
|
+
}
|
|
24
|
+
list() {
|
|
25
|
+
return this.service.list();
|
|
26
|
+
}
|
|
27
|
+
get(id) {
|
|
28
|
+
return this.service.get(id);
|
|
29
|
+
}
|
|
30
|
+
create(body) {
|
|
31
|
+
return this.service.create(body.name, body.charts ?? []);
|
|
32
|
+
}
|
|
33
|
+
update(id, body) {
|
|
34
|
+
if (id === 'main') {
|
|
35
|
+
return this.service.upsert(id, body.name ?? 'Дашборд', body.charts ?? []);
|
|
36
|
+
}
|
|
37
|
+
return this.service.update(id, body);
|
|
38
|
+
}
|
|
39
|
+
delete(id) {
|
|
40
|
+
this.service.delete(id);
|
|
41
|
+
return { ok: true };
|
|
42
|
+
}
|
|
43
|
+
import(body) {
|
|
44
|
+
return this.service.import(body);
|
|
45
|
+
}
|
|
46
|
+
export(id, res) {
|
|
47
|
+
const dashboard = this.service.get(id);
|
|
48
|
+
res.setHeader('Content-Disposition', `attachment; filename="${dashboard.name.replace(/[^a-zA-Z0-9а-яА-ЯёЁ_-]/g, '_')}.json"`);
|
|
49
|
+
res.json(dashboard);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
exports.DashboardController = DashboardController;
|
|
53
|
+
__decorate([
|
|
54
|
+
(0, common_1.Get)(),
|
|
55
|
+
__metadata("design:type", Function),
|
|
56
|
+
__metadata("design:paramtypes", []),
|
|
57
|
+
__metadata("design:returntype", void 0)
|
|
58
|
+
], DashboardController.prototype, "list", null);
|
|
59
|
+
__decorate([
|
|
60
|
+
(0, common_1.Get)(':id'),
|
|
61
|
+
__param(0, (0, common_1.Param)('id')),
|
|
62
|
+
__metadata("design:type", Function),
|
|
63
|
+
__metadata("design:paramtypes", [String]),
|
|
64
|
+
__metadata("design:returntype", void 0)
|
|
65
|
+
], DashboardController.prototype, "get", null);
|
|
66
|
+
__decorate([
|
|
67
|
+
(0, common_1.Post)(),
|
|
68
|
+
__param(0, (0, common_1.Body)()),
|
|
69
|
+
__metadata("design:type", Function),
|
|
70
|
+
__metadata("design:paramtypes", [Object]),
|
|
71
|
+
__metadata("design:returntype", void 0)
|
|
72
|
+
], DashboardController.prototype, "create", null);
|
|
73
|
+
__decorate([
|
|
74
|
+
(0, common_1.Put)(':id'),
|
|
75
|
+
__param(0, (0, common_1.Param)('id')),
|
|
76
|
+
__param(1, (0, common_1.Body)()),
|
|
77
|
+
__metadata("design:type", Function),
|
|
78
|
+
__metadata("design:paramtypes", [String, Object]),
|
|
79
|
+
__metadata("design:returntype", void 0)
|
|
80
|
+
], DashboardController.prototype, "update", null);
|
|
81
|
+
__decorate([
|
|
82
|
+
(0, common_1.Delete)(':id'),
|
|
83
|
+
__param(0, (0, common_1.Param)('id')),
|
|
84
|
+
__metadata("design:type", Function),
|
|
85
|
+
__metadata("design:paramtypes", [String]),
|
|
86
|
+
__metadata("design:returntype", void 0)
|
|
87
|
+
], DashboardController.prototype, "delete", null);
|
|
88
|
+
__decorate([
|
|
89
|
+
(0, common_1.Post)('import'),
|
|
90
|
+
__param(0, (0, common_1.Body)()),
|
|
91
|
+
__metadata("design:type", Function),
|
|
92
|
+
__metadata("design:paramtypes", [Object]),
|
|
93
|
+
__metadata("design:returntype", void 0)
|
|
94
|
+
], DashboardController.prototype, "import", null);
|
|
95
|
+
__decorate([
|
|
96
|
+
(0, common_1.Get)(':id/export'),
|
|
97
|
+
(0, common_1.Header)('Content-Type', 'application/json'),
|
|
98
|
+
(0, common_1.Header)('Content-Disposition', 'attachment'),
|
|
99
|
+
__param(0, (0, common_1.Param)('id')),
|
|
100
|
+
__param(1, (0, common_1.Res)()),
|
|
101
|
+
__metadata("design:type", Function),
|
|
102
|
+
__metadata("design:paramtypes", [String, typeof (_a = typeof express_1.Response !== "undefined" && express_1.Response) === "function" ? _a : Object]),
|
|
103
|
+
__metadata("design:returntype", void 0)
|
|
104
|
+
], DashboardController.prototype, "export", null);
|
|
105
|
+
exports.DashboardController = DashboardController = __decorate([
|
|
106
|
+
(0, common_1.Controller)('dashboard'),
|
|
107
|
+
__metadata("design:paramtypes", [dashboard_service_1.DashboardService])
|
|
108
|
+
], DashboardController);
|
|
109
|
+
//# sourceMappingURL=dashboard.controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.controller.js","sourceRoot":"","sources":["../../../src/dashboard/dashboard.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAUwB;AACxB,qCAAmC;AACnC,2DAAuD;AAGhD,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAC9B,YAA6B,OAAyB;QAAzB,YAAO,GAAP,OAAO,CAAkB;IAAG,CAAC;IAG1D,IAAI;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC;IAGD,GAAG,CAAc,EAAU;QACzB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAGD,MAAM,CAAS,IAAsC;QACnD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IAGD,MAAM,CAAc,EAAU,EAAU,IAAuC;QAE7E,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,SAAS,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IAGD,MAAM,CAAc,EAAU;QAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC;IAGD,MAAM,CAAS,IAAS;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAKD,MAAM,CAAc,EAAU,EAAS,GAAa;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvC,GAAG,CAAC,SAAS,CACX,qBAAqB,EACrB,yBAAyB,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE,GAAG,CAAC,QAAQ,CACxF,CAAC;QACF,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtB,CAAC;CACF,CAAA;AAjDY,kDAAmB;AAI9B;IADC,IAAA,YAAG,GAAE;;;;+CAGL;AAGD;IADC,IAAA,YAAG,EAAC,KAAK,CAAC;IACN,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;;;;8CAEf;AAGD;IADC,IAAA,aAAI,GAAE;IACC,WAAA,IAAA,aAAI,GAAE,CAAA;;;;iDAEb;AAGD;IADC,IAAA,YAAG,EAAC,KAAK,CAAC;IACH,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;IAAc,WAAA,IAAA,aAAI,GAAE,CAAA;;;;iDAMtC;AAGD;IADC,IAAA,eAAM,EAAC,KAAK,CAAC;IACN,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;;;;iDAGlB;AAGD;IADC,IAAA,aAAI,EAAC,QAAQ,CAAC;IACP,WAAA,IAAA,aAAI,GAAE,CAAA;;;;iDAEb;AAKD;IAHC,IAAA,YAAG,EAAC,YAAY,CAAC;IACjB,IAAA,eAAM,EAAC,cAAc,EAAE,kBAAkB,CAAC;IAC1C,IAAA,eAAM,EAAC,qBAAqB,EAAE,YAAY,CAAC;IACpC,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;IAAc,WAAA,IAAA,YAAG,GAAE,CAAA;;iEAAM,kBAAQ,oBAAR,kBAAQ;;iDAOnD;8BAhDU,mBAAmB;IAD/B,IAAA,mBAAU,EAAC,WAAW,CAAC;qCAEgB,oCAAgB;GAD3C,mBAAmB,CAiD/B"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface DashboardChart {
|
|
2
|
+
chartId: string;
|
|
3
|
+
title: string;
|
|
4
|
+
echartsOption: Record<string, unknown>;
|
|
5
|
+
description: string;
|
|
6
|
+
sourceQuery: string;
|
|
7
|
+
position: number;
|
|
8
|
+
}
|
|
9
|
+
export interface Dashboard {
|
|
10
|
+
id: string;
|
|
11
|
+
name: string;
|
|
12
|
+
createdAt: string;
|
|
13
|
+
updatedAt: string;
|
|
14
|
+
charts: DashboardChart[];
|
|
15
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.model.js","sourceRoot":"","sources":["../../../src/dashboard/dashboard.model.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.DashboardModule = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const dashboard_controller_1 = require("./dashboard.controller");
|
|
12
|
+
const dashboard_service_1 = require("./dashboard.service");
|
|
13
|
+
const dashboard_repository_1 = require("./dashboard.repository");
|
|
14
|
+
let DashboardModule = class DashboardModule {
|
|
15
|
+
};
|
|
16
|
+
exports.DashboardModule = DashboardModule;
|
|
17
|
+
exports.DashboardModule = DashboardModule = __decorate([
|
|
18
|
+
(0, common_1.Module)({
|
|
19
|
+
controllers: [dashboard_controller_1.DashboardController],
|
|
20
|
+
providers: [dashboard_service_1.DashboardService, dashboard_repository_1.DashboardRepository],
|
|
21
|
+
exports: [dashboard_service_1.DashboardService],
|
|
22
|
+
})
|
|
23
|
+
], DashboardModule);
|
|
24
|
+
//# sourceMappingURL=dashboard.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.module.js","sourceRoot":"","sources":["../../../src/dashboard/dashboard.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,iEAA6D;AAC7D,2DAAuD;AACvD,iEAA6D;AAOtD,IAAM,eAAe,GAArB,MAAM,eAAe;CAAG,CAAA;AAAlB,0CAAe;0BAAf,eAAe;IAL3B,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,CAAC,0CAAmB,CAAC;QAClC,SAAS,EAAE,CAAC,oCAAgB,EAAE,0CAAmB,CAAC;QAClD,OAAO,EAAE,CAAC,oCAAgB,CAAC;KAC5B,CAAC;GACW,eAAe,CAAG"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Dashboard } from './dashboard.model';
|
|
2
|
+
export declare class DashboardRepository {
|
|
3
|
+
constructor();
|
|
4
|
+
private filePath;
|
|
5
|
+
findAll(): Dashboard[];
|
|
6
|
+
findById(id: string): Dashboard | null;
|
|
7
|
+
save(dashboard: Dashboard): void;
|
|
8
|
+
delete(id: string): boolean;
|
|
9
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.DashboardRepository = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const fs = require("fs");
|
|
15
|
+
const path = require("path");
|
|
16
|
+
const paths_1 = require("../paths");
|
|
17
|
+
const DASHBOARDS_DIR = (0, paths_1.dashboardsDir)();
|
|
18
|
+
let DashboardRepository = class DashboardRepository {
|
|
19
|
+
constructor() {
|
|
20
|
+
if (!fs.existsSync(DASHBOARDS_DIR)) {
|
|
21
|
+
fs.mkdirSync(DASHBOARDS_DIR, { recursive: true });
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
filePath(id) {
|
|
25
|
+
const safe = id.replace(/[^a-zA-Z0-9_-]/g, '');
|
|
26
|
+
return path.join(DASHBOARDS_DIR, `${safe}.json`);
|
|
27
|
+
}
|
|
28
|
+
findAll() {
|
|
29
|
+
if (!fs.existsSync(DASHBOARDS_DIR))
|
|
30
|
+
return [];
|
|
31
|
+
return fs
|
|
32
|
+
.readdirSync(DASHBOARDS_DIR)
|
|
33
|
+
.filter((f) => f.endsWith('.json'))
|
|
34
|
+
.map((f) => {
|
|
35
|
+
try {
|
|
36
|
+
return JSON.parse(fs.readFileSync(path.join(DASHBOARDS_DIR, f), 'utf-8'));
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
})
|
|
42
|
+
.filter((d) => d !== null)
|
|
43
|
+
.sort((a, b) => b.updatedAt.localeCompare(a.updatedAt));
|
|
44
|
+
}
|
|
45
|
+
findById(id) {
|
|
46
|
+
const fp = this.filePath(id);
|
|
47
|
+
if (!fs.existsSync(fp))
|
|
48
|
+
return null;
|
|
49
|
+
try {
|
|
50
|
+
return JSON.parse(fs.readFileSync(fp, 'utf-8'));
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
save(dashboard) {
|
|
57
|
+
fs.writeFileSync(this.filePath(dashboard.id), JSON.stringify(dashboard, null, 2), 'utf-8');
|
|
58
|
+
}
|
|
59
|
+
delete(id) {
|
|
60
|
+
const fp = this.filePath(id);
|
|
61
|
+
if (!fs.existsSync(fp))
|
|
62
|
+
return false;
|
|
63
|
+
fs.unlinkSync(fp);
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
exports.DashboardRepository = DashboardRepository;
|
|
68
|
+
exports.DashboardRepository = DashboardRepository = __decorate([
|
|
69
|
+
(0, common_1.Injectable)(),
|
|
70
|
+
__metadata("design:paramtypes", [])
|
|
71
|
+
], DashboardRepository);
|
|
72
|
+
//# sourceMappingURL=dashboard.repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.repository.js","sourceRoot":"","sources":["../../../src/dashboard/dashboard.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,yBAAyB;AACzB,6BAA6B;AAG7B,oCAAyC;AACzC,MAAM,cAAc,GAAG,IAAA,qBAAa,GAAE,CAAC;AAGhC,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAC9B;QACE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YACnC,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAEO,QAAQ,CAAC,EAAU;QAEzB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;IACnD,CAAC;IAED,OAAO;QACL,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC;YAAE,OAAO,EAAE,CAAC;QAC9C,OAAO,EAAE;aACN,WAAW,CAAC,cAAc,CAAC;aAC3B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;aAClC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACT,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAc,CAAC;YACzF,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,CAAC,EAAkB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;aACzC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,QAAQ,CAAC,EAAU;QACjB,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;YAAE,OAAO,IAAI,CAAC;QACpC,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,CAAc,CAAC;QAC/D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,IAAI,CAAC,SAAoB;QACvB,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7F,CAAC;IAED,MAAM,CAAC,EAAU;QACf,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC;QACrC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAjDY,kDAAmB;8BAAnB,mBAAmB;IAD/B,IAAA,mBAAU,GAAE;;GACA,mBAAmB,CAiD/B"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { DashboardRepository } from './dashboard.repository';
|
|
2
|
+
import { Dashboard, DashboardChart } from './dashboard.model';
|
|
3
|
+
export declare class DashboardService {
|
|
4
|
+
private readonly repository;
|
|
5
|
+
constructor(repository: DashboardRepository);
|
|
6
|
+
list(): Dashboard[];
|
|
7
|
+
get(id: string): Dashboard;
|
|
8
|
+
create(name: string, charts?: DashboardChart[]): Dashboard;
|
|
9
|
+
getOrNull(id: string): Dashboard | null;
|
|
10
|
+
update(id: string, data: Partial<Pick<Dashboard, 'name' | 'charts'>>): Dashboard;
|
|
11
|
+
upsert(id: string, name: string, charts: DashboardChart[]): Dashboard;
|
|
12
|
+
delete(id: string): void;
|
|
13
|
+
import(json: Dashboard): Dashboard;
|
|
14
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.DashboardService = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const dashboard_repository_1 = require("./dashboard.repository");
|
|
15
|
+
let DashboardService = class DashboardService {
|
|
16
|
+
constructor(repository) {
|
|
17
|
+
this.repository = repository;
|
|
18
|
+
}
|
|
19
|
+
list() {
|
|
20
|
+
return this.repository.findAll();
|
|
21
|
+
}
|
|
22
|
+
get(id) {
|
|
23
|
+
const dash = this.repository.findById(id);
|
|
24
|
+
if (!dash)
|
|
25
|
+
throw new common_1.NotFoundException('Dashboard not found');
|
|
26
|
+
return dash;
|
|
27
|
+
}
|
|
28
|
+
create(name, charts = []) {
|
|
29
|
+
const dashboard = {
|
|
30
|
+
id: `dash_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`,
|
|
31
|
+
name,
|
|
32
|
+
createdAt: new Date().toISOString(),
|
|
33
|
+
updatedAt: new Date().toISOString(),
|
|
34
|
+
charts: charts.map((c, i) => ({ ...c, position: c.position ?? i })),
|
|
35
|
+
};
|
|
36
|
+
this.repository.save(dashboard);
|
|
37
|
+
return dashboard;
|
|
38
|
+
}
|
|
39
|
+
getOrNull(id) {
|
|
40
|
+
return this.repository.findById(id);
|
|
41
|
+
}
|
|
42
|
+
update(id, data) {
|
|
43
|
+
const dashboard = this.get(id);
|
|
44
|
+
if (data.name !== undefined)
|
|
45
|
+
dashboard.name = data.name;
|
|
46
|
+
if (data.charts !== undefined) {
|
|
47
|
+
dashboard.charts = data.charts.map((c, i) => ({ ...c, position: c.position ?? i }));
|
|
48
|
+
}
|
|
49
|
+
dashboard.updatedAt = new Date().toISOString();
|
|
50
|
+
this.repository.save(dashboard);
|
|
51
|
+
return dashboard;
|
|
52
|
+
}
|
|
53
|
+
upsert(id, name, charts) {
|
|
54
|
+
const existing = this.repository.findById(id);
|
|
55
|
+
const now = new Date().toISOString();
|
|
56
|
+
const dashboard = {
|
|
57
|
+
id,
|
|
58
|
+
name,
|
|
59
|
+
createdAt: existing?.createdAt ?? now,
|
|
60
|
+
updatedAt: now,
|
|
61
|
+
charts: charts.map((c, i) => ({ ...c, position: c.position ?? i })),
|
|
62
|
+
};
|
|
63
|
+
this.repository.save(dashboard);
|
|
64
|
+
return dashboard;
|
|
65
|
+
}
|
|
66
|
+
delete(id) {
|
|
67
|
+
if (!this.repository.delete(id)) {
|
|
68
|
+
throw new common_1.NotFoundException('Dashboard not found');
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
import(json) {
|
|
72
|
+
const dashboard = {
|
|
73
|
+
...json,
|
|
74
|
+
id: `dash_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`,
|
|
75
|
+
createdAt: json.createdAt || new Date().toISOString(),
|
|
76
|
+
updatedAt: new Date().toISOString(),
|
|
77
|
+
};
|
|
78
|
+
this.repository.save(dashboard);
|
|
79
|
+
return dashboard;
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
exports.DashboardService = DashboardService;
|
|
83
|
+
exports.DashboardService = DashboardService = __decorate([
|
|
84
|
+
(0, common_1.Injectable)(),
|
|
85
|
+
__metadata("design:paramtypes", [dashboard_repository_1.DashboardRepository])
|
|
86
|
+
], DashboardService);
|
|
87
|
+
//# sourceMappingURL=dashboard.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.service.js","sourceRoot":"","sources":["../../../src/dashboard/dashboard.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { DataSourceConfig, DatabaseSchema } from '../datasource.model';
|
|
2
|
+
export interface IDatabaseConnector {
|
|
3
|
+
testConnection(config: DataSourceConfig): Promise<boolean>;
|
|
4
|
+
getSchema(config: DataSourceConfig): Promise<DatabaseSchema>;
|
|
5
|
+
executeQuery(config: DataSourceConfig, query: string): Promise<unknown[]>;
|
|
6
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connector.interface.js","sourceRoot":"","sources":["../../../../src/datasource/connectors/connector.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { IDatabaseConnector } from './connector.interface';
|
|
2
|
+
import { DataSourceConfig, DatabaseSchema } from '../datasource.model';
|
|
3
|
+
export interface MongoExplainResult {
|
|
4
|
+
queryPlanner: object;
|
|
5
|
+
executionStats?: object;
|
|
6
|
+
}
|
|
7
|
+
export interface MongoCountResult {
|
|
8
|
+
collection: string;
|
|
9
|
+
count: number;
|
|
10
|
+
}
|
|
11
|
+
export interface MongoStatsResult {
|
|
12
|
+
level: 'database' | 'collection';
|
|
13
|
+
stats: object;
|
|
14
|
+
}
|
|
15
|
+
export type MongoIndexResult = {
|
|
16
|
+
name: string;
|
|
17
|
+
key: Record<string, number | string>;
|
|
18
|
+
unique?: boolean;
|
|
19
|
+
sparse?: boolean;
|
|
20
|
+
};
|
|
21
|
+
export declare class MongoConnector implements IDatabaseConnector {
|
|
22
|
+
testConnection(config: DataSourceConfig): Promise<boolean>;
|
|
23
|
+
getSchema(config: DataSourceConfig): Promise<DatabaseSchema>;
|
|
24
|
+
executeQuery(config: DataSourceConfig, query: string): Promise<unknown[]>;
|
|
25
|
+
explainQuery(config: DataSourceConfig, collection: string, filter?: object, verbosity?: 'queryPlanner' | 'executionStats'): Promise<MongoExplainResult>;
|
|
26
|
+
countDocuments(config: DataSourceConfig, collection: string, filter?: object): Promise<MongoCountResult>;
|
|
27
|
+
getStats(config: DataSourceConfig, collection?: string): Promise<MongoStatsResult>;
|
|
28
|
+
listIndexes(config: DataSourceConfig, collection: string): Promise<MongoIndexResult[]>;
|
|
29
|
+
private createClient;
|
|
30
|
+
}
|