@oneuptime/common 7.0.3876 → 7.0.3887
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/Services/OpenTelemetryIngestService.ts +5 -10
- package/Server/Services/TelemetryAttributeService.ts +13 -27
- package/Server/Utils/Telemetry/CaptureSpan.ts +7 -1
- package/Server/Utils/Telemetry/Telemetry.ts +125 -83
- 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/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/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/package.json +2 -2
|
@@ -106,11 +106,11 @@ export default class TelemetryAttribute extends AnalyticsBaseModel {
|
|
|
106
106
|
}),
|
|
107
107
|
|
|
108
108
|
new AnalyticsTableColumn({
|
|
109
|
-
key: "
|
|
110
|
-
title: "
|
|
111
|
-
description: "
|
|
109
|
+
key: "attributes",
|
|
110
|
+
title: "Attributes",
|
|
111
|
+
description: "Attributes",
|
|
112
112
|
required: true,
|
|
113
|
-
type: TableColumnType.
|
|
113
|
+
type: TableColumnType.JSONArray,
|
|
114
114
|
accessControl: {
|
|
115
115
|
read: [
|
|
116
116
|
Permission.ProjectOwner,
|
|
@@ -153,11 +153,11 @@ export default class TelemetryAttribute extends AnalyticsBaseModel {
|
|
|
153
153
|
this.setColumnValue("telemetryType", v);
|
|
154
154
|
}
|
|
155
155
|
|
|
156
|
-
public get
|
|
157
|
-
return this.getColumnValue("
|
|
156
|
+
public get attributes(): Array<string> | undefined {
|
|
157
|
+
return this.getColumnValue("attributes") as Array<string> | undefined;
|
|
158
158
|
}
|
|
159
159
|
|
|
160
|
-
public set
|
|
161
|
-
this.setColumnValue("
|
|
160
|
+
public set attributes(v: Array<string> | undefined) {
|
|
161
|
+
this.setColumnValue("attributes", v);
|
|
162
162
|
}
|
|
163
163
|
}
|
|
@@ -11,7 +11,6 @@ import CommonAPI from "./CommonAPI";
|
|
|
11
11
|
import DatabaseCommonInteractionProps from "Common/Types/BaseDatabase/DatabaseCommonInteractionProps";
|
|
12
12
|
import TelemetryType from "Common/Types/Telemetry/TelemetryType";
|
|
13
13
|
import TelemetryAttributeService from "../Services/TelemetryAttributeService";
|
|
14
|
-
import ArrayUtil from "Common/Utils/Array";
|
|
15
14
|
|
|
16
15
|
const router: ExpressRouter = Express.getRouter();
|
|
17
16
|
|
|
@@ -72,12 +71,11 @@ const getAttributes: GetAttributesFunction = async (
|
|
|
72
71
|
);
|
|
73
72
|
}
|
|
74
73
|
|
|
75
|
-
const attributes: string[] =
|
|
74
|
+
const attributes: string[] =
|
|
76
75
|
await TelemetryAttributeService.fetchAttributes({
|
|
77
76
|
projectId: databaseProps.tenantId,
|
|
78
77
|
telemetryType,
|
|
79
|
-
})
|
|
80
|
-
);
|
|
78
|
+
});
|
|
81
79
|
|
|
82
80
|
return Response.sendJsonObjectResponse(req, res, {
|
|
83
81
|
attributes: attributes,
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import OneUptimeDate from "Common/Types/Date";
|
|
2
2
|
import { JSONArray, JSONObject } from "Common/Types/JSON";
|
|
3
|
-
import JSONFunctions from "Common/Types/JSONFunctions";
|
|
4
3
|
import ObjectID from "Common/Types/ObjectID";
|
|
5
4
|
import Metric, {
|
|
6
5
|
AggregationTemporality,
|
|
@@ -166,21 +165,17 @@ export default class OTelIngestService {
|
|
|
166
165
|
}
|
|
167
166
|
|
|
168
167
|
newDbMetric.attributes = {
|
|
169
|
-
...(
|
|
168
|
+
...TelemetryUtil.getAttributesForServiceIdAndServiceName({
|
|
169
|
+
serviceId: data.telemetryServiceId,
|
|
170
|
+
serviceName: data.telemetryServiceName,
|
|
171
|
+
}),
|
|
170
172
|
...TelemetryUtil.getAttributes({
|
|
171
173
|
items: datapoint["attributes"] as JSONArray,
|
|
172
|
-
|
|
173
|
-
telemetryServiceName: data.telemetryServiceName,
|
|
174
|
+
prefixKeysWithString: "metricAttributes",
|
|
174
175
|
}),
|
|
175
176
|
};
|
|
176
177
|
}
|
|
177
178
|
|
|
178
|
-
if (newDbMetric.attributes) {
|
|
179
|
-
newDbMetric.attributes = JSONFunctions.flattenObject(
|
|
180
|
-
newDbMetric.attributes,
|
|
181
|
-
);
|
|
182
|
-
}
|
|
183
|
-
|
|
184
179
|
// aggregationTemporality
|
|
185
180
|
|
|
186
181
|
if (aggregationTemporality) {
|
|
@@ -2,7 +2,6 @@ import TelemetryType from "../../Types/Telemetry/TelemetryType";
|
|
|
2
2
|
import ClickhouseDatabase from "../Infrastructure/ClickhouseDatabase";
|
|
3
3
|
import AnalyticsDatabaseService from "./AnalyticsDatabaseService";
|
|
4
4
|
import TelemetryAttribute from "Common/Models/AnalyticsModels/TelemetryAttribute";
|
|
5
|
-
import { LIMIT_PER_PROJECT } from "../../Types/Database/LimitMax";
|
|
6
5
|
import ObjectID from "../../Types/ObjectID";
|
|
7
6
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
8
7
|
|
|
@@ -16,30 +15,24 @@ export class TelemetryAttributeService extends AnalyticsDatabaseService<Telemetr
|
|
|
16
15
|
projectId: ObjectID;
|
|
17
16
|
telemetryType: TelemetryType;
|
|
18
17
|
}): Promise<string[]> {
|
|
19
|
-
const
|
|
18
|
+
const telemetryAttribute: TelemetryAttribute | null = await this.findOneBy({
|
|
20
19
|
query: {
|
|
21
20
|
projectId: data.projectId,
|
|
22
21
|
telemetryType: data.telemetryType,
|
|
23
22
|
},
|
|
24
23
|
select: {
|
|
25
|
-
|
|
24
|
+
attributes: true,
|
|
26
25
|
},
|
|
27
|
-
limit: LIMIT_PER_PROJECT,
|
|
28
|
-
skip: 0,
|
|
29
26
|
props: {
|
|
30
27
|
isRoot: true,
|
|
31
28
|
},
|
|
32
29
|
});
|
|
33
30
|
|
|
34
|
-
|
|
35
|
-
.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
return Boolean(attribute);
|
|
40
|
-
}) as string[];
|
|
41
|
-
|
|
42
|
-
return dbAttributes.sort();
|
|
31
|
+
return telemetryAttribute &&
|
|
32
|
+
telemetryAttribute.attributes &&
|
|
33
|
+
telemetryAttribute
|
|
34
|
+
? telemetryAttribute.attributes
|
|
35
|
+
: [];
|
|
43
36
|
}
|
|
44
37
|
|
|
45
38
|
@CaptureSpan()
|
|
@@ -61,21 +54,14 @@ export class TelemetryAttributeService extends AnalyticsDatabaseService<Telemetr
|
|
|
61
54
|
},
|
|
62
55
|
});
|
|
63
56
|
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
// insert new attributes
|
|
67
|
-
for (const attribute of attributes) {
|
|
68
|
-
const telemetryAttribute: TelemetryAttribute = new TelemetryAttribute();
|
|
69
|
-
|
|
70
|
-
telemetryAttribute.projectId = projectId;
|
|
71
|
-
telemetryAttribute.telemetryType = telemetryType;
|
|
72
|
-
telemetryAttribute.attribute = attribute;
|
|
57
|
+
const telemetryAttribute: TelemetryAttribute = new TelemetryAttribute();
|
|
73
58
|
|
|
74
|
-
|
|
75
|
-
|
|
59
|
+
telemetryAttribute.projectId = projectId;
|
|
60
|
+
telemetryAttribute.telemetryType = telemetryType;
|
|
61
|
+
telemetryAttribute.attributes = attributes;
|
|
76
62
|
|
|
77
|
-
await this.
|
|
78
|
-
|
|
63
|
+
await this.create({
|
|
64
|
+
data: telemetryAttribute,
|
|
79
65
|
props: {
|
|
80
66
|
isRoot: true,
|
|
81
67
|
},
|
|
@@ -63,7 +63,13 @@ function CaptureSpan(data?: {
|
|
|
63
63
|
return Telemetry.startActiveSpan({
|
|
64
64
|
name: name,
|
|
65
65
|
options: {
|
|
66
|
-
attributes:
|
|
66
|
+
attributes: {
|
|
67
|
+
...spanAttributes,
|
|
68
|
+
hey: "there",
|
|
69
|
+
thisIsNumber: 123,
|
|
70
|
+
thisIsBoolean: true,
|
|
71
|
+
thisIsArray: [1, 2, 3],
|
|
72
|
+
},
|
|
67
73
|
},
|
|
68
74
|
fn: (span: Span) => {
|
|
69
75
|
let result: any = null;
|
|
@@ -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
|
}
|
|
@@ -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"}
|
|
@@ -8,7 +8,6 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
9
|
};
|
|
10
10
|
import OneUptimeDate from "Common/Types/Date";
|
|
11
|
-
import JSONFunctions from "Common/Types/JSONFunctions";
|
|
12
11
|
import Metric, { AggregationTemporality, } from "Common/Models/AnalyticsModels/Metric";
|
|
13
12
|
import { IsBillingEnabled } from "Common/Server/EnvironmentConfig";
|
|
14
13
|
import TelemetryUsageBillingService from "Common/Server/Services/TelemetryUsageBillingService";
|
|
@@ -109,15 +108,14 @@ export default class OTelIngestService {
|
|
|
109
108
|
if (!newDbMetric.attributes) {
|
|
110
109
|
newDbMetric.attributes = {};
|
|
111
110
|
}
|
|
112
|
-
newDbMetric.attributes = Object.assign(Object.assign({},
|
|
111
|
+
newDbMetric.attributes = Object.assign(Object.assign({}, TelemetryUtil.getAttributesForServiceIdAndServiceName({
|
|
112
|
+
serviceId: data.telemetryServiceId,
|
|
113
|
+
serviceName: data.telemetryServiceName,
|
|
114
|
+
})), TelemetryUtil.getAttributes({
|
|
113
115
|
items: datapoint["attributes"],
|
|
114
|
-
|
|
115
|
-
telemetryServiceName: data.telemetryServiceName,
|
|
116
|
+
prefixKeysWithString: "metricAttributes",
|
|
116
117
|
}));
|
|
117
118
|
}
|
|
118
|
-
if (newDbMetric.attributes) {
|
|
119
|
-
newDbMetric.attributes = JSONFunctions.flattenObject(newDbMetric.attributes);
|
|
120
|
-
}
|
|
121
119
|
// aggregationTemporality
|
|
122
120
|
if (aggregationTemporality) {
|
|
123
121
|
if (aggregationTemporality === OtelAggregationTemporality.Cumulative) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenTelemetryIngestService.js","sourceRoot":"","sources":["../../../../Server/Services/OpenTelemetryIngestService.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,aAAa,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"OpenTelemetryIngestService.js","sourceRoot":"","sources":["../../../../Server/Services/OpenTelemetryIngestService.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,aAAa,MAAM,mBAAmB,CAAC;AAG9C,OAAO,MAAM,EAAE,EACb,sBAAsB,GACvB,MAAM,sCAAsC,CAAC;AAG9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,4BAA4B,MAAM,qDAAqD,CAAC;AAC/F,OAAO,MAAM,MAAM,4BAA4B,CAAC;AAChD,OAAO,gBAAgB,MAAM,+CAA+C,CAAC;AAC7E,OAAO,uBAAuB,MAAM,gDAAgD,CAAC;AACrF,OAAO,EAAE,yBAAyB,EAAE,MAAM,oDAAoD,CAAC;AAC/F,OAAO,aAAa,MAAM,yCAAyC,CAAC;AACpE,OAAO,WAAW,MAAM,gCAAgC,CAAC;AAEzD,MAAM,CAAN,IAAY,0BAGX;AAHD,WAAY,0BAA0B;IACpC,+EAAiD,CAAA;IACjD,qEAAuC,CAAA;AACzC,CAAC,EAHW,0BAA0B,KAA1B,0BAA0B,QAGrC;AASD,MAAM,CAAC,OAAO,OAAO,iBAAiB;IAEhB,AAAb,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,IAG5C;QAIC,MAAM,OAAO,GACX,MAAM,uBAAuB,CAAC,SAAS,CAAC;YACtC,KAAK,EAAE;gBACL,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,IAAI,EAAE,IAAI,CAAC,WAAW;aACvB;YACD,MAAM,EAAE;gBACN,GAAG,EAAE,IAAI;gBACT,0BAA0B,EAAE,IAAI;aACjC;YACD,KAAK,EAAE;gBACL,MAAM,EAAE,IAAI;aACb;SACF,CAAC,CAAC;QAEL,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,iBAAiB;YAEjB,MAAM,UAAU,GAAqB,IAAI,gBAAgB,EAAE,CAAC;YAC5D,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACtC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;YACnC,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;YAC1C,UAAU,CAAC,0BAA0B,GAAG,yBAAyB,CAAC;YAElE,MAAM,cAAc,GAClB,MAAM,uBAAuB,CAAC,MAAM,CAAC;gBACnC,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE;oBACL,MAAM,EAAE,IAAI;iBACb;aACF,CAAC,CAAC;YAEL,OAAO;gBACL,SAAS,EAAE,cAAc,CAAC,EAAG;gBAC7B,oBAAoB,EAAE,yBAAyB;aAChD,CAAC;QACJ,CAAC;QAED,OAAO;YACL,SAAS,EAAE,OAAO,CAAC,EAAG;YACtB,oBAAoB,EAClB,OAAO,CAAC,0BAA0B,IAAI,yBAAyB;SAClE,CAAC;IACJ,CAAC;IAGmB,AAAb,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,IAIlD;QACC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACxC,MAAM,WAAW,GACf,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAE7B,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,SAAS;YACX,CAAC;YAED,4BAA4B,CAAC,kBAAkB,CAAC;gBAC9C,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,gBAAgB,EAAE,WAAW,CAAC,gBAAgB,IAAI,CAAC;gBACnD,kBAAkB,EAAE,WAAW,CAAC,SAAS;gBACzC,eAAe,EAAE,WAAW,CAAC,oBAAoB;aAClD,CAAC,CAAC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;gBACtB,MAAM,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;gBACxD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAGa,AAAP,MAAM,CAAC,sBAAsB,CAAC,IAOpC;QACC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,sBAAsB,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;QAE1E,MAAM,WAAW,GAAW,MAAM,CAAC,QAAQ,CACzC,QAAQ,CAAC,MAAM,EAAE,EACjB,MAAM,CACG,CAAC;QAEZ,WAAW,CAAC,iBAAiB,GAAG,SAAS,CAAC,mBAAmB,CAAW,CAAC;QACzE,WAAW,CAAC,SAAS,GAAG,aAAa,CAAC,YAAY,CAChD,SAAS,CAAC,mBAAmB,CAAW,CACzC,CAAC;QAEF,WAAW,CAAC,YAAY,GAAG,SAAS,CAAC,cAAc,CAAW,CAAC;QAC/D,WAAW,CAAC,IAAI,GAAG,aAAa,CAAC,YAAY,CAC3C,SAAS,CAAC,cAAc,CAAW,CACpC,CAAC;QAEF,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7C,WAAW,CAAC,KAAK,GAAG,SAAS,CAAC,OAAO,CAAW,CAAC;QACnD,CAAC;aAAM,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACvD,WAAW,CAAC,KAAK,GAAG,SAAS,CAAC,UAAU,CAAW,CAAC;QACtD,CAAC;QAED,WAAW,CAAC,KAAK,GAAG,SAAS,CAAC,OAAO,CAAW,CAAC;QACjD,WAAW,CAAC,GAAG,GAAG,SAAS,CAAC,KAAK,CAAW,CAAC;QAE7C,WAAW,CAAC,GAAG,GAAG,SAAS,CAAC,KAAK,CAAW,CAAC;QAC7C,WAAW,CAAC,GAAG,GAAG,SAAS,CAAC,KAAK,CAAW,CAAC;QAE7C,WAAW,CAAC,YAAY,GAAG,SAAS,CAAC,cAAc,CAAkB,CAAC;QACtE,WAAW,CAAC,cAAc,GAAG,SAAS,CAAC,gBAAgB,CAAkB,CAAC;QAE1E,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YACvB,WAAW,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC;QACtC,CAAC;QAED,YAAY;QAEZ,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;gBAC5B,WAAW,CAAC,UAAU,GAAG,EAAE,CAAC;YAC9B,CAAC;YAED,WAAW,CAAC,UAAU,mCACjB,aAAa,CAAC,uCAAuC,CAAC;gBACvD,SAAS,EAAE,IAAI,CAAC,kBAAkB;gBAClC,WAAW,EAAE,IAAI,CAAC,oBAAoB;aACvC,CAAC,GACC,aAAa,CAAC,aAAa,CAAC;gBAC7B,KAAK,EAAE,SAAS,CAAC,YAAY,CAAc;gBAC3C,oBAAoB,EAAE,kBAAkB;aACzC,CAAC,CACH,CAAC;QACJ,CAAC;QAED,yBAAyB;QAEzB,IAAI,sBAAsB,EAAE,CAAC;YAC3B,IAAI,sBAAsB,KAAK,0BAA0B,CAAC,UAAU,EAAE,CAAC;gBACrE,WAAW,CAAC,sBAAsB,GAAG,sBAAsB,CAAC,UAAU,CAAC;YACzE,CAAC;YAED,IAAI,sBAAsB,KAAK,0BAA0B,CAAC,KAAK,EAAE,CAAC;gBAChE,WAAW,CAAC,sBAAsB,GAAG,sBAAsB,CAAC,KAAK,CAAC;YACpE,CAAC;QACH,CAAC;QAED,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,WAAW,CAAC,WAAW,GAAG,WAAW,CAAC;QACxC,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;CACF;AArKqB;IADnB,WAAW,EAAE;;;;uDAmDb;AAGmB;IADnB,WAAW,EAAE;;;;6DA6Bb;AAGa;IADb,WAAW,EAAE;;;oCAQV,MAAM;qDAyET"}
|
|
@@ -9,35 +9,29 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
};
|
|
10
10
|
import AnalyticsDatabaseService from "./AnalyticsDatabaseService";
|
|
11
11
|
import TelemetryAttribute from "Common/Models/AnalyticsModels/TelemetryAttribute";
|
|
12
|
-
import { LIMIT_PER_PROJECT } from "../../Types/Database/LimitMax";
|
|
13
12
|
import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
14
13
|
export class TelemetryAttributeService extends AnalyticsDatabaseService {
|
|
15
14
|
constructor(clickhouseDatabase) {
|
|
16
15
|
super({ modelType: TelemetryAttribute, database: clickhouseDatabase });
|
|
17
16
|
}
|
|
18
17
|
async fetchAttributes(data) {
|
|
19
|
-
const
|
|
18
|
+
const telemetryAttribute = await this.findOneBy({
|
|
20
19
|
query: {
|
|
21
20
|
projectId: data.projectId,
|
|
22
21
|
telemetryType: data.telemetryType,
|
|
23
22
|
},
|
|
24
23
|
select: {
|
|
25
|
-
|
|
24
|
+
attributes: true,
|
|
26
25
|
},
|
|
27
|
-
limit: LIMIT_PER_PROJECT,
|
|
28
|
-
skip: 0,
|
|
29
26
|
props: {
|
|
30
27
|
isRoot: true,
|
|
31
28
|
},
|
|
32
29
|
});
|
|
33
|
-
|
|
34
|
-
.
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
return Boolean(attribute);
|
|
39
|
-
});
|
|
40
|
-
return dbAttributes.sort();
|
|
30
|
+
return telemetryAttribute &&
|
|
31
|
+
telemetryAttribute.attributes &&
|
|
32
|
+
telemetryAttribute
|
|
33
|
+
? telemetryAttribute.attributes
|
|
34
|
+
: [];
|
|
41
35
|
}
|
|
42
36
|
async refreshAttributes(data) {
|
|
43
37
|
const { projectId, telemetryType, attributes } = data;
|
|
@@ -51,17 +45,12 @@ export class TelemetryAttributeService extends AnalyticsDatabaseService {
|
|
|
51
45
|
isRoot: true,
|
|
52
46
|
},
|
|
53
47
|
});
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
telemetryAttribute
|
|
60
|
-
telemetryAttribute.attribute = attribute;
|
|
61
|
-
telemetryAttributes.push(telemetryAttribute);
|
|
62
|
-
}
|
|
63
|
-
await this.createMany({
|
|
64
|
-
items: telemetryAttributes,
|
|
48
|
+
const telemetryAttribute = new TelemetryAttribute();
|
|
49
|
+
telemetryAttribute.projectId = projectId;
|
|
50
|
+
telemetryAttribute.telemetryType = telemetryType;
|
|
51
|
+
telemetryAttribute.attributes = attributes;
|
|
52
|
+
await this.create({
|
|
53
|
+
data: telemetryAttribute,
|
|
65
54
|
props: {
|
|
66
55
|
isRoot: true,
|
|
67
56
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TelemetryAttributeService.js","sourceRoot":"","sources":["../../../../Server/Services/TelemetryAttributeService.ts"],"names":[],"mappings":";;;;;;;;;AAEA,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAClE,OAAO,kBAAkB,MAAM,kDAAkD,CAAC;
|
|
1
|
+
{"version":3,"file":"TelemetryAttributeService.js","sourceRoot":"","sources":["../../../../Server/Services/TelemetryAttributeService.ts"],"names":[],"mappings":";;;;;;;;;AAEA,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAClE,OAAO,kBAAkB,MAAM,kDAAkD,CAAC;AAElF,OAAO,WAAW,MAAM,gCAAgC,CAAC;AAEzD,MAAM,OAAO,yBAA0B,SAAQ,wBAA4C;IACzF,YAAmB,kBAAmD;QACpE,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC,CAAC;IACzE,CAAC;IAGY,AAAN,KAAK,CAAC,eAAe,CAAC,IAG5B;QACC,MAAM,kBAAkB,GAA8B,MAAM,IAAI,CAAC,SAAS,CAAC;YACzE,KAAK,EAAE;gBACL,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,aAAa,EAAE,IAAI,CAAC,aAAa;aAClC;YACD,MAAM,EAAE;gBACN,UAAU,EAAE,IAAI;aACjB;YACD,KAAK,EAAE;gBACL,MAAM,EAAE,IAAI;aACb;SACF,CAAC,CAAC;QAEH,OAAO,kBAAkB;YACvB,kBAAkB,CAAC,UAAU;YAC7B,kBAAkB;YAClB,CAAC,CAAC,kBAAkB,CAAC,UAAU;YAC/B,CAAC,CAAC,EAAE,CAAC;IACT,CAAC;IAGY,AAAN,KAAK,CAAC,iBAAiB,CAAC,IAI9B;QACC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;QAEtD,6BAA6B;QAC7B,MAAM,IAAI,CAAC,QAAQ,CAAC;YAClB,KAAK,EAAE;gBACL,SAAS;gBACT,aAAa;aACd;YACD,KAAK,EAAE;gBACL,MAAM,EAAE,IAAI;aACb;SACF,CAAC,CAAC;QAEH,MAAM,kBAAkB,GAAuB,IAAI,kBAAkB,EAAE,CAAC;QAExE,kBAAkB,CAAC,SAAS,GAAG,SAAS,CAAC;QACzC,kBAAkB,CAAC,aAAa,GAAG,aAAa,CAAC;QACjD,kBAAkB,CAAC,UAAU,GAAG,UAAU,CAAC;QAE3C,MAAM,IAAI,CAAC,MAAM,CAAC;YAChB,IAAI,EAAE,kBAAkB;YACxB,KAAK,EAAE;gBACL,MAAM,EAAE,IAAI;aACb;SACF,CAAC,CAAC;IACL,CAAC;CACF;AAxDc;IADZ,WAAW,EAAE;;;;gEAuBb;AAGY;IADZ,WAAW,EAAE;;;;kEA+Bb;AAGH,eAAe,IAAI,yBAAyB,EAAE,CAAC"}
|
|
@@ -32,7 +32,7 @@ function CaptureSpan(data) {
|
|
|
32
32
|
return Telemetry.startActiveSpan({
|
|
33
33
|
name: name,
|
|
34
34
|
options: {
|
|
35
|
-
attributes: spanAttributes,
|
|
35
|
+
attributes: Object.assign(Object.assign({}, spanAttributes), { hey: "there", thisIsNumber: 123, thisIsBoolean: true, thisIsArray: [1, 2, 3] }),
|
|
36
36
|
},
|
|
37
37
|
fn: (span) => {
|
|
38
38
|
let result = null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CaptureSpan.js","sourceRoot":"","sources":["../../../../../Server/Utils/Telemetry/CaptureSpan.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAQ,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,aAAa,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,SAAS,WAAW,CAAC,IAIpB;IAKC,OAAO,UACL,MAAW,EACX,WAAmB,EACnB,UAAwC;;QAExC,MAAM,cAAc,GAAQ,UAAU,CAAC,KAAK,CAAC;QAE7C,IAAI,SAAS,GAAuB,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,0CAAE,IAAI,CAAC;QAE9D,IAAI,SAAS,KAAK,EAAE,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YACjD,MAAM,eAAe,GAAuB,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,CAAC;YAEzD,IAAI,eAAe,EAAE,CAAC;gBACpB,SAAS,GAAG,eAAe,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,SAAS,GAAG,cAAc,CAAC;QAC7B,CAAC;QAED,MAAM,IAAI,GACR,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,KAAI,GAAG,SAAS,IAAI,WAAW,EAAE,CAAC;QAE9C,UAAU,CAAC,KAAK,GAAG,UAAU,GAAG,IAAW;YACzC,IAAI,gBAAgB,EAAE,CAAC;gBACrB,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC1C,CAAC;YAED,IAAI,iBAAiB,GAAe,EAAE,CAAC;YAEvC,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,EAAE,CAAC;gBAC3B,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAC7B,CAAC,GAA2B,EAAE,GAAQ,EAAE,KAAa,EAAE,EAAE;oBACvD,GAAG,CAAC,MAAM,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC;oBACzB,OAAO,GAAG,CAAC;gBACb,CAAC,EACD,EAAE,CACH,CAAC;YACJ,CAAC;YAED,MAAM,cAAc,GAClB,aAAa,CAAC,aAAa,iCACtB,iBAAiB,GACjB,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,EACO,CAAC;YAE/B,OAAO,SAAS,CAAC,eAAe,CAAC;gBAC/B,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE;oBACP,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"CaptureSpan.js","sourceRoot":"","sources":["../../../../../Server/Utils/Telemetry/CaptureSpan.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,21 +7,23 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
9
|
};
|
|
10
|
-
import JSONFunctions from "../../../Types/JSONFunctions";
|
|
11
|
-
import ArrayUtil from "../../../Utils/Array";
|
|
12
10
|
import GlobalCache from "../../Infrastructure/GlobalCache";
|
|
13
11
|
import TelemetryAttributeService from "../../Services/TelemetryAttributeService";
|
|
14
12
|
import CaptureSpan from "./CaptureSpan";
|
|
13
|
+
import logger from "../Logger";
|
|
15
14
|
export default class TelemetryUtil {
|
|
16
15
|
static async indexAttributes(data) {
|
|
17
16
|
// index attributes
|
|
17
|
+
logger.debug("Indexing attributes");
|
|
18
|
+
logger.debug("data: " + JSON.stringify(data, null, 2));
|
|
18
19
|
const cacheKey = data.projectId.toString() + "_" + data.telemetryType;
|
|
19
20
|
// get keys from cache
|
|
20
21
|
const cacheKeys = (await GlobalCache.getStringArray("telemetryAttributesKeys", cacheKey)) ||
|
|
21
22
|
[];
|
|
22
23
|
let isKeysMissingInCache = false;
|
|
23
24
|
// check if keys are missing in cache
|
|
24
|
-
|
|
25
|
+
const attributeKeys = data.attributes;
|
|
26
|
+
for (const key of attributeKeys) {
|
|
25
27
|
if (!cacheKeys.includes(key)) {
|
|
26
28
|
isKeysMissingInCache = true;
|
|
27
29
|
break;
|
|
@@ -33,11 +35,7 @@ export default class TelemetryUtil {
|
|
|
33
35
|
projectId: data.projectId,
|
|
34
36
|
telemetryType: data.telemetryType,
|
|
35
37
|
});
|
|
36
|
-
const mergedKeys =
|
|
37
|
-
...dbKeys,
|
|
38
|
-
...data.attributes,
|
|
39
|
-
...cacheKeys,
|
|
40
|
-
]);
|
|
38
|
+
const mergedKeys = Array.from(new Set([...dbKeys, ...attributeKeys, ...cacheKeys]));
|
|
41
39
|
await GlobalCache.setStringArray("telemetryAttributesKeys", cacheKey, mergedKeys);
|
|
42
40
|
await TelemetryAttributeService.refreshAttributes({
|
|
43
41
|
projectId: data.projectId,
|
|
@@ -46,65 +44,95 @@ export default class TelemetryUtil {
|
|
|
46
44
|
});
|
|
47
45
|
}
|
|
48
46
|
}
|
|
47
|
+
static getAttributesForServiceIdAndServiceName(data) {
|
|
48
|
+
// get attributes for service id and service name
|
|
49
|
+
return {
|
|
50
|
+
"oneuptime.service.id": data.serviceId.toString(),
|
|
51
|
+
"oneuptime.service.name": data.serviceName,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
49
54
|
static getAttributes(data) {
|
|
50
55
|
const { items } = data;
|
|
51
|
-
|
|
52
|
-
|
|
56
|
+
let { prefixKeysWithString } = data;
|
|
57
|
+
if (prefixKeysWithString) {
|
|
58
|
+
prefixKeysWithString = prefixKeysWithString + ".";
|
|
59
|
+
}
|
|
60
|
+
let finalObj = {};
|
|
53
61
|
const attributes = items;
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
value =
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
value["arrayValue"]["values"]) {
|
|
70
|
-
value = value["arrayValue"]["values"].map((v) => {
|
|
71
|
-
return getValue(v);
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
else if (value["mapValue"] &&
|
|
75
|
-
value["mapValue"]["fields"]) {
|
|
76
|
-
value = getValue(value["mapValue"]["fields"]);
|
|
77
|
-
}
|
|
78
|
-
else if (value["nullValue"]) {
|
|
79
|
-
value = null;
|
|
80
|
-
}
|
|
81
|
-
return value;
|
|
82
|
-
};
|
|
83
|
-
if (attributes) {
|
|
84
|
-
for (const attribute of attributes) {
|
|
85
|
-
if (attribute["key"] && typeof attribute["key"] === "string") {
|
|
86
|
-
const value = getValue(attribute["value"]);
|
|
87
|
-
finalObj[attribute["key"]] = value;
|
|
62
|
+
if (!attributes) {
|
|
63
|
+
return finalObj;
|
|
64
|
+
}
|
|
65
|
+
for (const attribute of attributes) {
|
|
66
|
+
if (attribute["key"] && typeof attribute["key"] === "string") {
|
|
67
|
+
const keyWithPrefix = `${prefixKeysWithString}${attribute["key"]}`;
|
|
68
|
+
const value = this.getAttributeValues(keyWithPrefix, attribute["value"]);
|
|
69
|
+
if (Array.isArray(value)) {
|
|
70
|
+
finalObj = Object.assign(Object.assign({}, finalObj), { [keyWithPrefix]: value });
|
|
71
|
+
}
|
|
72
|
+
else if (typeof value === "object" && value !== null) {
|
|
73
|
+
finalObj = Object.assign(Object.assign({}, finalObj), value);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
finalObj[keyWithPrefix] = value;
|
|
88
77
|
}
|
|
89
78
|
}
|
|
90
79
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
80
|
+
return finalObj;
|
|
81
|
+
}
|
|
82
|
+
static getAttributeValues(prefixKeysWithString, value) {
|
|
83
|
+
var _a;
|
|
84
|
+
let finalObj = null;
|
|
85
|
+
value = value;
|
|
86
|
+
if (value["stringValue"]) {
|
|
87
|
+
finalObj = value["stringValue"];
|
|
88
|
+
}
|
|
89
|
+
else if (value["intValue"]) {
|
|
90
|
+
finalObj = value["intValue"];
|
|
91
|
+
}
|
|
92
|
+
else if (value["doubleValue"]) {
|
|
93
|
+
finalObj = value["doubleValue"];
|
|
94
94
|
}
|
|
95
|
-
if (
|
|
96
|
-
finalObj["
|
|
95
|
+
else if (value["boolValue"]) {
|
|
96
|
+
finalObj = value["boolValue"];
|
|
97
97
|
}
|
|
98
|
-
if (
|
|
99
|
-
|
|
98
|
+
else if (value["arrayValue"] &&
|
|
99
|
+
value["arrayValue"]["values"]) {
|
|
100
|
+
const values = value["arrayValue"]["values"];
|
|
101
|
+
finalObj = values.map((v) => {
|
|
102
|
+
return this.getAttributeValues(prefixKeysWithString, v);
|
|
103
|
+
});
|
|
100
104
|
}
|
|
101
|
-
if (
|
|
102
|
-
|
|
105
|
+
else if (value["mapValue"] &&
|
|
106
|
+
value["mapValue"]["fields"]) {
|
|
107
|
+
const fields = (_a = value["mapValue"]) === null || _a === void 0 ? void 0 : _a["fields"];
|
|
108
|
+
const flattenedFields = {};
|
|
109
|
+
for (const key in fields) {
|
|
110
|
+
const prefixKey = `${prefixKeysWithString}.${key}`;
|
|
111
|
+
const nestedValue = this.getAttributeValues(prefixKey, fields[key]);
|
|
112
|
+
if (typeof nestedValue === "object" && nestedValue !== null) {
|
|
113
|
+
for (const nestedKey in nestedValue) {
|
|
114
|
+
flattenedFields[`${prefixKey}.${nestedKey}`] = nestedValue[nestedKey];
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
flattenedFields[prefixKey] = nestedValue;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
finalObj = flattenedFields;
|
|
122
|
+
}
|
|
123
|
+
// kvlistValue
|
|
124
|
+
else if (value["kvlistValue"] &&
|
|
125
|
+
value["kvlistValue"]["values"]) {
|
|
126
|
+
const values = value["kvlistValue"]["values"];
|
|
127
|
+
finalObj = this.getAttributes({
|
|
128
|
+
prefixKeysWithString,
|
|
129
|
+
items: values,
|
|
130
|
+
});
|
|
103
131
|
}
|
|
104
|
-
if (
|
|
105
|
-
finalObj
|
|
132
|
+
else if (value["nullValue"]) {
|
|
133
|
+
finalObj = null;
|
|
106
134
|
}
|
|
107
|
-
return
|
|
135
|
+
return finalObj;
|
|
108
136
|
}
|
|
109
137
|
}
|
|
110
138
|
__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Telemetry.js","sourceRoot":"","sources":["../../../../../Server/Utils/Telemetry/Telemetry.ts"],"names":[],"mappings":";;;;;;;;;
|
|
1
|
+
{"version":3,"file":"Telemetry.js","sourceRoot":"","sources":["../../../../../Server/Utils/Telemetry/Telemetry.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oneuptime/common",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.3887",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
"airtable": "^0.12.2",
|
|
78
78
|
"axios": "^1.7.2",
|
|
79
79
|
"bullmq": "^5.3.3",
|
|
80
|
-
"Common": "npm:@oneuptime/common@7.0.
|
|
80
|
+
"Common": "npm:@oneuptime/common@7.0.3887",
|
|
81
81
|
"cookie-parser": "^1.4.7",
|
|
82
82
|
"cors": "^2.8.5",
|
|
83
83
|
"cron-parser": "^4.8.1",
|