@oneuptime/common 7.0.3882 → 7.0.3899
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/Models/AnalyticsModels/TelemetryAttribute.ts +8 -8
- package/Server/API/TelemetryAPI.ts +2 -4
- package/Server/API/WorkspaceNotificationRuleAPI.ts +48 -0
- package/Server/Services/IncidentService.ts +3 -1
- package/Server/Services/OpenTelemetryIngestService.ts +5 -10
- package/Server/Services/TelemetryAttributeService.ts +13 -27
- package/Server/Services/WorkspaceNotificationRuleService.ts +209 -1
- package/Server/Utils/Telemetry/CaptureSpan.ts +7 -1
- package/Server/Utils/Telemetry/Telemetry.ts +125 -83
- package/Server/Utils/Workspace/Slack/Slack.ts +65 -10
- package/Server/Utils/Workspace/WorkspaceBase.ts +9 -0
- package/build/dist/Models/AnalyticsModels/TelemetryAttribute.js +8 -8
- package/build/dist/Models/AnalyticsModels/TelemetryAttribute.js.map +1 -1
- package/build/dist/Server/API/TelemetryAPI.js +2 -3
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/API/WorkspaceNotificationRuleAPI.js +29 -0
- package/build/dist/Server/API/WorkspaceNotificationRuleAPI.js.map +1 -0
- package/build/dist/Server/Services/IncidentService.js +3 -1
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/OpenTelemetryIngestService.js +5 -7
- package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryAttributeService.js +13 -24
- package/build/dist/Server/Services/TelemetryAttributeService.js.map +1 -1
- package/build/dist/Server/Services/WorkspaceNotificationRuleService.js +166 -1
- package/build/dist/Server/Services/WorkspaceNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/CaptureSpan.js +1 -1
- package/build/dist/Server/Utils/Telemetry/CaptureSpan.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/Telemetry.js +84 -56
- package/build/dist/Server/Utils/Telemetry/Telemetry.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js +57 -24
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/WorkspaceBase.js +9 -0
- package/build/dist/Server/Utils/Workspace/WorkspaceBase.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,21 +1,26 @@
|
|
|
1
|
+
import { Dictionary } from "lodash";
|
|
1
2
|
import { JSONArray, JSONObject, JSONValue } from "../../../Types/JSON";
|
|
2
|
-
import JSONFunctions from "../../../Types/JSONFunctions";
|
|
3
3
|
import ObjectID from "../../../Types/ObjectID";
|
|
4
4
|
import TelemetryType from "../../../Types/Telemetry/TelemetryType";
|
|
5
|
-
import ArrayUtil from "../../../Utils/Array";
|
|
6
5
|
import GlobalCache from "../../Infrastructure/GlobalCache";
|
|
7
6
|
import TelemetryAttributeService from "../../Services/TelemetryAttributeService";
|
|
8
7
|
import CaptureSpan from "./CaptureSpan";
|
|
8
|
+
import logger from "../Logger";
|
|
9
|
+
|
|
10
|
+
export type AttributeType = string | number | boolean | null;
|
|
9
11
|
|
|
10
12
|
export default class TelemetryUtil {
|
|
11
13
|
@CaptureSpan()
|
|
12
14
|
public static async indexAttributes(data: {
|
|
13
|
-
attributes: string
|
|
15
|
+
attributes: Array<string>;
|
|
14
16
|
projectId: ObjectID;
|
|
15
17
|
telemetryType: TelemetryType;
|
|
16
18
|
}): Promise<void> {
|
|
17
19
|
// index attributes
|
|
18
20
|
|
|
21
|
+
logger.debug("Indexing attributes");
|
|
22
|
+
logger.debug("data: " + JSON.stringify(data, null, 2));
|
|
23
|
+
|
|
19
24
|
const cacheKey: string =
|
|
20
25
|
data.projectId.toString() + "_" + data.telemetryType;
|
|
21
26
|
|
|
@@ -28,7 +33,9 @@ export default class TelemetryUtil {
|
|
|
28
33
|
|
|
29
34
|
// check if keys are missing in cache
|
|
30
35
|
|
|
31
|
-
|
|
36
|
+
const attributeKeys: string[] = data.attributes;
|
|
37
|
+
|
|
38
|
+
for (const key of attributeKeys) {
|
|
32
39
|
if (!cacheKeys.includes(key)) {
|
|
33
40
|
isKeysMissingInCache = true;
|
|
34
41
|
break;
|
|
@@ -42,11 +49,9 @@ export default class TelemetryUtil {
|
|
|
42
49
|
telemetryType: data.telemetryType,
|
|
43
50
|
});
|
|
44
51
|
|
|
45
|
-
const mergedKeys: Array<string> =
|
|
46
|
-
...dbKeys,
|
|
47
|
-
|
|
48
|
-
...cacheKeys,
|
|
49
|
-
]);
|
|
52
|
+
const mergedKeys: Array<string> = Array.from(
|
|
53
|
+
new Set([...dbKeys, ...attributeKeys, ...cacheKeys]),
|
|
54
|
+
);
|
|
50
55
|
|
|
51
56
|
await GlobalCache.setStringArray(
|
|
52
57
|
"telemetryAttributesKeys",
|
|
@@ -62,96 +67,133 @@ export default class TelemetryUtil {
|
|
|
62
67
|
}
|
|
63
68
|
}
|
|
64
69
|
|
|
70
|
+
public static getAttributesForServiceIdAndServiceName(data: {
|
|
71
|
+
serviceId: ObjectID;
|
|
72
|
+
serviceName: string;
|
|
73
|
+
}): Dictionary<AttributeType> {
|
|
74
|
+
// get attributes for service id and service name
|
|
75
|
+
return {
|
|
76
|
+
"oneuptime.service.id": data.serviceId.toString(),
|
|
77
|
+
"oneuptime.service.name": data.serviceName,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
|
|
65
81
|
@CaptureSpan()
|
|
66
82
|
public static getAttributes(data: {
|
|
83
|
+
prefixKeysWithString: string;
|
|
67
84
|
items: JSONArray;
|
|
68
|
-
|
|
69
|
-
telemetryServiceName?: string;
|
|
70
|
-
}): JSONObject {
|
|
85
|
+
}): Dictionary<AttributeType | Array<AttributeType>> {
|
|
71
86
|
const { items } = data;
|
|
87
|
+
let { prefixKeysWithString } = data;
|
|
72
88
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
89
|
+
if (prefixKeysWithString) {
|
|
90
|
+
prefixKeysWithString = prefixKeysWithString + ".";
|
|
91
|
+
}
|
|
76
92
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
const getValue: GetValueFunction = (value: JSONValue): JSONValue => {
|
|
80
|
-
value = value as JSONObject;
|
|
81
|
-
|
|
82
|
-
if (value["stringValue"]) {
|
|
83
|
-
value = value["stringValue"] as string;
|
|
84
|
-
} else if (value["intValue"]) {
|
|
85
|
-
value = value["intValue"] as number;
|
|
86
|
-
} else if (value["doubleValue"]) {
|
|
87
|
-
value = value["doubleValue"] as number;
|
|
88
|
-
} else if (value["boolValue"]) {
|
|
89
|
-
value = value["boolValue"] as boolean;
|
|
90
|
-
} else if (
|
|
91
|
-
value["arrayValue"] &&
|
|
92
|
-
(value["arrayValue"] as JSONObject)["values"]
|
|
93
|
-
) {
|
|
94
|
-
value = (
|
|
95
|
-
(value["arrayValue"] as JSONObject)["values"] as JSONArray
|
|
96
|
-
).map((v: JSONObject) => {
|
|
97
|
-
return getValue(v);
|
|
98
|
-
});
|
|
99
|
-
} else if (
|
|
100
|
-
value["mapValue"] &&
|
|
101
|
-
(value["mapValue"] as JSONObject)["fields"]
|
|
102
|
-
) {
|
|
103
|
-
value = getValue((value["mapValue"] as JSONObject)["fields"]);
|
|
104
|
-
} else if (value["nullValue"]) {
|
|
105
|
-
value = null;
|
|
106
|
-
}
|
|
93
|
+
let finalObj: Dictionary<AttributeType | Array<AttributeType>> = {};
|
|
94
|
+
const attributes: JSONArray = items;
|
|
107
95
|
|
|
108
|
-
|
|
109
|
-
|
|
96
|
+
if (!attributes) {
|
|
97
|
+
return finalObj;
|
|
98
|
+
}
|
|
110
99
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
100
|
+
for (const attribute of attributes) {
|
|
101
|
+
if (attribute["key"] && typeof attribute["key"] === "string") {
|
|
102
|
+
const keyWithPrefix: string = `${prefixKeysWithString}${attribute["key"]}`;
|
|
103
|
+
|
|
104
|
+
const value:
|
|
105
|
+
| AttributeType
|
|
106
|
+
| Dictionary<AttributeType>
|
|
107
|
+
| Array<AttributeType> = this.getAttributeValues(
|
|
108
|
+
keyWithPrefix,
|
|
109
|
+
attribute["value"],
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
if (Array.isArray(value)) {
|
|
113
|
+
finalObj = { ...finalObj, [keyWithPrefix]: value };
|
|
114
|
+
} else if (typeof value === "object" && value !== null) {
|
|
115
|
+
finalObj = { ...finalObj, ...(value as Dictionary<AttributeType>) };
|
|
116
|
+
} else {
|
|
117
|
+
finalObj[keyWithPrefix] = value;
|
|
116
118
|
}
|
|
117
119
|
}
|
|
118
120
|
}
|
|
119
121
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
finalObj["oneuptime"] = {};
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
if (!(finalObj["oneuptime"] as JSONObject)["telemetry"]) {
|
|
126
|
-
(finalObj["oneuptime"] as JSONObject)["telemetry"] = {};
|
|
127
|
-
}
|
|
122
|
+
return finalObj;
|
|
123
|
+
}
|
|
128
124
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
125
|
+
public static getAttributeValues(
|
|
126
|
+
prefixKeysWithString: string,
|
|
127
|
+
value: JSONValue,
|
|
128
|
+
): AttributeType | Dictionary<AttributeType> | Array<AttributeType> {
|
|
129
|
+
let finalObj:
|
|
130
|
+
| Dictionary<AttributeType>
|
|
131
|
+
| AttributeType
|
|
132
|
+
| Array<AttributeType> = null;
|
|
133
|
+
value = value as JSONObject;
|
|
134
|
+
|
|
135
|
+
if (value["stringValue"]) {
|
|
136
|
+
finalObj = value["stringValue"] as string;
|
|
137
|
+
} else if (value["intValue"]) {
|
|
138
|
+
finalObj = value["intValue"] as number;
|
|
139
|
+
} else if (value["doubleValue"]) {
|
|
140
|
+
finalObj = value["doubleValue"] as number;
|
|
141
|
+
} else if (value["boolValue"]) {
|
|
142
|
+
finalObj = value["boolValue"] as boolean;
|
|
143
|
+
} else if (
|
|
144
|
+
value["arrayValue"] &&
|
|
145
|
+
(value["arrayValue"] as JSONObject)["values"]
|
|
133
146
|
) {
|
|
134
|
-
|
|
135
|
-
"
|
|
136
|
-
]
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
147
|
+
const values: JSONArray = (value["arrayValue"] as JSONObject)[
|
|
148
|
+
"values"
|
|
149
|
+
] as JSONArray;
|
|
150
|
+
finalObj = values.map((v: JSONObject) => {
|
|
151
|
+
return this.getAttributeValues(
|
|
152
|
+
prefixKeysWithString,
|
|
153
|
+
v,
|
|
154
|
+
) as AttributeType;
|
|
155
|
+
}) as Array<AttributeType>;
|
|
156
|
+
} else if (
|
|
157
|
+
value["mapValue"] &&
|
|
158
|
+
(value["mapValue"] as JSONObject)["fields"]
|
|
159
|
+
) {
|
|
160
|
+
const fields: JSONObject = (value["mapValue"] as JSONObject)?.[
|
|
161
|
+
"fields"
|
|
162
|
+
] as JSONObject;
|
|
163
|
+
|
|
164
|
+
const flattenedFields: Dictionary<AttributeType> = {};
|
|
165
|
+
for (const key in fields) {
|
|
166
|
+
const prefixKey: string = `${prefixKeysWithString}.${key}`;
|
|
167
|
+
const nestedValue: AttributeType | Dictionary<AttributeType> =
|
|
168
|
+
this.getAttributeValues(prefixKey, fields[key]) as AttributeType;
|
|
169
|
+
if (typeof nestedValue === "object" && nestedValue !== null) {
|
|
170
|
+
for (const nestedKey in nestedValue as Dictionary<AttributeType>) {
|
|
171
|
+
flattenedFields[`${prefixKey}.${nestedKey}`] = (
|
|
172
|
+
nestedValue as Dictionary<AttributeType>
|
|
173
|
+
)[nestedKey] as AttributeType;
|
|
174
|
+
}
|
|
175
|
+
} else {
|
|
176
|
+
flattenedFields[prefixKey] = nestedValue;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
finalObj = flattenedFields;
|
|
145
180
|
}
|
|
146
|
-
|
|
147
|
-
if (
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
181
|
+
// kvlistValue
|
|
182
|
+
else if (
|
|
183
|
+
value["kvlistValue"] &&
|
|
184
|
+
(value["kvlistValue"] as JSONObject)["values"]
|
|
185
|
+
) {
|
|
186
|
+
const values: JSONArray = (value["kvlistValue"] as JSONObject)[
|
|
187
|
+
"values"
|
|
188
|
+
] as JSONArray;
|
|
189
|
+
finalObj = this.getAttributes({
|
|
190
|
+
prefixKeysWithString,
|
|
191
|
+
items: values,
|
|
192
|
+
}) as Dictionary<AttributeType>;
|
|
193
|
+
} else if (value["nullValue"]) {
|
|
194
|
+
finalObj = null;
|
|
153
195
|
}
|
|
154
196
|
|
|
155
|
-
return
|
|
197
|
+
return finalObj;
|
|
156
198
|
}
|
|
157
199
|
}
|
|
@@ -30,6 +30,7 @@ import SlackifyMarkdown from "slackify-markdown";
|
|
|
30
30
|
import { DropdownOption } from "../../../../UI/Components/Dropdown/Dropdown";
|
|
31
31
|
import OneUptimeDate from "../../../../Types/Date";
|
|
32
32
|
import CaptureSpan from "../../Telemetry/CaptureSpan";
|
|
33
|
+
import BadDataException from "../../../../Types/Exception/BadDataException";
|
|
33
34
|
|
|
34
35
|
export default class SlackUtil extends WorkspaceBase {
|
|
35
36
|
@CaptureSpan()
|
|
@@ -123,7 +124,10 @@ export default class SlackUtil extends WorkspaceBase {
|
|
|
123
124
|
if ((result.jsonData as JSONObject)?.["ok"] !== true) {
|
|
124
125
|
logger.error("Invalid response from Slack API:");
|
|
125
126
|
logger.error(result.jsonData);
|
|
126
|
-
|
|
127
|
+
const messageFromSlack: string = (result.jsonData as JSONObject)?.[
|
|
128
|
+
"error"
|
|
129
|
+
] as string;
|
|
130
|
+
throw new BadRequestException("Error from Slack " + messageFromSlack);
|
|
127
131
|
}
|
|
128
132
|
|
|
129
133
|
logger.debug("Modal shown to user successfully.");
|
|
@@ -187,7 +191,10 @@ export default class SlackUtil extends WorkspaceBase {
|
|
|
187
191
|
if ((response.jsonData as JSONObject)?.["ok"] !== true) {
|
|
188
192
|
logger.error("Invalid response from Slack API:");
|
|
189
193
|
logger.error(response.jsonData);
|
|
190
|
-
|
|
194
|
+
const messageFromSlack: string = (response.jsonData as JSONObject)?.[
|
|
195
|
+
"error"
|
|
196
|
+
] as string;
|
|
197
|
+
throw new BadRequestException("Error from Slack " + messageFromSlack);
|
|
191
198
|
}
|
|
192
199
|
|
|
193
200
|
logger.debug("Channel joined successfully with data:");
|
|
@@ -240,7 +247,10 @@ export default class SlackUtil extends WorkspaceBase {
|
|
|
240
247
|
if ((response.jsonData as JSONObject)?.["ok"] !== true) {
|
|
241
248
|
logger.error("Invalid response from Slack API:");
|
|
242
249
|
logger.error(response.jsonData);
|
|
243
|
-
|
|
250
|
+
const messageFromSlack: string = (response.jsonData as JSONObject)?.[
|
|
251
|
+
"error"
|
|
252
|
+
] as string;
|
|
253
|
+
throw new BadRequestException("Error from Slack " + messageFromSlack);
|
|
244
254
|
}
|
|
245
255
|
|
|
246
256
|
logger.debug("User invited to channel successfully.");
|
|
@@ -344,7 +354,7 @@ export default class SlackUtil extends WorkspaceBase {
|
|
|
344
354
|
|
|
345
355
|
if (!channels[data.channelName]) {
|
|
346
356
|
logger.error("Channel not found.");
|
|
347
|
-
throw new
|
|
357
|
+
throw new BadDataException("Channel not found.");
|
|
348
358
|
}
|
|
349
359
|
|
|
350
360
|
logger.debug("Workspace channel ID obtained:");
|
|
@@ -386,7 +396,10 @@ export default class SlackUtil extends WorkspaceBase {
|
|
|
386
396
|
if ((response.jsonData as JSONObject)?.["ok"] !== true) {
|
|
387
397
|
logger.error("Invalid response from Slack API:");
|
|
388
398
|
logger.error(response.jsonData);
|
|
389
|
-
|
|
399
|
+
const messageFromSlack: string = (response.jsonData as JSONObject)?.[
|
|
400
|
+
"error"
|
|
401
|
+
] as string;
|
|
402
|
+
throw new BadRequestException("Error from Slack " + messageFromSlack);
|
|
390
403
|
}
|
|
391
404
|
|
|
392
405
|
if (
|
|
@@ -440,7 +453,10 @@ export default class SlackUtil extends WorkspaceBase {
|
|
|
440
453
|
if ((response.jsonData as JSONObject)?.["ok"] !== true) {
|
|
441
454
|
logger.error("Invalid response from Slack API:");
|
|
442
455
|
logger.error(response.jsonData);
|
|
443
|
-
|
|
456
|
+
const messageFromSlack: string = (response.jsonData as JSONObject)?.[
|
|
457
|
+
"error"
|
|
458
|
+
] as string;
|
|
459
|
+
throw new BadRequestException("Error from Slack " + messageFromSlack);
|
|
444
460
|
}
|
|
445
461
|
|
|
446
462
|
const channels: Dictionary<WorkspaceChannel> = {};
|
|
@@ -527,6 +543,33 @@ export default class SlackUtil extends WorkspaceBase {
|
|
|
527
543
|
return values;
|
|
528
544
|
}
|
|
529
545
|
|
|
546
|
+
@CaptureSpan()
|
|
547
|
+
public static override async doesChannelExist(data: {
|
|
548
|
+
authToken: string;
|
|
549
|
+
channelName: string;
|
|
550
|
+
}): Promise<boolean> {
|
|
551
|
+
// if channel name starts with #, remove it
|
|
552
|
+
if (data.channelName && data.channelName.startsWith("#")) {
|
|
553
|
+
data.channelName = data.channelName.substring(1);
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
// convert channel name to lowercase
|
|
557
|
+
data.channelName = data.channelName.toLowerCase();
|
|
558
|
+
|
|
559
|
+
// get channel id from channel name
|
|
560
|
+
const channels: Dictionary<WorkspaceChannel> =
|
|
561
|
+
await this.getAllWorkspaceChannels({
|
|
562
|
+
authToken: data.authToken,
|
|
563
|
+
});
|
|
564
|
+
|
|
565
|
+
// if this channel exists
|
|
566
|
+
if (channels[data.channelName]) {
|
|
567
|
+
return true;
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
return false;
|
|
571
|
+
}
|
|
572
|
+
|
|
530
573
|
@CaptureSpan()
|
|
531
574
|
public static override async sendMessage(data: {
|
|
532
575
|
workspaceMessagePayload: WorkspaceMessagePayload;
|
|
@@ -664,7 +707,10 @@ export default class SlackUtil extends WorkspaceBase {
|
|
|
664
707
|
if ((response.jsonData as JSONObject)?.["ok"] !== true) {
|
|
665
708
|
logger.error("Invalid response from Slack API:");
|
|
666
709
|
logger.error(response.jsonData);
|
|
667
|
-
|
|
710
|
+
const messageFromSlack: string = (response.jsonData as JSONObject)?.[
|
|
711
|
+
"error"
|
|
712
|
+
] as string;
|
|
713
|
+
throw new BadRequestException("Error from Slack " + messageFromSlack);
|
|
668
714
|
}
|
|
669
715
|
|
|
670
716
|
logger.debug("Payload blocks sent to channel successfully.");
|
|
@@ -736,7 +782,10 @@ export default class SlackUtil extends WorkspaceBase {
|
|
|
736
782
|
if ((response.jsonData as JSONObject)?.["ok"] !== true) {
|
|
737
783
|
logger.error("Invalid response from Slack API:");
|
|
738
784
|
logger.error(response.jsonData);
|
|
739
|
-
|
|
785
|
+
const messageFromSlack: string = (response.jsonData as JSONObject)?.[
|
|
786
|
+
"error"
|
|
787
|
+
] as string;
|
|
788
|
+
throw new BadRequestException("Error from Slack " + messageFromSlack);
|
|
740
789
|
}
|
|
741
790
|
|
|
742
791
|
if (
|
|
@@ -1111,7 +1160,10 @@ export default class SlackUtil extends WorkspaceBase {
|
|
|
1111
1160
|
if ((response.jsonData as JSONObject)?.["ok"] !== true) {
|
|
1112
1161
|
logger.error("Invalid response from Slack API:");
|
|
1113
1162
|
logger.error(response.jsonData);
|
|
1114
|
-
|
|
1163
|
+
const messageFromSlack: string = (response.jsonData as JSONObject)?.[
|
|
1164
|
+
"error"
|
|
1165
|
+
] as string;
|
|
1166
|
+
throw new BadRequestException("Error from Slack " + messageFromSlack);
|
|
1115
1167
|
}
|
|
1116
1168
|
|
|
1117
1169
|
// check if the user is in the channel
|
|
@@ -1175,7 +1227,10 @@ export default class SlackUtil extends WorkspaceBase {
|
|
|
1175
1227
|
if ((response.jsonData as JSONObject)?.["ok"] !== true) {
|
|
1176
1228
|
logger.error("Invalid response from Slack API:");
|
|
1177
1229
|
logger.error(response.jsonData);
|
|
1178
|
-
|
|
1230
|
+
const messageFromSlack: string = (response.jsonData as JSONObject)?.[
|
|
1231
|
+
"error"
|
|
1232
|
+
] as string;
|
|
1233
|
+
throw new BadRequestException("Error from Slack " + messageFromSlack);
|
|
1179
1234
|
}
|
|
1180
1235
|
|
|
1181
1236
|
// check if the user is in the channel
|
|
@@ -48,6 +48,15 @@ export default class WorkspaceBase {
|
|
|
48
48
|
}): Promise<boolean> {
|
|
49
49
|
throw new NotImplementedException();
|
|
50
50
|
}
|
|
51
|
+
|
|
52
|
+
@CaptureSpan()
|
|
53
|
+
public static async doesChannelExist(_data: {
|
|
54
|
+
authToken: string;
|
|
55
|
+
channelName: string;
|
|
56
|
+
}): Promise<boolean> {
|
|
57
|
+
throw new NotImplementedException();
|
|
58
|
+
}
|
|
59
|
+
|
|
51
60
|
@CaptureSpan()
|
|
52
61
|
public static async getUsernameFromUserId(_data: {
|
|
53
62
|
authToken: string;
|
|
@@ -101,11 +101,11 @@ export default class TelemetryAttribute extends AnalyticsBaseModel {
|
|
|
101
101
|
},
|
|
102
102
|
}),
|
|
103
103
|
new AnalyticsTableColumn({
|
|
104
|
-
key: "
|
|
105
|
-
title: "
|
|
106
|
-
description: "
|
|
104
|
+
key: "attributes",
|
|
105
|
+
title: "Attributes",
|
|
106
|
+
description: "Attributes",
|
|
107
107
|
required: true,
|
|
108
|
-
type: TableColumnType.
|
|
108
|
+
type: TableColumnType.JSONArray,
|
|
109
109
|
accessControl: {
|
|
110
110
|
read: [
|
|
111
111
|
Permission.ProjectOwner,
|
|
@@ -143,11 +143,11 @@ export default class TelemetryAttribute extends AnalyticsBaseModel {
|
|
|
143
143
|
set telemetryType(v) {
|
|
144
144
|
this.setColumnValue("telemetryType", v);
|
|
145
145
|
}
|
|
146
|
-
get
|
|
147
|
-
return this.getColumnValue("
|
|
146
|
+
get attributes() {
|
|
147
|
+
return this.getColumnValue("attributes");
|
|
148
148
|
}
|
|
149
|
-
set
|
|
150
|
-
this.setColumnValue("
|
|
149
|
+
set attributes(v) {
|
|
150
|
+
this.setColumnValue("attributes", v);
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
153
|
//# sourceMappingURL=TelemetryAttribute.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TelemetryAttribute.js","sourceRoot":"","sources":["../../../../Models/AnalyticsModels/TelemetryAttribute.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"TelemetryAttribute.js","sourceRoot":"","sources":["../../../../Models/AnalyticsModels/TelemetryAttribute.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,6 @@ import BadDataException from "Common/Types/Exception/BadDataException";
|
|
|
5
5
|
import CommonAPI from "./CommonAPI";
|
|
6
6
|
import TelemetryType from "Common/Types/Telemetry/TelemetryType";
|
|
7
7
|
import TelemetryAttributeService from "../Services/TelemetryAttributeService";
|
|
8
|
-
import ArrayUtil from "Common/Utils/Array";
|
|
9
8
|
const router = Express.getRouter();
|
|
10
9
|
router.post("/telemetry/metrics/get-attributes", UserMiddleware.getUserMiddleware, async (req, res, next) => {
|
|
11
10
|
return getAttributes(req, res, next, TelemetryType.Metric);
|
|
@@ -25,10 +24,10 @@ const getAttributes = async (req, res, next, telemetryType) => {
|
|
|
25
24
|
if (!databaseProps.tenantId) {
|
|
26
25
|
return Response.sendErrorResponse(req, res, new BadDataException("Invalid Project ID"));
|
|
27
26
|
}
|
|
28
|
-
const attributes =
|
|
27
|
+
const attributes = await TelemetryAttributeService.fetchAttributes({
|
|
29
28
|
projectId: databaseProps.tenantId,
|
|
30
29
|
telemetryType,
|
|
31
|
-
})
|
|
30
|
+
});
|
|
32
31
|
return Response.sendJsonObjectResponse(req, res, {
|
|
33
32
|
attributes: attributes,
|
|
34
33
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TelemetryAPI.js","sourceRoot":"","sources":["../../../../Server/API/TelemetryAPI.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,iCAAiC,CAAC;AAC7D,OAAO,OAKN,MAAM,kBAAkB,CAAC;AAC1B,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AACzC,OAAO,gBAAgB,MAAM,yCAAyC,CAAC;AACvE,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,OAAO,aAAa,MAAM,sCAAsC,CAAC;AACjE,OAAO,yBAAyB,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"TelemetryAPI.js","sourceRoot":"","sources":["../../../../Server/API/TelemetryAPI.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,iCAAiC,CAAC;AAC7D,OAAO,OAKN,MAAM,kBAAkB,CAAC;AAC1B,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AACzC,OAAO,gBAAgB,MAAM,yCAAyC,CAAC;AACvE,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,OAAO,aAAa,MAAM,sCAAsC,CAAC;AACjE,OAAO,yBAAyB,MAAM,uCAAuC,CAAC;AAE9E,MAAM,MAAM,GAAkB,OAAO,CAAC,SAAS,EAAE,CAAC;AAElD,MAAM,CAAC,IAAI,CACT,mCAAmC,EACnC,cAAc,CAAC,iBAAiB,EAChC,KAAK,EAAE,GAAmB,EAAE,GAAoB,EAAE,IAAkB,EAAE,EAAE;IACtE,OAAO,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;AAC7D,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,gCAAgC,EAChC,cAAc,CAAC,iBAAiB,EAChC,KAAK,EAAE,GAAmB,EAAE,GAAoB,EAAE,IAAkB,EAAE,EAAE;IACtE,OAAO,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,kCAAkC,EAClC,cAAc,CAAC,iBAAiB,EAChC,KAAK,EAAE,GAAmB,EAAE,GAAoB,EAAE,IAAkB,EAAE,EAAE;IACtE,OAAO,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC,CACF,CAAC;AASF,MAAM,aAAa,GAA0B,KAAK,EAChD,GAAmB,EACnB,GAAoB,EACpB,IAAkB,EAClB,aAA4B,EAC5B,EAAE;IACF,IAAI,CAAC;QACH,MAAM,aAAa,GACjB,MAAM,SAAS,CAAC,iCAAiC,CAAC,GAAG,CAAC,CAAC;QAEzD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,QAAQ,CAAC,iBAAiB,CAC/B,GAAG,EACH,GAAG,EACH,IAAI,gBAAgB,CAAC,uBAAuB,CAAC,CAC9C,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC5B,OAAO,QAAQ,CAAC,iBAAiB,CAC/B,GAAG,EACH,GAAG,EACH,IAAI,gBAAgB,CAAC,oBAAoB,CAAC,CAC3C,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GACd,MAAM,yBAAyB,CAAC,eAAe,CAAC;YAC9C,SAAS,EAAE,aAAa,CAAC,QAAQ;YACjC,aAAa;SACd,CAAC,CAAC;QAEL,OAAO,QAAQ,CAAC,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE;YAC/C,UAAU,EAAE,UAAU;SACvB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,CAAC;AACH,CAAC,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import UserMiddleware from "../Middleware/UserAuthorization";
|
|
2
|
+
import WorkspaceNotificationRuleService from "../Services/WorkspaceNotificationRuleService";
|
|
3
|
+
import Response from "../Utils/Response";
|
|
4
|
+
import BaseAPI from "./BaseAPI";
|
|
5
|
+
import CommonAPI from "./CommonAPI";
|
|
6
|
+
import WorkspaceNotificationRule from "Common/Models/DatabaseModels/WorkspaceNotificationRule";
|
|
7
|
+
import ObjectID from "../../Types/ObjectID";
|
|
8
|
+
export default class WorkspaceNotificationRuleAPI extends BaseAPI {
|
|
9
|
+
constructor() {
|
|
10
|
+
var _a;
|
|
11
|
+
super(WorkspaceNotificationRule, WorkspaceNotificationRuleService);
|
|
12
|
+
this.router.get(`${(_a = new this.entityType().getCrudApiPath()) === null || _a === void 0 ? void 0 : _a.toString()}/test/:workspaceNotifcationRuleId`, UserMiddleware.getUserMiddleware, async (req, res, next) => {
|
|
13
|
+
try {
|
|
14
|
+
const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
|
|
15
|
+
await this.service.testRule({
|
|
16
|
+
ruleId: new ObjectID(req.params["workspaceNotifcationRuleId"]),
|
|
17
|
+
props: databaseProps,
|
|
18
|
+
projectId: databaseProps.tenantId,
|
|
19
|
+
testByUserId: databaseProps.userId,
|
|
20
|
+
});
|
|
21
|
+
return Response.sendEmptySuccessResponse(req, res);
|
|
22
|
+
}
|
|
23
|
+
catch (e) {
|
|
24
|
+
next(e);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=WorkspaceNotificationRuleAPI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkspaceNotificationRuleAPI.js","sourceRoot":"","sources":["../../../../Server/API/WorkspaceNotificationRuleAPI.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,iCAAiC,CAAC;AAC7D,OAAO,gCAEN,MAAM,8CAA8C,CAAC;AAMtD,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AACzC,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,OAAO,yBAAyB,MAAM,wDAAwD,CAAC;AAC/F,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAE5C,MAAM,CAAC,OAAO,OAAO,4BAA6B,SAAQ,OAGzD;IACC;;QACE,KAAK,CAAC,yBAAyB,EAAE,gCAAgC,CAAC,CAAC;QAEnE,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,GAAG,MAAA,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,cAAc,EAAE,0CAAE,QAAQ,EAAE,mCAAmC,EACxF,cAAc,CAAC,iBAAiB,EAChC,KAAK,EAAE,GAAmB,EAAE,GAAoB,EAAE,IAAkB,EAAE,EAAE;YACtE,IAAI,CAAC;gBACH,MAAM,aAAa,GACjB,MAAM,SAAS,CAAC,iCAAiC,CAAC,GAAG,CAAC,CAAC;gBAEzD,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;oBAC1B,MAAM,EAAE,IAAI,QAAQ,CAClB,GAAG,CAAC,MAAM,CAAC,4BAA4B,CAAW,CACnD;oBACD,KAAK,EAAE,aAAa;oBACpB,SAAS,EAAE,aAAa,CAAC,QAAS;oBAClC,YAAY,EAAE,aAAa,CAAC,MAAO;iBACpC,CAAC,CAAC;gBAEH,OAAO,QAAQ,CAAC,wBAAwB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACrD,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,CAAC,CAAC,CAAC;YACV,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -228,7 +228,9 @@ export class Service extends DatabaseService {
|
|
|
228
228
|
if (!lastIncident) {
|
|
229
229
|
return 0;
|
|
230
230
|
}
|
|
231
|
-
return lastIncident.incidentNumber
|
|
231
|
+
return lastIncident.incidentNumber
|
|
232
|
+
? Number(lastIncident.incidentNumber)
|
|
233
|
+
: 0;
|
|
232
234
|
}
|
|
233
235
|
async onBeforeCreate(createBy) {
|
|
234
236
|
if (!createBy.props.tenantId && !createBy.props.isRoot) {
|