Skip to content

Commit f76e583

Browse files
authored
Return a new query from applyTemplateVariables instead of modifying the query in place. (#316)
* deep copy query to avoid modifying the query in place * remove added newline * minimize changes
1 parent 012d357 commit f76e583

File tree

1 file changed

+30
-29
lines changed

1 file changed

+30
-29
lines changed

src/datasource.ts

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -71,49 +71,50 @@ export class OCIDataSource extends DataSourceWithBackend<OCIQuery, OCIDataSource
7171
*/
7272
applyTemplateVariables(query: OCIQuery, scopedVars: ScopedVars) {
7373
const templateSrv = getTemplateSrv();
74+
const interpolatedQ = _.cloneDeep(query);
7475

7576
const TimeStart = parseInt(getTemplateSrv().replace("${__from}"), 10)
7677
const TimeEnd = parseInt(getTemplateSrv().replace("${__to}"), 10)
77-
if (this.isVariable(query.interval)) {
78-
query.interval = templateSrv.replace(query.interval, scopedVars);
79-
}
80-
if (query.interval === QueryPlaceholder.Interval || query.interval === "auto" || query.interval === undefined){
81-
query.interval = SetAutoInterval(TimeStart, TimeEnd);
82-
}
83-
query.region = templateSrv.replace(query.region, scopedVars);
84-
query.tenancy = templateSrv.replace(query.tenancy, scopedVars);
85-
query.compartment = templateSrv.replace(query.compartment, scopedVars, this.compartmentFormatter);
86-
query.namespace = templateSrv.replace(query.namespace, scopedVars);
87-
query.resourcegroup = templateSrv.replace(query.resourcegroup, scopedVars);
88-
query.metric = templateSrv.replace(query.metric, scopedVars);
89-
query.queryTextRaw = templateSrv.replace(query.queryTextRaw, scopedVars);
90-
91-
if (query.dimensionValues) {
92-
for (let i = 0; i < query.dimensionValues.length; i++) {
93-
query.dimensionValues[i] = templateSrv.replace(query.dimensionValues[i], scopedVars);
78+
if (this.isVariable(interpolatedQ.interval)) {
79+
interpolatedQ.interval = templateSrv.replace(interpolatedQ.interval, scopedVars);
80+
}
81+
if (interpolatedQ.interval === QueryPlaceholder.Interval || interpolatedQ.interval === "auto" || interpolatedQ.interval === undefined){
82+
interpolatedQ.interval = SetAutoInterval(TimeStart, TimeEnd);
83+
}
84+
interpolatedQ.region = templateSrv.replace(interpolatedQ.region, scopedVars);
85+
interpolatedQ.tenancy = templateSrv.replace(interpolatedQ.tenancy, scopedVars);
86+
interpolatedQ.compartment = templateSrv.replace(interpolatedQ.compartment, scopedVars, this.compartmentFormatter);
87+
interpolatedQ.namespace = templateSrv.replace(interpolatedQ.namespace, scopedVars);
88+
interpolatedQ.resourcegroup = templateSrv.replace(interpolatedQ.resourcegroup, scopedVars);
89+
interpolatedQ.metric = templateSrv.replace(interpolatedQ.metric, scopedVars);
90+
interpolatedQ.queryTextRaw = templateSrv.replace(interpolatedQ.queryTextRaw, scopedVars);
91+
92+
if (interpolatedQ.dimensionValues) {
93+
for (let i = 0; i < interpolatedQ.dimensionValues.length; i++) {
94+
interpolatedQ.dimensionValues[i] = templateSrv.replace(interpolatedQ.dimensionValues[i], scopedVars);
9495
}
9596
}
96-
if (query.tenancy) {
97-
query.tenancy = templateSrv.replace(query.tenancy, scopedVars);
97+
if (interpolatedQ.tenancy) {
98+
interpolatedQ.tenancy = templateSrv.replace(interpolatedQ.tenancy, scopedVars);
9899
}
99-
if (query.compartment) {
100-
query.compartment = templateSrv.replace(query.compartment, scopedVars, this.compartmentFormatter);
100+
if (interpolatedQ.compartment) {
101+
interpolatedQ.compartment = templateSrv.replace(interpolatedQ.compartment, scopedVars, this.compartmentFormatter);
101102
}
102-
if (query.resourcegroup) {
103-
query.resourcegroup = templateSrv.replace(query.resourcegroup, scopedVars);
103+
if (interpolatedQ.resourcegroup) {
104+
interpolatedQ.resourcegroup = templateSrv.replace(interpolatedQ.resourcegroup, scopedVars);
104105
}
105106

106-
const queryModel = new QueryModel(query, getTemplateSrv());
107+
const queryModel = new QueryModel(interpolatedQ, getTemplateSrv());
107108
if (queryModel.isQueryReady()) {
108-
if (query.rawQuery === false && query.queryTextRaw !== '') {
109-
query.queryTextRaw = templateSrv.replace(query.queryTextRaw, scopedVars);
110-
query.queryText = queryModel.buildQuery(String(query.queryTextRaw));
109+
if (interpolatedQ.rawQuery === false && interpolatedQ.queryTextRaw !== '') {
110+
interpolatedQ.queryTextRaw = templateSrv.replace(interpolatedQ.queryTextRaw, scopedVars);
111+
interpolatedQ.queryText = queryModel.buildQuery(String(interpolatedQ.queryTextRaw));
111112
} else {
112-
query.queryText = queryModel.buildQuery(String(query.metric));
113+
interpolatedQ.queryText = queryModel.buildQuery(String(interpolatedQ.metric));
113114
}
114115

115116
}
116-
return query;
117+
return interpolatedQ;
117118
}
118119

119120

0 commit comments

Comments
 (0)