D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
usr
/
share
/
grafana
/
public
/
build
/
Filename :
influxdbPlugin.2c4879011e13bbbe12ff.js
back
Copy
"use strict";(self.webpackChunkgrafana=self.webpackChunkgrafana||[]).push([[5783],{15622:(Fa,ie,p)=>{p.r(ie),p.d(ie,{plugin:()=>wa});var ke=p(68246),f=p(89949),s=p(27702),I=p(17312),Le=p(82367),b=p(60644),oe=p(86064),Q=p(28580),$e=p(63439),Ve=p(49257),We=p(48024),J=p(12308);const ue="Direct browser access in the InfluxDB datasource is no longer available. Switch to server access mode.",ce="default";var O=(a=>(a.InfluxQL="InfluxQL",a.Flux="Flux",a))(O||{});const{Input:k,SecretFormField:me}=Le.LegacyForms,de=[{label:"GET",value:"GET"},{label:"POST",value:"POST"}],H=[{label:"InfluxQL",value:O.InfluxQL,description:"The InfluxDB SQL-like query language."},{label:"Flux",value:O.Flux,description:"Advanced data scripting and query language. Supported in InfluxDB 2.x and 1.8+"}];class Ge extends s.PureComponent{constructor(e){super(e),this.state={maxSeries:""},this.onResetPassword=()=>{(0,I.Mf)(this.props,"password")},this.onResetToken=()=>{(0,I.Mf)(this.props,"token")},this.onVersionChanged=t=>{const{options:r,onOptionsChange:n}=this.props,l={...r,jsonData:{...r.jsonData,version:t.value}};if(t.value===O.Flux){l.access="proxy",l.basicAuth=!0,l.jsonData.httpMode="POST";const{user:i,database:o,...u}=l;n(u)}else n(l)},this.state.maxSeries=e.options.jsonData.maxSeries?.toString()||"",this.htmlPrefix=(0,f.uniqueId)("influxdb-config")}renderInflux2x(){const{options:e}=this.props,{secureJsonFields:t}=e,r=e.secureJsonData||{},{htmlPrefix:n}=this;return s.createElement(s.Fragment,null,s.createElement("div",{className:"gf-form-inline"},s.createElement("div",{className:"gf-form"},s.createElement(b.c,{htmlFor:`${n}-org`,className:"width-10"},"Organization"),s.createElement("div",{className:"width-10"},s.createElement(k,{id:`${n}-org`,className:"width-20",value:e.jsonData.organization||"",onChange:(0,I._R)(this.props,"organization")})))),s.createElement("div",{className:"gf-form-inline"},s.createElement("div",{className:"gf-form"},s.createElement(me,{isConfigured:!!(t&&t.token),value:r.token||"",label:"Token","aria-label":"Token",labelWidth:10,inputWidth:20,onReset:this.onResetToken,onChange:(0,I.fi)(this.props,"token")}))),s.createElement("div",{className:"gf-form-inline"},s.createElement("div",{className:"gf-form"},s.createElement(b.c,{className:"width-10"},"Default Bucket"),s.createElement("div",{className:"width-10"},s.createElement(k,{className:"width-20",placeholder:"default bucket",value:e.jsonData.defaultBucket||"",onChange:(0,I._R)(this.props,"defaultBucket")})))),s.createElement("div",{className:"gf-form-inline"},s.createElement("div",{className:"gf-form"},s.createElement(b.c,{className:"width-10",tooltip:`A lower limit for the auto group by time interval. Recommended to be set to write frequency, for example 1m if your data is written every minute.`},"Min time interval"),s.createElement("div",{className:"width-10"},s.createElement(k,{className:"width-10",placeholder:"10s",value:e.jsonData.timeInterval||"",onChange:(0,I._R)(this.props,"timeInterval")})))))}renderInflux1x(){const{options:e}=this.props,{secureJsonFields:t}=e,r=e.secureJsonData||{},{htmlPrefix:n}=this;return s.createElement(s.Fragment,null,s.createElement(oe.v,null,s.createElement("h5",null,"Database Access"),s.createElement("p",null,"Setting the database for this datasource does not deny access to other databases. The InfluxDB query syntax allows switching the database in the query. For example:",s.createElement("code",null,"SHOW MEASUREMENTS ON _internal")," or",s.createElement("code",null,'SELECT * FROM "_internal".."database" LIMIT 10'),s.createElement("br",null),s.createElement("br",null),"To support data isolation and security, make sure appropriate permissions are configured in InfluxDB.")),s.createElement("div",{className:"gf-form-inline"},s.createElement("div",{className:"gf-form"},s.createElement(b.c,{htmlFor:`${n}-db`,className:"width-10"},"Database"),s.createElement("div",{className:"width-20"},s.createElement(k,{id:`${n}-db`,className:"width-20",value:e.jsonData.dbName??e.database,onChange:l=>{this.props.onOptionsChange({...e,database:"",jsonData:{...e.jsonData,dbName:l.target.value}})}})))),s.createElement("div",{className:"gf-form-inline"},s.createElement("div",{className:"gf-form"},s.createElement(b.c,{htmlFor:`${n}-user`,className:"width-10"},"User"),s.createElement("div",{className:"width-10"},s.createElement(k,{id:`${n}-user`,className:"width-20",value:e.user||"",onChange:(0,I.z_)(this.props,"user")})))),s.createElement("div",{className:"gf-form-inline"},s.createElement("div",{className:"gf-form"},s.createElement(me,{isConfigured:!!(t&&t.password),value:r.password||"",label:"Password","aria-label":"Password",labelWidth:10,inputWidth:20,onReset:this.onResetPassword,onChange:(0,I.fi)(this.props,"password")}))),s.createElement("div",{className:"gf-form-inline"},s.createElement("div",{className:"gf-form"},s.createElement(b.c,{htmlFor:`${n}-http-method`,className:"width-10",tooltip:`You can use either GET or POST HTTP method to query your InfluxDB database. The POST method allows you to perform heavy requests (with a lots of WHERE clause) while the GET method will restrict you and return an error if the query is too large.`},"HTTP Method"),s.createElement(Q.Ph,{inputId:`${n}-http-method`,className:"width-10",value:de.find(l=>l.value===e.jsonData.httpMode),options:de,defaultValue:e.jsonData.httpMode,onChange:(0,I.nx)(this.props,"httpMode")}))),s.createElement("div",{className:"gf-form-inline"},s.createElement("div",{className:"gf-form"},s.createElement(b.c,{className:"width-10",tooltip:`A lower limit for the auto group by time interval. Recommended to be set to write frequency, for example 1m if your data is written every minute.`},"Min time interval"),s.createElement("div",{className:"width-10"},s.createElement(k,{className:"width-10",placeholder:"10s",value:e.jsonData.timeInterval||"",onChange:(0,I._R)(this.props,"timeInterval")})))))}render(){const{options:e,onOptionsChange:t}=this.props,r=e.access==="direct";return s.createElement(s.Fragment,null,s.createElement("h3",{className:"page-heading"},"Query Language"),s.createElement("div",{className:"gf-form-group"},s.createElement("div",{className:"gf-form-inline"},s.createElement("div",{className:"gf-form"},s.createElement(Q.Ph,{"aria-label":"Query language",className:"width-30",value:e.jsonData.version===O.Flux?H[1]:H[0],options:H,defaultValue:H[0],onChange:this.onVersionChanged})))),e.jsonData.version===O.Flux&&s.createElement(oe.v,null,s.createElement("h5",null,"Support for Flux in Grafana is currently in beta"),s.createElement("p",null,"Please report any issues to: ",s.createElement("br",null),s.createElement("a",{href:"https://github.com/grafana/grafana/issues/new/choose"},"https://github.com/grafana/grafana/issues"))),r&&s.createElement($e.b,{title:"Error",severity:"error"},ue),s.createElement(Ve.E,{showAccessOptions:r,dataSourceConfig:e,defaultUrl:"http://localhost:8086",onChange:t,secureSocksDSProxyEnabled:J.config.secureSocksDSProxyEnabled}),s.createElement("div",{className:"gf-form-group"},s.createElement("div",null,s.createElement("h3",{className:"page-heading"},"InfluxDB Details")),e.jsonData.version===O.Flux?this.renderInflux2x():this.renderInflux1x(),s.createElement("div",{className:"gf-form-inline"},s.createElement(We._,{labelWidth:20,label:"Max series",tooltip:"Limit the number of series/tables that Grafana will process. Lower this number to prevent abuse, and increase it if you have lots of small time series and not all are shown. Defaults to 1000."},s.createElement(k,{placeholder:"1000",type:"number",className:"width-10",value:this.state.maxSeries,onChange:n=>{this.setState({maxSeries:n.currentTarget.value});const l=parseInt(n.currentTarget.value,10);(0,I.tp)(this.props,"maxSeries",Number.isFinite(l)?l:void 0)}})))))}}const ze=Ge;var C=p(42844),Z=p(95676),S=p(90135);const q=[],v={Aggregations:[],Selectors:[],Transformations:[],Predictors:[],Math:[],Aliasing:[],Fields:[]};function fe(a){const e=q[a.type];if(!e)throw{message:"Could not find query part "+a.type};return new S.XN(a,e)}function E(a){q[a.type]=new S.zU(a),a.category.push(q[a.type])}const X=[];function Ue(a,e){return e+' AS "'+a.params[0]+'"'}function pe(a){const e=a.params[0];if(e==="*")return"*";let t=`"${e}"`;return e.endsWith("::tag")&&(t=`"${e.slice(0,-5)}"::tag`),e.endsWith("::field")&&(t=`"${e.slice(0,-7)}"::field`),t}function w(a,e){for(let t=0;t<a.length;t++){const r=a[t];if(r.def.category===v.Aggregations){if(r.def.type===e.def.type)return;if(r.def.type==="count"&&e.def.type==="distinct")break;if(r.def.type==="distinct"){const n=a.length>=t+2;if(e.def.type!=="count"&&n)a[t+1].def.category===v.Aggregations&&a.splice(t+1,1);else if(e.def.type==="count"){(!n||a[t+1].def.type!=="count")&&a.splice(t+1,0,e);return}}a[t]=e;return}if(r.def.category===v.Selectors){a[t]=e;return}}a.splice(1,0,e)}function N(a,e){let t;for(t=0;t<a.length;t++){const r=a[t];if(r.def.category===v.Math||r.def.category===v.Aliasing)break}a.splice(t,0,e)}function He(a,e){const t=a.length;if(t>0){if(a[t-1].def.type==="math"){a[t-1]=e;return}if(t>1&&a[t-2].def.type==="math"){a[t-2]=e;return}else if(a[t-1].def.type==="alias"){a.splice(t-1,0,e);return}}a.push(e)}function Ke(a,e){const t=a.length;if(t>0&&a[t-1].def.type==="alias"){a[t-1]=e;return}a.push(e)}function je(a,e,t){const r=(0,f.map)(a,n=>fe({type:n.def.type,params:(0,f.clone)(n.params)}));t.selectModels.push(r)}E({type:"field",addStrategy:je,category:v.Fields,params:[{type:"field",dynamicLookup:!0}],defaultParams:["value"],renderer:pe}),E({type:"count",addStrategy:w,category:v.Aggregations,params:[],defaultParams:[],renderer:S.D}),E({type:"distinct",addStrategy:w,category:v.Aggregations,params:[],defaultParams:[],renderer:S.D}),E({type:"integral",addStrategy:w,category:v.Aggregations,params:[],defaultParams:[],renderer:S.D}),E({type:"mean",addStrategy:w,category:v.Aggregations,params:[],defaultParams:[],renderer:S.D}),E({type:"median",addStrategy:w,category:v.Aggregations,params:[],defaultParams:[],renderer:S.D}),E({type:"mode",addStrategy:w,category:v.Aggregations,params:[],defaultParams:[],renderer:S.D}),E({type:"sum",addStrategy:w,category:v.Aggregations,params:[],defaultParams:[],renderer:S.D}),E({type:"derivative",addStrategy:N,category:v.Transformations,params:[{name:"duration",type:"interval",options:["1s","10s","1m","5m","10m","15m","1h"]}],defaultParams:["10s"],renderer:S.D}),E({type:"spread",addStrategy:N,category:v.Transformations,params:[],defaultParams:[],renderer:S.D}),E({type:"non_negative_derivative",addStrategy:N,category:v.Transformations,params:[{name:"duration",type:"interval",options:["1s","10s","1m","5m","10m","15m","1h"]}],defaultParams:["10s"],renderer:S.D}),E({type:"difference",addStrategy:N,category:v.Transformations,params:[],defaultParams:[],renderer:S.D}),E({type:"non_negative_difference",addStrategy:N,category:v.Transformations,params:[],defaultParams:[],renderer:S.D}),E({type:"moving_average",addStrategy:N,category:v.Transformations,params:[{name:"window",type:"int",options:[5,10,20,30,40]}],defaultParams:[10],renderer:S.D}),E({type:"cumulative_sum",addStrategy:N,category:v.Transformations,params:[],defaultParams:[],renderer:S.D}),E({type:"stddev",addStrategy:N,category:v.Transformations,params:[],defaultParams:[],renderer:S.D}),E({type:"time",category:X,params:[{name:"interval",type:"time",options:["$__interval","1s","10s","1m","5m","10m","15m","1h"]}],defaultParams:["$__interval"],renderer:S.D}),E({type:"fill",category:X,params:[{name:"fill",type:"string",options:["none","null","0","previous","linear"]}],defaultParams:["null"],renderer:S.D}),E({type:"elapsed",addStrategy:N,category:v.Transformations,params:[{name:"duration",type:"interval",options:["1s","10s","1m","5m","10m","15m","1h"]}],defaultParams:["10s"],renderer:S.D}),E({type:"holt_winters",addStrategy:N,category:v.Predictors,params:[{name:"number",type:"int",options:[5,10,20,30,40]},{name:"season",type:"int",options:[0,1,2,5,10]}],defaultParams:[10,2],renderer:S.D}),E({type:"holt_winters_with_fit",addStrategy:N,category:v.Predictors,params:[{name:"number",type:"int",options:[5,10,20,30,40]},{name:"season",type:"int",options:[0,1,2,5,10]}],defaultParams:[10,2],renderer:S.D}),E({type:"bottom",addStrategy:w,category:v.Selectors,params:[{name:"count",type:"int"}],defaultParams:[3],renderer:S.D}),E({type:"first",addStrategy:w,category:v.Selectors,params:[],defaultParams:[],renderer:S.D}),E({type:"last",addStrategy:w,category:v.Selectors,params:[],defaultParams:[],renderer:S.D}),E({type:"max",addStrategy:w,category:v.Selectors,params:[],defaultParams:[],renderer:S.D}),E({type:"min",addStrategy:w,category:v.Selectors,params:[],defaultParams:[],renderer:S.D}),E({type:"percentile",addStrategy:w,category:v.Selectors,params:[{name:"nth",type:"int"}],defaultParams:[95],renderer:S.D}),E({type:"top",addStrategy:w,category:v.Selectors,params:[{name:"count",type:"int"}],defaultParams:[3],renderer:S.D}),E({type:"tag",category:X,params:[{name:"tag",type:"string",dynamicLookup:!0}],defaultParams:["tag"],renderer:pe}),E({type:"math",addStrategy:He,category:v.Math,params:[{name:"expr",type:"string"}],defaultParams:[" / 100"],renderer:S.C7}),E({type:"alias",addStrategy:Ke,category:v.Aliasing,params:[{name:"name",type:"string",quote:"double"}],defaultParams:["alias"],renderMode:"suffix",renderer:Ue});const M={create:fe,getCategories:()=>v,replaceAggregationAdd:w};class A{constructor(e,t,r){this.selectModels=[],this.target=e,this.templateSrv=t,this.scopedVars=r,e.policy=e.policy||"default",e.resultFormat=e.resultFormat||"time_series",e.orderByTime=e.orderByTime||"ASC",e.tags=e.tags||[],e.groupBy=e.groupBy||[{type:"time",params:["$__interval"]},{type:"fill",params:["null"]}],e.select=e.select||[[{type:"field",params:["value"]},{type:"mean",params:[]}]],this.updateProjection()}updateProjection(){this.selectModels=(0,f.map)(this.target.select,e=>(0,f.map)(e,M.create)),this.groupByParts=(0,f.map)(this.target.groupBy,M.create)}updatePersistedParts(){this.target.select=(0,f.map)(this.selectModels,e=>(0,f.map)(e,t=>({type:t.def.type,params:t.params})))}hasGroupByTime(){return(0,f.find)(this.target.groupBy,e=>e.type==="time")}hasFill(){return(0,f.find)(this.target.groupBy,e=>e.type==="fill")}addGroupBy(e){let t=e.match(/^(\w+)\((.*)\)$/);if(!t||!this.target.groupBy)return;const r=t[1],n=t[2],l=M.create({type:r,params:[n]}),i=this.target.groupBy.length;i===0?this.target.groupBy.push(l.part):r==="time"?this.target.groupBy.splice(0,0,l.part):r==="tag"?this.target.groupBy[i-1].type==="fill"?this.target.groupBy.splice(i-1,0,l.part):this.target.groupBy.push(l.part):this.target.groupBy.push(l.part),this.updateProjection()}removeGroupByPart(e,t){const r=M.getCategories();e.def.type==="time"&&(this.target.groupBy=(0,f.filter)(this.target.groupBy,n=>n.type!=="fill"),this.target.select=(0,f.map)(this.target.select,n=>(0,f.filter)(n,l=>{const i=M.create(l);return!(i.def.category===r.Aggregations||i.def.category===r.Selectors)}))),this.target.groupBy.splice(t,1),this.updateProjection()}removeSelect(e){this.target.select.splice(e,1),this.updateProjection()}removeSelectPart(e,t){if(t.def.type==="field"){if(this.selectModels.length>1){const r=(0,f.indexOf)(this.selectModels,e);this.selectModels.splice(r,1)}}else{const r=(0,f.indexOf)(e,t);e.splice(r,1)}this.updatePersistedParts()}addSelectPart(e,t){const r=M.create({type:t});r.def.addStrategy(e,r,this),this.updatePersistedParts()}renderTagCondition(e,t,r){let n="",l=e.operator,i=e.value;t>0&&(n=(e.condition||"AND")+" "),l||(/^\/.*\/$/.test(i)?l="=~":l="="),l!=="=~"&&l!=="!~"?(r&&(i=this.templateSrv.replace(i,this.scopedVars)),l!==">"&&l!=="<"&&(i="'"+i.replace(/\\/g,"\\\\").replace(/\'/g,"\\'")+"'")):r&&(i=this.templateSrv.replace(i,this.scopedVars,"regex"));let o=`"${e.key}"`;return e.key.endsWith("::tag")&&(o=`"${e.key.slice(0,-5)}"::tag`),e.key.endsWith("::field")&&(o=`"${e.key.slice(0,-7)}"::field`),n+o+" "+l+" "+i}getMeasurementAndPolicy(e){let t=this.target.policy,r=this.target.measurement||"measurement";return r.match("^/.*/$")?e&&(r=this.templateSrv.replace(r,this.scopedVars,"regex")):r='"'+r+'"',t!=="default"?t='"'+this.target.policy+'".':t="",t+r}interpolateQueryStr(e,t,r){return!t.multi&&!t.includeAll?e:typeof e=="string"?(0,Z.yI)(e):"("+(0,f.map)(e,Z.yI).join("|")+")"}render(e){const t=this.target;if(t.rawQuery)return e?this.templateSrv.replace(t.query,this.scopedVars,this.interpolateQueryStr):t.query;let r="SELECT ",n,l;for(n=0;n<this.selectModels.length;n++){const u=this.selectModels[n];let c="";for(l=0;l<u.length;l++)c=u[l].render(c);n>0&&(r+=", "),r+=c}r+=" FROM "+this.getMeasurementAndPolicy(e)+" WHERE ";const i=(0,f.map)(t.tags,(u,c)=>this.renderTagCondition(u,c,e));i.length>0&&(r+="("+i.join(" ")+") AND "),r+="$timeFilter";let o="";for(n=0;n<this.groupByParts.length;n++){const u=this.groupByParts[n];n>0&&(o+=u.def.type==="fill"?" ":", "),o+=u.render("")}return o.length&&(r+=" GROUP BY "+o),t.fill&&(r+=" fill("+t.fill+")"),t.orderByTime==="DESC"&&(r+=" ORDER BY time DESC"),t.limit&&(r+=" LIMIT "+t.limit),t.slimit&&(r+=" SLIMIT "+t.slimit),t.tz&&(r+=" tz('"+t.tz+"')"),r}renderAdhocFilters(e){return(0,f.map)(e,(r,n)=>this.renderTagCondition(r,n,!0)).join(" ")}}function ge(a){const e=(0,f.cloneDeep)(a);return new A(e).render(!1)}function Ye(a){if(a.policy!==void 0&&a.resultFormat!==void 0&&a.orderByTime!==void 0&&a.tags!==void 0&&a.groupBy!==void 0&&a.select!==void 0)return a;const e=(0,f.cloneDeep)(a);return new A(e).target}function Je(a,e,t){const r=(0,f.cloneDeep)(a),n=new A(r);return n.addSelectPart(n.selectModels[t],e),n.target}function Ze(a,e,t){const r=(0,f.cloneDeep)(a),n=new A(r),l=n.selectModels[t];return n.removeSelectPart(l,l[e]),n.target}function qe(a,e,t,r){const n=[...a.select??[]];return n[e]=[...n[e]],n[e][t]={...n[e][t],params:r},{...a,select:n}}function Xe(a,e){const t=(0,f.cloneDeep)(a),r=new A(t);return r.addGroupBy(e),r.target}function _e(a,e){const t=(0,f.cloneDeep)(a),r=new A(t);return r.removeGroupByPart(r.groupByParts[e],e),r.target}function et(a,e,t){const r=[...a.groupBy??[]];return r[e]={...r[e],params:t},{...a,groupBy:r}}var he=p(39317),L=p(94661),tt=p(11649),_=p(66670),at=p(95578),ee=p(66310);const rt=[{label:"Show buckets",description:"List the available buckets (table)",value:"buckets()"},{label:"Simple query",description:"filter by measurement and field",value:`from(bucket: "db/rp") |> range(start: v.timeRangeStart, stop:v.timeRangeStop) |> filter(fn: (r) => r._measurement == "example-measurement" and r._field == "example-field" )`},{label:"Grouped Query",description:"Group by (min/max/sum/median)",value:`// v.windowPeriod is a variable referring to the current optimized window period (currently: $interval) from(bucket: v.bucket) |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r["_measurement"] == "measurement1" or r["_measurement"] =~ /^.*?regex.*$/) |> filter(fn: (r) => r["_field"] == "field2" or r["_field"] =~ /^.*?regex.*$/) |> aggregateWindow(every: v.windowPeriod, fn: mean|median|max|count|derivative|sum) |> yield(name: "some-name")`},{label:"Filter by value",description:"Results between a min/max",value:`// v.bucket, v.timeRangeStart, and v.timeRange stop are all variables supported by the flux plugin and influxdb from(bucket: v.bucket) |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r["_value"] >= 10 and r["_value"] <= 20)`},{label:"Schema Exploration: (measurements)",description:"Get a list of measurement using flux",value:`import "influxdata/influxdb/v1" v1.measurements(bucket: v.bucket)`},{label:"Schema Exploration: (fields)",description:"Return every possible key in a single table",value:`from(bucket: v.bucket) |> range(start: v.timeRangeStart, stop:v.timeRangeStop) |> keys() |> keep(columns: ["_value"]) |> group() |> distinct()`},{label:"Schema Exploration: (tag keys)",description:"Get a list of tag keys using flux",value:`import "influxdata/influxdb/v1" v1.tagKeys(bucket: v.bucket)`},{label:"Schema Exploration: (tag values)",description:"Get a list of tag values using flux",value:`import "influxdata/influxdb/v1" v1.tagValues( bucket: v.bucket, tag: "host", predicate: (r) => true, start: -1d )`}];class nt extends s.PureComponent{constructor(){super(...arguments),this.onFluxQueryChange=e=>{this.props.onChange({...this.props.query,query:e}),this.props.onRunQuery()},this.onSampleChange=e=>{this.props.onChange({...this.props.query,query:e.value}),this.forceUpdate(),this.props.onRunQuery()},this.getSuggestions=()=>{const e=[{label:"v.timeRangeStart",kind:L.k.Property,detail:"The start time"},{label:"v.timeRangeStop",kind:L.k.Property,detail:"The stop time"},{label:"v.windowPeriod",kind:L.k.Property,detail:"based on max data points"},{label:"v.defaultBucket",kind:L.k.Property,detail:"bucket configured in the datsource"},{label:"v.organization",kind:L.k.Property,detail:"org configured for the datsource"}],t=(0,he.J)();return t.getVariables().forEach(r=>{const n="${"+r.name+"}";let l=t.replace(n);l===n&&(l=""),e.push({label:n,kind:L.k.Text,detail:`(Template Variable) ${l}`})}),e},this.editorDidMountCallbackHack=e=>{setTimeout(()=>e.layout(),100)}}render(){const{query:e,theme:t}=this.props,r=st(t),n=s.createElement("div",null,"Type: ",s.createElement("i",null,"ctrl+space")," to show template variable suggestions ",s.createElement("br",null),"Many queries can be copied from Chronograf");return s.createElement(s.Fragment,null,s.createElement(tt.p,{height:"100%",containerStyles:r.editorContainerStyles,language:"sql",value:e.query||"",onBlur:this.onFluxQueryChange,onSave:this.onFluxQueryChange,showMiniMap:!1,showLineNumbers:!0,getSuggestions:this.getSuggestions,onEditorDidMount:this.editorDidMountCallbackHack}),s.createElement("div",{className:(0,C.cx)("gf-form-inline",r.editorActions)},s.createElement(_.Qj,{icon:"external-link-alt",variant:"secondary",target:"blank",href:"https://docs.influxdata.com/influxdb/latest/query-data/get-started/"},"Flux language syntax"),s.createElement(at.X,{options:rt,value:"Sample query",onChange:this.onSampleChange,className:(0,C.css)` margin-top: -${t.spacing(.5)}; margin-left: ${t.spacing(.5)}; `}),s.createElement("div",{className:"gf-form gf-form--grow"},s.createElement("div",{className:"gf-form-label gf-form-label--grow"})),s.createElement(b.c,{width:5,tooltip:n},"Help")))}}const st=a=>({editorContainerStyles:(0,C.css)` height: 200px; max-width: 100%; resize: vertical; overflow: auto; background-color: ${a.isDark?a.colors.background.canvas:a.colors.background.primary}; padding-bottom: ${a.spacing(1)}; `,editorActions:(0,C.css)` margin-top: 6px; `}),te=(0,ee.HE)(nt);var lt=p(3613);const it=({isRaw:a,onChange:e})=>{const[t,r]=(0,s.useState)(!1);return(0,s.useEffect)(()=>{r(!1)},[a]),a?s.createElement(s.Fragment,null,s.createElement(_.zx,{"aria-label":"Switch to visual editor",icon:"pen",variant:"secondary",type:"button",onClick:()=>{r(!0)}}),s.createElement(lt.s,{isOpen:t,title:"Switch to visual editor mode",body:"Are you sure to switch to visual editor mode? You will lose the changes done in raw query mode.",confirmText:"Yes, switch to editor mode",dismissText:"No, stay in raw query mode",onConfirm:()=>{e(!1)},onDismiss:()=>{r(!1)}})):s.createElement(_.zx,{"aria-label":"Switch to text editor",icon:"pen",variant:"secondary",type:"button",onClick:()=>{e(!0)}})};var ye=p(60105),ot=p(64022),R=p(1128);const ve=[{label:"Time series",value:"time_series"},{label:"Table",value:"table"},{label:"Logs",value:"logs"}],Ee="time_series";var ut=p(24077);function K(a){const[e,t]=(0,s.useState)(a),r=(0,ut.Z)(a);return(0,s.useEffect)(()=>{r!==a&&e!==a&&t(a)},[a,e,r]),[e,t]}const ct=({query:a,onChange:e,onRunQuery:t})=>{const[r,n]=K(a.query),[l,i]=K(a.alias),o=(0,s.useId)(),u=(0,s.useId)(),c=a.resultFormat??Ee,d=()=>{e({...a,query:r,alias:l,resultFormat:c}),t()};return s.createElement("div",null,s.createElement(ye.K,{"aria-label":"query",rows:3,spellCheck:!1,placeholder:"InfluxDB Query",onBlur:d,onChange:m=>{n(m.currentTarget.value)},value:r??""}),s.createElement(ot.Lh,null,s.createElement(b.c,{htmlFor:u},"Format as"),s.createElement(Q.Ph,{inputId:u,onChange:m=>{e({...a,resultFormat:m.value}),t()},value:c,options:ve}),s.createElement(b.c,{htmlFor:o},"Alias by"),s.createElement(R.I,{id:o,type:"text",spellCheck:!1,placeholder:"Naming pattern",onBlur:d,onChange:m=>{i(m.currentTarget.value)},value:l??""})))};var $=p(44541),V=p(53901);const ae=a=>{let e="",{type:t,templateService:r,scopedVars:n,database:l,measurement:i,retentionPolicy:o,tags:u,withKey:c,withMeasurementFilter:d}=a;switch(t){case"RETENTION_POLICIES":return'SHOW RETENTION POLICIES on "'+l+'"';case"FIELDS":return!i||i===""?"SHOW FIELD KEYS":(i&&!i.match(/^\/.*\/|^$/)&&(i='"'+i+'"',o&&o!=="default"&&(o='"'+o+'"',i=o+"."+i)),"SHOW FIELD KEYS FROM "+i);case"TAG_KEYS":e="SHOW TAG KEYS";break;case"TAG_VALUES":e="SHOW TAG VALUES";break;case"MEASUREMENTS":e="SHOW MEASUREMENTS",d&&(e+=" WITH MEASUREMENT =~ /(?i)"+(0,Z.yI)(d)+"/");break;default:return e}if(i&&(!i.match("^/.*/")&&!i.match(/^merge\(.*\)/)&&(i='"'+i+'"'),o&&o!=="default"&&(o='"'+o+'"',i=o+"."+i),i!==""&&(e+=" FROM "+i)),c){let m=c;m.endsWith("::tag")&&(m=m.slice(0,-5)),e+=' WITH KEY = "'+m+'"'}if(u&&u.length>0){const m=(0,f.reduce)(u,(h,g)=>(g.key&&g.key===c||g.operator===">"||g.operator==="<"||h.push(mt(g,h.length,r,n,!0)),h),[]);m.length>0&&(e+=" WHERE "+m.join(" "))}return t==="MEASUREMENTS"&&(e+=" LIMIT 100"),e};function mt(a,e,t,r,n){let l="",i=a.operator,o=a.value;e>0&&(l=(a.condition||"AND")+" "),i||(/^\/.*\/$/.test(a.value)?i="=~":i="="),(o===""||i!=="=~"&&i!=="!~")&&(o="'"+o.replace(/\\/g,"\\\\").replace(/\'/g,"\\'")+"'"),i!=="=~"&&i!=="!~"?n?o=t.replace(o,r):i!==">"&&i!=="<"&&(o="'"+o.replace(/\\/g,"\\\\").replace(/\'/g,"\\'")+"'"):n&&(o=t.replace(o,r,"regex"));let u=`"${a.key}"`;return a.key.endsWith("::tag")&&(u=`"${a.key.slice(0,-5)}"::tag`),a.key.endsWith("::field")&&(u=`"${a.key.slice(0,-7)}"::field`),l+u+" "+i+" "+o}const W=async a=>{const{type:e,datasource:t,scopedVars:r,measurement:n,retentionPolicy:l,tags:i,withKey:o,withMeasurementFilter:u}=a,c=ae({type:e,scopedVars:r,measurement:n,retentionPolicy:l,tags:i,withKey:o,withMeasurementFilter:u,templateService:t.templateSrv,database:t.database}),d=l?t.templateSrv.replace(l,{},"regex"):"",m={query:c,policy:d,rawQuery:!0,refId:"metadataQuery"};if(J.default.featureToggles.influxdbBackendMigration)return t.runMetadataQuery(m);{const h={policy:m.policy};return t.metricFindQuery(c,h)}};async function dt(a){return(await W({type:"RETENTION_POLICIES",datasource:a})).map(t=>t.text)}async function ft(a,e,t){return(await W({type:"MEASUREMENTS",datasource:a,tags:e,withMeasurementFilter:t})).map(n=>n.text)}async function pt(a,e,t,r){return(await W({type:"TAG_KEYS",datasource:a,measurement:t,retentionPolicy:r})).map(l=>l.text)}async function gt(a,e,t,r,n){return t.endsWith("::field")?[]:(await W({type:"TAG_VALUES",withKey:t,datasource:a,measurement:r,retentionPolicy:n})).map(i=>i.text)}async function Se(a,e,t){return(await W({type:"FIELDS",datasource:a,measurement:e,retentionPolicy:t})).map(n=>n.text)}function xe(a,e){return a.filter(t=>t.key.endsWith("::tag")||e.has(t.key+"::tag"))}function P(a){return{label:a,value:a}}function G(a){if(a==null)throw new Error("value must not be nullish");return a}function ht(){const a=M.getCategories(),e=[];return Object.keys(a).forEach(r=>{const n=a[r].map(l=>P(l.type));e.push({label:r,options:n})}),e}async function yt(a,e){const t=await e(),r={...a},n=new A(r),l=[];return n.hasFill()||l.push(P("fill(null)")),n.hasGroupByTime()||l.push(P("time($interval)")),t.forEach(i=>{l.push(P(`tag(${i})`))}),l}function vt(a,e){const t=M.create(a).def,r=(a.params??[]).map(n=>n.toString());if(r.length!==t.params.length)throw new Error("Invalid query-segment");return r.map((n,l)=>{const i=t.params[l];return i.dynamicLookup?{value:n,options:G(e.get(`${t.type}_${l}`))}:i.options!=null?{value:n,options:()=>Promise.resolve(i.options)}:{value:n,options:null}})}function Ce(a,e){return a.map(t=>({name:t.type,params:vt(t,e)}))}function Et(a){return(0,he.J)().getVariables().map(a)}function re(a,e,t){let r=Et(e);return t&&(r=r.filter(n=>n.indexOf(t)>-1)),a.then(n=>[...r,...n])}function be(a){return`/^$${a.name}$/`}function St(a){return`$${a.name}`}const ne=(0,C.css)({paddingRight:"4px"}),xt=(0,C.cx)("width-8",ne),Ct=({format:a,inputId:e,onChange:t})=>s.createElement(Q.Ph,{inputId:e,className:xt,onChange:r=>{t(G(r.value))},value:a,options:ve});var bt=p(56027),wt=p.n(bt),Tt=p(26811);const we=(0,C.css)({minWidth:"160px"}),Te=a=>a,Pt=({loadOptions:a,allowCustomValue:e,onChange:t,onClose:r})=>{const n=wt()(a,1e3,{leading:!0});return s.createElement("div",{className:we},s.createElement(Q.qb,{formatCreateLabel:Te,defaultOptions:!0,autoFocus:!0,isOpen:!0,onCloseMenu:r,allowCustomValue:e,loadOptions:n,onChange:t,createOptionPosition:"first"}))},Ft=({loadOptions:a,allowCustomValue:e,onChange:t,onClose:r})=>{const[n,l]=(0,Tt.Z)(a,[a]);return(0,s.useEffect)(()=>{l("")},[l,a]),s.createElement("div",{className:we},s.createElement(Q.Ph,{isLoading:n.loading,formatCreateLabel:Te,autoFocus:!0,isOpen:!n.loading,onCloseMenu:r,allowCustomValue:e,options:n.value??[],onChange:t,createOptionPosition:"first"}))},It=({loadOptions:a,filterByLoadOptions:e,allowCustomValue:t,onChange:r,onClose:n})=>e?s.createElement(Pt,{loadOptions:a,allowCustomValue:t,onChange:r,onClose:n}):s.createElement(Ft,{loadOptions:a,allowCustomValue:t,onChange:r,onClose:n}),Nt=({initialValue:a,onChange:e,onClose:t})=>{const[r,n]=K(a);return s.createElement(R.I,{autoFocus:!0,type:"text",spellCheck:!1,onBlur:t,onKeyDown:l=>{l.key==="Enter"&&e(r)},onChange:l=>{n(l.currentTarget.value)},value:r})},At=(0,C.css)({width:"auto",cursor:"pointer"}),B=({value:a,buttonClassName:e,loadOptions:t,filterByLoadOptions:r,allowCustomValue:n,onChange:l})=>{const[i,o]=(0,s.useState)(!1);if(i)return t!==void 0?s.createElement(It,{loadOptions:t,filterByLoadOptions:r??!1,allowCustomValue:n,onChange:u=>{o(!1),l(u)},onClose:()=>{o(!1)}}):s.createElement(Nt,{initialValue:a,onClose:()=>{o(!1)},onChange:u=>{o(!1),l({value:u,label:u})}});{const u=(0,C.cx)(At,e);return s.createElement(V.W,{as:"button",className:u,onClick:()=>{o(!0)}},a)}},Dt=({policy:a,measurement:e,onChange:t,getPolicyOptions:r,getMeasurementOptions:n})=>{const l=async()=>{const o=await r();return(o.some(c=>c==="default")?o:[ce,...o]).map(P)},i=async o=>(await n(o)).map(P);return s.createElement(s.Fragment,null,s.createElement(B,{allowCustomValue:!0,value:a??"using default policy",loadOptions:l,onChange:o=>{t(o.value,e)}}),s.createElement(B,{allowCustomValue:!0,value:e??"select measurement",loadOptions:i,filterByLoadOptions:!0,onChange:o=>{t(a,o.value)}}))},j=({value:a,onChange:e,isWide:t,placeholder:r})=>{const[n,l]=K(a),i=()=>{e(n===""?void 0:n)};return s.createElement(s.Fragment,null,s.createElement(R.I,{placeholder:r,className:(0,C.cx)(t??!1?"width-14":"width-8",ne),type:"text",spellCheck:!1,onBlur:i,onChange:o=>{l(o.currentTarget.value)},value:n??""}))},Ot=[{label:"ascending",value:"ASC"},{label:"descending",value:"DESC"}],Mt=(0,C.cx)("width-9",ne),Rt=({value:a,onChange:e,inputId:t})=>s.createElement(s.Fragment,null,s.createElement(Q.Ph,{inputId:t,className:Mt,onChange:r=>{e(G(r.value))},value:a,options:Ot}));var Bt=p(66711),Qt=p(79655),kt=p(78383);const Pe=({loadOptions:a,allowCustomValue:e,onAdd:t})=>s.createElement(B,{value:"+",loadOptions:a,allowCustomValue:e,onChange:r=>{t(G(r.value))}}),Lt=a=>s.createElement(Bt.k,{label:""},s.createElement(Qt.s,{label:"remove",onClick:a})),$t=(0,C.css)({paddingRight:"0",marginRight:"0"}),Vt=({name:a,onRemove:e})=>s.createElement(kt.z,{renderMenuItems:()=>Lt(e)},({openMenu:t})=>s.createElement("button",{className:(0,C.cx)("gf-form-label",$t),onClick:t},a)),Wt=(0,C.css)({paddingLeft:"0",paddingRight:"0",marginLeft:"0",marginRight:"0"}),Gt=a=>(0,C.cx)("gf-form-label",(0,C.css)({paddingLeft:"0",lineHeight:a.typography.body.lineHeight,fontSize:a.typography.body.fontSize})),zt=({name:a,params:e,onChange:t,onRemove:r})=>{const n=(0,ee.l4)(),l=(0,s.useMemo)(()=>Gt(n),[n]),i=(o,u)=>{const c=e.map(d=>d.value);c[u]=o,t(c)};return s.createElement("div",{className:l},s.createElement(Vt,{name:a,onRemove:r}),"(",e.map((o,u)=>{const{value:c,options:d}=o,m=u===e.length-1,h=d!==null?()=>d().then(g=>g.map(P)):void 0;return s.createElement(s.Fragment,{key:u},s.createElement(B,{allowCustomValue:!0,value:c,buttonClassName:Wt,loadOptions:h,onChange:g=>{i(G(g.value),u)}}),!m&&",")}),")")},Fe=({parts:a,getNewPartOptions:e,onAddNewPart:t,onRemovePart:r,onChange:n})=>s.createElement(s.Fragment,null,a.map((l,i)=>s.createElement(zt,{key:i,name:l.name,params:l.params,onRemove:()=>{r(i)},onChange:o=>{n(i,o)}})),s.createElement(Pe,{loadOptions:e,onAdd:t}));function Ie(a){return/^\/.*\/$/.test(a)}function Ne(a){return a.operator??(Ie(a.value)?"=~":"=")}function Ae(a,e){return e?void 0:a.condition??"AND"}function Ut(a,e){const t=a==="=~"||a==="!~";return Ie(e)?t?a:"=~":t?"=":a}const Ht=["=","!=","<>","<",">","=~","!~"],Kt=["AND","OR"],jt=Ht.map(P),Yt=Kt.map(P),Jt=()=>Promise.resolve(Yt),Zt=()=>Promise.resolve(jt),qt=({tag:a,isFirst:e,onRemove:t,onChange:r,getTagKeyOptions:n,getTagValueOptions:l})=>{const i=Ne(a),o=Ae(a,e),u=()=>n().catch(d=>(console.error(d),[])).then(d=>[{label:"-- remove filter --",value:void 0},...d.map(P)]),c=()=>l(a.key).then(d=>d.map(P));return s.createElement("div",{className:"gf-form"},o!=null&&s.createElement(B,{value:o,loadOptions:Jt,onChange:d=>{r({...a,condition:d.value})}}),s.createElement(B,{allowCustomValue:!0,value:a.key,loadOptions:u,onChange:d=>{const{value:m}=d;m===void 0?t():r({...a,key:m??""})}}),s.createElement(B,{value:i,loadOptions:Zt,onChange:d=>{r({...a,operator:d.value})}}),s.createElement(B,{allowCustomValue:!0,value:a.value,loadOptions:c,onChange:d=>{const m=d.value??"";r({...a,value:m,operator:Ut(i,m)})}}))},Xt=({tags:a,onChange:e,getTagKeyOptions:t,getTagValueOptions:r})=>{const n=(u,c)=>{const d=a.map((m,h)=>c===h?u:m);e(d)},l=u=>{const c=a.filter((d,m)=>m!==u);e(c)},i=()=>t().then(u=>u.map(P)),o=(u,c)=>{const d={key:u,value:"select tag value"},m={key:d.key,value:d.value,operator:Ne(d),condition:Ae(d,c)};e([...a,m])};return s.createElement(s.Fragment,null,a.map((u,c)=>s.createElement(qt,{tag:u,isFirst:c===0,key:c,onChange:d=>{n(d,c)},onRemove:()=>{l(c)},getTagKeyOptions:t,getTagValueOptions:r})),s.createElement(Pe,{allowCustomValue:!0,loadOptions:i,onAdd:u=>{o(u,a.length===0)}}))},_t=a=>{const e=(0,s.useId)(),t=`influxdb-qe-format-as-${e}`,r=`influxdb-qe-order-by${e}`,n=(0,ee.wW)(ea),l=Ye(a.query),{datasource:i}=a,{measurement:o,policy:u}=l,c=(0,s.useMemo)(async()=>{const y=(await pt(i,[],o,u)).map(T=>`${T}::tag`),x=(await Se(i,o||"",u)).map(T=>`${T}::field`);return new Set([...y,...x])},[o,u,i]),d=(0,s.useMemo)(()=>{const y=new Map([["field_0",()=>o!==void 0?Se(i,o,u):Promise.resolve([])]]);return(l.select??[]).map(x=>Ce(x,y))},[o,u,l.select,i]),m=(0,s.useMemo)(()=>async()=>[...await c],[c]),h=(0,s.useMemo)(()=>{const y=new Map([["tag_0",m]]);return Ce(l.groupBy??[],y)},[m,l.groupBy]),g=y=>{a.onChange(y),a.onRunQuery()},F=(y,x)=>{g({...l,policy:y,measurement:x})},U=y=>{g({...l,tags:y.length===0?void 0:y})};return s.createElement("div",null,s.createElement($.f,{label:"FROM",fill:!0},s.createElement(Dt,{policy:u,measurement:o,getPolicyOptions:()=>re(dt(i),St),getMeasurementOptions:y=>re(c.then(x=>ft(i,xe(l.tags??[],x),y===""?void 0:y)),be,y),onChange:F}),s.createElement(V.W,{width:"auto",className:n.inlineLabel},"WHERE"),s.createElement(Xt,{tags:l.tags??[],onChange:U,getTagKeyOptions:m,getTagValueOptions:y=>re(c.then(x=>gt(i,xe(l.tags??[],x),y)),be)})),d.map((y,x)=>s.createElement($.f,{key:x,label:x===0?"SELECT":"",fill:!0},s.createElement(Fe,{parts:y,getNewPartOptions:()=>Promise.resolve(ht()),onChange:(T,Ta)=>{const Pa=qe(l,x,T,Ta);g(Pa)},onAddNewPart:T=>{g(Je(l,T,x))},onRemovePart:T=>{g(Ze(l,T,x))}}))),s.createElement($.f,{label:"GROUP BY",fill:!0},s.createElement(Fe,{parts:h,getNewPartOptions:()=>yt(l,m),onChange:(y,x)=>{const T=et(l,y,x);g(T)},onAddNewPart:y=>{g(Xe(l,y))},onRemovePart:y=>{g(_e(l,y))}})),s.createElement($.f,{label:"TIMEZONE",fill:!0},s.createElement(j,{placeholder:"(optional)",value:l.tz,onChange:y=>{g({...l,tz:y})}}),s.createElement(V.W,{htmlFor:r,width:"auto",className:n.inlineLabel},"ORDER BY TIME"),s.createElement(Rt,{inputId:r,value:l.orderByTime==="DESC"?"DESC":"ASC",onChange:y=>{g({...l,orderByTime:y})}})),s.createElement($.f,{label:"LIMIT",fill:!0},s.createElement(j,{placeholder:"(optional)",value:l.limit?.toString(),onChange:y=>{g({...l,limit:y})}}),s.createElement(V.W,{width:"auto",className:n.inlineLabel},"SLIMIT"),s.createElement(j,{placeholder:"(optional)",value:l.slimit?.toString(),onChange:y=>{g({...l,slimit:y})}})),s.createElement($.f,{htmlFor:t,label:"FORMAT AS",fill:!0},s.createElement(Ct,{inputId:t,format:l.resultFormat??Ee,onChange:y=>{g({...l,resultFormat:y})}}),l.resultFormat!=="table"&&s.createElement(s.Fragment,null,s.createElement(V.W,{width:"auto",className:n.inlineLabel},"ALIAS"),s.createElement(j,{isWide:!0,placeholder:"Naming pattern",value:l.alias,onChange:y=>{g({...l,alias:y})}}))))};function ea(a){return{inlineLabel:(0,C.css)` color: ${a.colors.primary.text}; `}}const ta=({query:a,onChange:e,onRunQuery:t,datasource:r})=>r.isFlux?s.createElement("div",{className:"gf-form-query-content"},s.createElement(te,{query:a,onChange:e,onRunQuery:t,datasource:r})):s.createElement("div",{className:(0,C.css)({display:"flex"})},s.createElement("div",{className:(0,C.css)({flexGrow:1})},a.rawQuery?s.createElement(ct,{query:a,onChange:e,onRunQuery:t}):s.createElement(_t,{query:a,onChange:e,onRunQuery:t,datasource:r})),s.createElement(it,{isRaw:a.rawQuery??!1,onChange:n=>{e({...a,query:ge(a),rawQuery:n}),t()}})),aa=[{title:"Getting started",label:"Start by selecting a measurement and field from the dropdown above. You can then use the tag selector to further narrow your search."}],ra=()=>s.createElement("div",null,s.createElement("h2",null,"InfluxDB Cheat Sheet"),aa.map(a=>s.createElement("div",{className:"cheat-sheet-item",key:a.title},s.createElement("div",{className:"cheat-sheet-item__title"},a.title),s.createElement("div",{className:"cheat-sheet-item__label"},a.label))));function na(){return s.createElement(ra,null)}class sa extends s.PureComponent{constructor(){super(...arguments),this.onRefresh=()=>{}}render(){let{query:e,datasource:t,onChange:r}=this.props;return t.isFlux?s.createElement(te,{datasource:t,query:{refId:"A",query:e},onRunQuery:this.onRefresh,onChange:n=>r(n.query)}):s.createElement("div",{className:"gf-form-inline"},s.createElement(b.c,{width:10},"Query"),s.createElement("div",{className:"gf-form-inline gf-form--grow"},s.createElement(ye.K,{defaultValue:e||"",placeholder:"metric name or tags query",rows:1,className:"gf-form-input",onBlur:n=>r(n.currentTarget.value)})))}}var De=p(91826),la=p(48592),ia=p(6857),z=p(78209),se=p(45383),Y=p(39343),oa=p(56469),ua=p(32053),ca=p(1726),D=p(29241),ma=p(42751),le=p(35306),Oe=p(73289),da=p(99386);const fa=a=>{const{query:e,onChange:t}=a,[r,n]=(0,s.useState)(e.query??""),[l,i]=(0,s.useState)(e.textColumn??""),[o,u]=(0,s.useState)(e.tagsColumn??""),[c,d]=(0,s.useState)(e?.timeEndColumn??""),[m]=(0,s.useState)(e?.titleColumn??""),h=(g,F)=>{t({...e,[g]:F,rawQuery:!0,fromAnnotations:!0,textEditor:!0})};return s.createElement("div",{className:"gf-form-group"},s.createElement("div",{className:"gf-form"},s.createElement(b.c,{width:12},"InfluxQL Query"),s.createElement(R.I,{value:r,onChange:g=>n(g.currentTarget.value??""),onBlur:()=>h("query",r),placeholder:"select text from events where $timeFilter limit 1000"})),s.createElement(b.c,{width:12,tooltip:s.createElement("div",null,"If your influxdb query returns more than one field you need to specify the column names below. An annotation event is composed of a title, tags, and an additional text field. Optionally you can map the timeEnd column for region annotation usage.")},"Field mappings"),s.createElement("div",{className:"gf-form-group"},s.createElement("div",{className:"gf-form-inline"},s.createElement("div",{className:"gf-form"},s.createElement(b.c,{width:12},"Text"),s.createElement(R.I,{value:l,onChange:g=>i(g.currentTarget.value??""),onBlur:()=>h("textColumn",l)})),s.createElement("div",{className:"gf-form"},s.createElement(b.c,{width:12},"Tags"),s.createElement(R.I,{value:o,onChange:g=>u(g.currentTarget.value??""),onBlur:()=>h("tagsColumn",o)})),s.createElement("div",{className:"gf-form"},s.createElement(b.c,{width:12},"TimeEnd"),s.createElement(R.I,{value:c,onChange:g=>d(g.currentTarget.value??""),onBlur:()=>h("timeEndColumn",c)})),s.createElement("div",{className:"gf-form ng-hide"},s.createElement(b.c,{width:12},"Title"),s.createElement(R.I,{defaultValue:m})))))};var Me=p(28291);class Re{constructor(e){this.series=e.series,this.alias=e.alias,this.annotation=e.annotation,this.meta=e.meta,this.refId=e.refId}getTimeSeries(){const e=[];let t,r;return this.series.length===0||(0,f.each)(this.series,n=>{const l=n.columns.length,i=(0,f.map)(n.tags,(o,u)=>u+": "+o);for(r=1;r<l;r++){let o=n.name;const u=n.columns[r];u!=="value"&&(o=o+"."+u),this.alias?o=this._getSeriesName(n,r):n.tags&&(o=o+" {"+i.join(", ")+"}");const c=[];if(n.values)for(t=0;t<n.values.length;t++)c[t]=[n.values[t][r],n.values[t][0]];e.push({title:o,target:o,datapoints:c,tags:n.tags,meta:this.meta,refId:this.refId})}}),e}_getSeriesName(e,t){const r=/\$(\w+)|\[\[([\s\S]+?)\]\]/g,n=e.name.split(".");return this.alias.replace(r,(l,i,o)=>{const u=i||o,c=parseInt(u,10);if(u==="m"||u==="measurement")return e.name;if(u==="col")return e.columns[t];if(!isNaN(c))return n[c]??l;if(u.indexOf("tag_")!==0)return l;const d=u.replace("tag_","");return e.tags?e.tags[d]:l})}getAnnotations(){const e=[];return(0,f.each)(this.series,t=>{let r=null,n=null,l=null;const i=[];let o=null;(0,f.each)(t.columns,(u,c)=>{if(u==="time"){n=c;return}if(u!=="sequence_number"){if(u===this.annotation.titleColumn){r=c;return}if((0,f.includes)((this.annotation.tagsColumn||"").replace(" ","").split(","),u)){i.push(c);return}if(u===this.annotation.textColumn){o=c;return}if(u===this.annotation.timeEndColumn){l=c;return}!r&&o!==c&&(r=c)}}),(0,f.each)(t.values,u=>{const c={annotation:this.annotation,time:+new Date(u[n]),title:u[r],timeEnd:u[l],tags:(0,f.flatten)(i.filter(d=>u[d]).map(d=>u[d].split(","))),text:u[o]};e.push(c)})}),e}getTable(){const e=new Me.Z;let t,r;return e.refId=this.refId,e.meta=this.meta,this.series.length===0||(0,f.each)(this.series,(n,l)=>{if(l===0){const i=n.columns[0],o=i==="time"?{text:"Time",type:D.fS.time}:{text:i};for(e.columns.push(o),(0,f.each)((0,f.keys)(n.tags),u=>{e.columns.push({text:u})}),r=1;r<n.columns.length;r++)e.columns.push({text:n.columns[r]})}if(n.values)for(t=0;t<n.values.length;t++){const i=n.values[t],o=[i[0]];if(n.tags)for(const u in n.tags)n.tags.hasOwnProperty(u)&&o.push(n.tags[u]);for(r=1;r<i.length;r++)o.push(i[r]);e.rows.push(o)}}),e}}const pa=a=>{const e={refId:"",query:a.query??"",queryType:"tags",fromAnnotations:!0,tagsColumn:a.tagsColumn??"",textColumn:a.textColumn??"",timeEndColumn:a.timeEndColumn??"",titleColumn:a.titleColumn??"",name:a.name??""};return a.target&&a.target.limit&&(e.limit=a.target.limit),a.target&&a.target.matchAny&&(e.matchAny=a.target.matchAny),a.target&&a.target.tags&&(e.tags=a.target.tags),a.target&&a.target.type&&(e.type=a.target.type),e},ga=a=>(a.target=a.target&&!a.target?.query?pa(a):a.target,a);class ha{parse(e,t){if(!t?.results||t.results.length===0)return[];const r=t.results[0];if(!r.series)return[];const n=e.toLowerCase(),l=n.indexOf("show retention policies")>=0,i=n.indexOf("show field keys")>=0||l,o=new Set;return(0,f.each)(r.series,u=>{(0,f.each)(u.values,c=>{(0,f.isArray)(c)?i?o.add(c[0].toString()):c[1]!==void 0?o.add(c[1].toString()):o.add(c[0].toString()):o.add(c.toString())})}),Array.from(o).map(u=>({text:u}))}getTable(e,t,r){let n=new Me.Z;if(e.length>0)if(n.meta={...r,executedQueryString:e[0].meta?.executedQueryString},n.refId=t.refId,n=va(e,n,t),e[0].fields[1]&&e[0].fields[1].labels){let l=(0,f.groupBy)(e,u=>u.fields[1].labels?Object.values(u.fields[1].labels):null);const i=Object.keys(l),o=Object.values(l);for(let u=0;u<o.length;u++)n=Be(o[u],n,[...i[u].split(",")])}else n=Be(e,n,[]);return n}async transformAnnotationResponse(e,t,r){const n=(0,le.z1)(t,[r]);if(!n)return[];const l=this.getTable(n.data,r,{}),i=[];let o=0,u=0,c=0,d=0;const m=[];return(0,f.each)(l.columns,(h,g)=>{if(h.text.toLowerCase()==="time"){u=g;return}if(h.text===e.titleColumn){o=g;return}if(ya(h.text,e.tagsColumn)){m.push(g);return}if(e.textColumn&&h.text.includes(e.textColumn)){d=g;return}if(h.text===e.timeEndColumn){c=g;return}!o&&d!==g&&(o=g)}),(0,f.each)(l.rows,h=>{const g={annotation:e,time:+new Date(h[u]),title:h[o],timeEnd:h[c],tags:(0,f.flatten)(m.filter(F=>h[F]).map(F=>h[F].split(","))),text:h[d]};i.push(g)}),i}}function ya(a,e){const t=(e||"").replace(" ","").split(",");for(const r of t)if(r!==""&&a.includes(r))return!0;return!1}function va(a,e,t){const r=Ea(t);a[0].fields.forEach(n=>{n.name.toLowerCase()==="time"?e.columns.push({text:"Time",type:D.fS.time}):n.name.toLowerCase()==="value"&&n.labels&&Object.keys(n.labels).forEach(l=>{e.columns.push({text:l})})}),a[0].refId==="metricFindQuery"&&a.forEach(n=>{n.name&&e.columns.push({text:n.name})});for(let n=0;n<r.length;n++)e.columns.push({text:r[n]});return t.rawQuery&&r.length===0&&Sa(t.query,a)&&a[0].refId!=="metricFindQuery"&&a.map(n=>{n.name&&e.columns.push({text:n.name})}),e}function Be(a,e,t){const r=a[0].fields[0].values;for(let n=0;n<r.length;n++){const l=r[n],i=a.map(o=>o.fields[1]?o.fields[1].values[n]:null);i.indexOf(null)<0&&e.rows.push([l,...t,...i])}return e}function Ea(a){let e=[];a.select?.forEach(r=>{const n=r.filter(l=>l.type!=="field");if(n.length>0){const l=n.find(i=>i.type==="alias");l?e.push(l.params?.[0].toString()??""):e.push(n[0].type)}else r[0]&&r[0].params&&r[0].params[0]&&e.push(r[0].params[0].toString())});let t=[];return e.forEach(r=>{t.push(Qe(r,r,t,0))}),t}function Qe(a,e,t,r){return t.indexOf(e)>-1?(r++,Qe(a,a+"_"+r,t,r)):e}function Sa(a,e){const r=e.map(i=>i.name).every(i=>i&&a?i.split(".").every(u=>a.toLowerCase().includes(u.toLowerCase())):!1),l=["*","SHOW"].some(i=>a?a.toLowerCase().includes(i.toLowerCase()):!1);return r||l}class xa extends ma.CK{constructor(e,t=(0,da.J)()){super(e),this.templateSrv=t,this.type="influxdb",this.urls=(e.url??"").split(",").map(n=>n.trim()),this.username=e.username??"",this.password=e.password??"",this.name=e.name,this.basicAuth=e.basicAuth,this.withCredentials=e.withCredentials,this.access=e.access;const r=e.jsonData??{};this.database=r.dbName??e.database,this.interval=r.timeInterval,this.httpMode=r.httpMode||"GET",this.responseParser=new ha,this.isFlux=r.version===O.Flux,this.isProxyAccess=e.access==="proxy",this.isFlux?this.annotations={QueryEditor:te}:this.annotations={QueryEditor:fa,prepareAnnotation:ga}}query(e){if(!this.isProxyAccess){const t=new Error(ue);return(0,De._)(()=>t)}return this._query(e)}_query(e){const t={...e,targets:e.targets.filter(r=>r.hide!==!0)};if(t.targets.some(r=>r.fromAnnotations)){const r=[];for(const n of t.targets)n.query&&r.push(new la.y(l=>{this.annotationEvents(t,n).then(i=>l.next({data:[(0,ua.g0)(i)]})).catch(i=>l.error(new Error(i))).finally(()=>l.complete())}));return(0,ia.T)(...r)}return this.isFlux?super.query(t):this.isMigrationToggleOnAndIsAccessProxy()?super.query(t).pipe((0,Y.U)(r=>{if(r.error)throw{message:"InfluxDB Error: "+r.error.message,res:r};const n=(0,f.groupBy)(r.data,i=>i.refId);if(Object.keys(n).length===0)return{data:[]};const l=[];return t.targets.forEach(i=>{const o=n[i.refId]??[];switch(i.resultFormat){case"logs":case"table":l.push(this.responseParser.getTable(o,i,{preferredVisualisationType:i.resultFormat}));break;default:{for(let u=0;u<o.length;u++)l.push(o[u]);break}}}),{data:l}})):this.classicQuery(e)}getQueryDisplayText(e){return this.isFlux?e.query:new A(e).render(!1)}filterQuery(e){return this.isFlux?!!e.query:!0}applyTemplateVariables(e,t){const{__interval:r,__interval_ms:n,...l}=t||{};if(this.isFlux)return{...e,query:this.templateSrv.replace(e.query??"",l)};if(this.isMigrationToggleOnAndIsAccessProxy()&&(e=this.applyVariables(e,t,l),e.adhocFilters?.length)){const i=(e.adhocFilters??[]).map(o=>{const{condition:u,...c}=o;return c});e.tags=[...e.tags??[],...i]}return e}targetContainsTemplate(e){const t=this.isFlux?e.query:ge(e);return this.templateSrv.containsTemplate(t)}interpolateVariablesInQueries(e,t){return!e||e.length===0?[]:e.map(r=>this.isFlux?{...r,datasource:this.getRef(),query:this.templateSrv.replace(r.query??"",t,"regex")}:{...r,datasource:this.getRef(),...this.applyVariables(r,t,t)})}applyVariables(e,t,r){const n={...e};return e.groupBy&&(n.groupBy=e.groupBy.map(l=>({...l,params:l.params?.map(i=>this.templateSrv.replace(i.toString(),void 0,"regex"))}))),e.select&&(n.select=e.select.map(l=>l.map(i=>({...i,params:i.params?.map(o=>this.templateSrv.replace(o.toString(),void 0,"regex"))})))),e.tags&&(n.tags=e.tags.map(l=>({...l,value:this.templateSrv.replace(l.value,t,"regex")}))),{...n,adhocFilters:this.templateSrv.getAdhocFilters(this.name)??[],query:this.templateSrv.replace(e.query??"",r,"regex"),alias:this.templateSrv.replace(e.alias??"",t),limit:this.templateSrv.replace(e.limit?.toString()??"",t,"regex"),measurement:this.templateSrv.replace(e.measurement??"",t,"regex"),policy:this.templateSrv.replace(e.policy??"",t,"regex"),slimit:this.templateSrv.replace(e.slimit?.toString()??"",t,"regex"),tz:this.templateSrv.replace(e.tz??"",t)}}async runMetadataQuery(e){return(0,z.n)(super.query({targets:[e]})).then(t=>t.data?.length?(0,le.S9)(t.data[0]):[])}async metricFindQuery(e,t){if(this.isFlux||this.isMigrationToggleOnAndIsAccessProxy()){const n={refId:"metricFindQuery",query:e,rawQuery:!0};return(0,z.n)(super.query({...t,targets:[n]})).then(l=>l.data?.length?(0,le.S9)(l.data[0]):[])}const r=new A({refId:"metricFindQuery",query:e,rawQuery:!0},this.templateSrv,t?.scopedVars).render(!0);return(0,z.n)(this._seriesQuery(r,t)).then(n=>this.responseParser.parse(e,n))}getTagKeys(e){const t=ae({type:"TAG_KEYS",templateService:this.templateSrv,database:this.database});return this.metricFindQuery(t,e)}getTagValues(e){const t=ae({type:"TAG_VALUES",templateService:this.templateSrv,database:this.database,withKey:e.key});return this.metricFindQuery(t,e)}_seriesQuery(e,t){if(!e)return(0,se.of)({results:[]});if(t&&t.range){const r=this.getTimeFilter({rangeRaw:t.range,timezone:t.timezone});e=e.replace("$timeFilter",r)}return this._influxRequest(this.httpMode,"/query",{q:e,epoch:"ms"},t)}serializeParams(e){return e?(0,f.reduce)(e,(t,r,n)=>(r==null||t.push(encodeURIComponent(n)+"="+encodeURIComponent(r)),t),[]).join("&"):""}_influxRequest(e,t,r,n){const l=this.urls.shift();this.urls.push(l);const i={};this.username&&(i.u=this.username,i.p=this.password),n&&n.database?i.db=n.database:this.database&&(i.db=this.database),n?.policy&&n.policy!==ce&&(i.rp=n.policy);const{q:o}=r;e==="POST"&&(0,f.has)(r,"q")?((0,f.extend)(i,(0,f.omit)(r,["q"])),r=this.serializeParams((0,f.pick)(r,["q"]))):(e==="GET"||e==="POST")&&((0,f.extend)(i,r),r=null);const u={method:e,url:l+t,params:i,data:r,precision:"ms",inspect:{type:"influxdb"},paramSerializer:this.serializeParams};return u.headers=u.headers||{},(this.basicAuth||this.withCredentials)&&(u.withCredentials=!0),this.basicAuth&&(u.headers.Authorization=this.basicAuth),e==="POST"&&(u.headers["Content-type"]="application/x-www-form-urlencoded"),(0,Oe.i)().fetch(u).pipe((0,Y.U)(c=>{const{data:d}=c;if(d&&(d.executedQueryString=o,d.results)){const m=c.data.results.filter(h=>h.error);if(m.length>0)throw{message:"InfluxDB Error: "+m[0].error,data:d}}return d}),(0,oa.K)(c=>c.cancelled?(0,se.of)(c):(0,De._)(this.handleErrors(c))))}handleErrors(e){const t={message:e&&e.status||e&&e.message||"Unknown error during query transaction. Please check JS console logs."};return(Number.isInteger(e.status)&&e.status!==0||e.status>=300)&&(e.data&&e.data.error?(t.message="InfluxDB Error: "+e.data.error,t.data=e.data,t.config=e.config):(t.message="Network Error: "+e.statusText+"("+e.status+")",t.data=e.data,t.config=e.config)),t}getTimeFilter(e){const t=this.getInfluxTime(e.rangeRaw.from,!1,e.timezone),r=this.getInfluxTime(e.rangeRaw.to,!0,e.timezone);return"time >= "+t+" and time <= "+r}getInfluxTime(e,t,r){let n;if((0,f.isString)(e)){if(e==="now")return"now()";const l=/^now-(\d+)([dhms])$/.exec(e);if(l){const i=parseInt(l[1],10),o=l[2];return"now() - "+i+o}if(n=ca.parse(e,t,r),!n)throw new Error("unable to parse date");e=n}return e.valueOf()+"ms"}isMigrationToggleOnAndIsAccessProxy(){return J.default.featureToggles.influxdbBackendMigration&&this.access==="proxy"}classicQuery(e){let t=this.getTimeFilter(e);const r=e.scopedVars,n=(0,f.cloneDeep)(e.targets),l=[];let i,o,u=(0,f.map)(n,m=>m.hide?"":(l.push(m),r.interval=r.__interval,new A(m,this.templateSrv,r).render(!0))).reduce((m,h)=>(h!==""&&(m+=";"+h),m));if(u==="")return(0,se.of)({data:[]});const c=this.templateSrv.getAdhocFilters(this.name),d=e.targets.flatMap(m=>m.adhocFilters??[]);if(c?.length||d?.length){const m=c?.length?c:d,h=new A({refId:"A"},this.templateSrv,r);t+=" AND "+h.renderAdhocFilters(m)}return r.timeFilter={value:t},u=this.templateSrv.replace(u,r),this._seriesQuery(u,e).pipe((0,Y.U)(m=>{if(!m||!m.results)return{data:[]};const h=[];for(i=0;i<m.results.length;i++){const g=m.results[i];if(!g||!g.series)continue;const F=l[i];let U=F.alias;U&&(U=this.templateSrv.replace(F.alias,e.scopedVars));const y={executedQueryString:m.executedQueryString},x=new Re({refId:F.refId,series:m.results[i].series,alias:U,meta:y});switch(F.resultFormat){case"logs":y.preferredVisualisationType="logs";case"table":{h.push(x.getTable());break}default:{const T=x.getTimeSeries();for(o=0;o<T.length;o++)h.push(ba(T[o]));break}}}return{data:h}}))}async annotationEvents(e,t){if(this.isFlux)return Promise.reject({message:"Flux requires the standard annotation query"});if(!t.query)return Promise.reject({message:"Query missing in annotation definition"});if(this.isMigrationToggleOnAndIsAccessProxy()){const l={refId:"metricFindQuery",datasource:this.getRef(),query:this.templateSrv.replace(t.query,void 0,"regex"),rawQuery:!0};return(0,z.n)((0,Oe.i)().fetch({url:"/api/ds/query",method:"POST",headers:this.getRequestHeaders(),data:{from:e.range.from.valueOf().toString(),to:e.range.to.valueOf().toString(),queries:[l]},requestId:t.name}).pipe((0,Y.U)(async i=>await this.responseParser.transformAnnotationResponse(t,i,l))))}const r=this.getTimeFilter({rangeRaw:e.range.raw,timezone:e.timezone});let n=t.query.replace("$timeFilter",r);return n=this.templateSrv.replace(n,void 0,"regex"),(0,z.n)(this._seriesQuery(n,e)).then(l=>{if(!l||!l.results||!l.results[0])throw{message:"No results in response from InfluxDB"};return new Re({series:l.results[0].series,annotation:t}).getAnnotations()})}}function Ca(a){const e=a.find(r=>r!==null);if(e===void 0)return D.fS.number;const t=typeof e;switch(t){case"string":return D.fS.string;case"boolean":return D.fS.boolean;case"number":return D.fS.number;default:throw new Error(`InfluxQL: invalid value type ${t}`)}}function ba(a){const e=[],t=[],r=a.datapoints;for(const o of r)t.push(o[0]),e.push(o[1]);const n={name:D.Ls,type:D.fS.time,config:{},values:e},l={name:D.M5,type:Ca(t),config:{displayNameFromDS:a.title},values:t,labels:a.tags},i=[n,l];return{name:a.target,refId:a.refId,meta:a.meta,fields:i,length:t.length}}const wa=new ke.hf(xa).setConfigEditor(ze).setQueryEditor(ta).setVariableQueryEditor(sa).setQueryEditorHelp(na)}}]); //# sourceMappingURL=influxdbPlugin.2c4879011e13bbbe12ff.js.map