D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
usr
/
share
/
grafana
/
public
/
build
/
Filename :
7357.79fae884930b4650375f.js
back
Copy
(self.webpackChunkgrafana=self.webpackChunkgrafana||[]).push([[7357],{63250:(ce,Q,m)=>{"use strict";m.d(Q,{K:()=>s});var w=m(42844),T=m(27702),v=m(66310);const s=({children:k})=>{const O=(0,v.wW)(K);return T.createElement("div",{className:O.root},k)},K=k=>({root:(0,w.css)({display:"flex",flexWrap:"wrap",alignItems:"center",gap:k.spacing(3),minHeight:k.spacing(4)})})},29473:(ce,Q,m)=>{"use strict";m.d(Q,{B:()=>T});var w=m(27702);const T=({grow:v,shrink:s})=>w.createElement("div",{style:{display:"block",flexGrow:v,flexShrink:s}})},29036:(ce,Q,m)=>{"use strict";m.d(Q,{X:()=>pe});var w=m(42844),T=m(27702),v=m(66310),s=m(28580),K=m(50285),k=Object.defineProperty,O=Object.defineProperties,G=Object.getOwnPropertyDescriptors,F=Object.getOwnPropertySymbols,D=Object.prototype.hasOwnProperty,X=Object.prototype.propertyIsEnumerable,j=(N,U,Y)=>U in N?k(N,U,{enumerable:!0,configurable:!0,writable:!0,value:Y}):N[U]=Y,ue=(N,U)=>{for(var Y in U||(U={}))D.call(U,Y)&&j(N,Y,U[Y]);if(F)for(var Y of F(U))X.call(U,Y)&&j(N,Y,U[Y]);return N},_=(N,U)=>O(N,G(U)),ye=(N,U)=>{var Y={};for(var te in N)D.call(N,te)&&U.indexOf(te)<0&&(Y[te]=N[te]);if(N!=null&&F)for(var te of F(N))U.indexOf(te)<0&&X.call(N,te)&&(Y[te]=N[te]);return Y};function pe(N){var U=N,{label:Y}=U,te=ye(U,["label"]);const Qe=(0,v.wW)(we),[Re]=(0,T.useState)(()=>Math.random().toString(16).slice(2)),de={SelectContainer:z,ValueContainer:Ce,SingleValue:Ce};return T.createElement("div",{className:Qe.root},Y&&T.createElement("label",{className:Qe.label,htmlFor:Re},Y,":","\xA0"),T.createElement(s.Ph,_(ue({openMenuOnFocus:!0,inputId:Re},te),{components:de})))}const z=N=>{const{children:U}=N,Y=(0,v.wW)(we);return T.createElement(K.e,_(ue({},N),{className:(0,w.cx)(N.className,Y.container)}),U)},Ce=N=>{const{className:U,children:Y}=N,te=(0,v.wW)(we);return T.createElement("div",{className:(0,w.cx)(U,te.valueContainer)},Y)},we=N=>({root:(0,w.css)({display:"flex",fontSize:12,alignItems:"center"}),label:(0,w.css)({color:N.colors.text.secondary,whiteSpace:"nowrap"}),container:(0,w.css)({background:"none",borderColor:"transparent"}),valueContainer:(0,w.css)({display:"flex",alignItems:"center",flex:"initial",color:N.colors.text.secondary,fontSize:12})})},26599:(ce,Q,m)=>{"use strict";m.r(Q),m.d(Q,{AND:()=>_,ASC:()=>G,BY:()=>k,COMPARISON_OPERATORS:()=>Ce,DESC:()=>O,EQUALS:()=>pe,FROM:()=>T,GROUP:()=>s,KEYWORDS:()=>j,LIMIT:()=>F,LOGICAL_OPERATORS:()=>ye,NOT_EQUALS:()=>z,ORDER:()=>K,SCHEMA:()=>X,SELECT:()=>w,STATISTICS:()=>ue,WHERE:()=>v,WITH:()=>D,conf:()=>N,language:()=>we});const w="SELECT",T="FROM",v="WHERE",s="GROUP",K="ORDER",k="BY",O="DESC",G="ASC",F="LIMIT",D="WITH",X="SCHEMA",j=[w,T,v,s,K,k,O,G,F,D,X],ue=["AVG","COUNT","MAX","MIN","SUM"],_="AND",ye=[_],pe="=",z="!=",Ce=[pe,z],we={defaultToken:"",tokenPostfix:".sql",ignoreCase:!0,brackets:[{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"}],keywords:j,operators:ye,builtinFunctions:ue,tokenizer:{root:[[/\$[a-zA-Z0-9-_]+/,"variable"],{include:"@comments"},{include:"@whitespace"},{include:"@numbers"},{include:"@strings"},{include:"@complexIdentifiers"},[/[;,.]/,"delimiter"],[/[()]/,"@brackets"],[/[\w@#$]+/,{cases:{"@keywords":"keyword","@operators":"operator","@builtinFunctions":"predefined","@default":"identifier"}}],[/[=!%&+\-*/|~^]/,"operator"]],whitespace:[[/\s+/,"white"]],comments:[[/--+.*/,"comment"]],comment:[[/[^*/]+/,"comment"],[/./,"comment"]],numbers:[[/0[xX][0-9a-fA-F]*/,"number"],[/[$][+-]*\d*(\.\d*)?/,"number"],[/((\d+(\.\d*)?)|(\.\d+))([eE][\-+]?\d+)?/,"number"]],strings:[[/N'/,{token:"string",next:"@string"}],[/'/,{token:"string",next:"@string"}],[/"/,{token:"type",next:"@string_double"}]],string:[[/[^']+/,"string"],[/''/,"string"],[/'/,{token:"string",next:"@pop"}]],string_double:[[/[^\\"]+/,"type"],[/"/,"type","@pop"]],complexIdentifiers:[[/\[/,{token:"identifier.quote",next:"@bracketedIdentifier"}],[/"/,{token:"identifier.quote",next:"@quotedIdentifier"}]],bracketedIdentifier:[[/[^\]]+/,"identifier"],[/]]/,"identifier"],[/]/,{token:"identifier.quote",next:"@pop"}]],quotedIdentifier:[[/[^"]+/,"identifier"],[/""/,"identifier"],[/"/,{token:"identifier.quote",next:"@pop"}]]}},N={comments:{lineComment:"--",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]}},64131:(ce,Q,m)=>{"use strict";m.r(Q),m.d(Q,{DYNAMIC_LABEL_PATTERNS:()=>T,conf:()=>s,language:()=>v});var w=m(34667);const T=["${DATAPOINT_COUNT}","${FIRST}","${FIRST_LAST_RANGE}","${FIRST_LAST_TIME_RANGE}","${FIRST_TIME}","${FIRST_TIME_RELATIVE}","${LABEL}","${LAST}","${LAST_TIME}","${LAST_TIME_RELATIVE}","${MAX}","${MAX_TIME}","${MAX_TIME_RELATIVE}","${MIN}","${MIN_MAX_RANGE}","${MIN_MAX_TIME_RANGE}","${MIN_TIME}","${MIN_TIME_RELATIVE}","${PROP('AccountId')}","${PROP('MetricName')}","${PROP('Namespace')}","${PROP('Period')}","${PROP('Region')}","${PROP('Stat')}","${SUM}",...w.config.featureToggles.cloudWatchCrossAccountQuerying?["${PROP('AccountLabel')}"]:[]],v={id:"dynamicLabels",ignoreCase:!1,tokenizer:{root:[{include:"@whitespace"},{include:"@builtInFunctions"},{include:"@string"},[/\$\{PROP\('Dim.[a-zA-Z0-9-_]?.*'\)\}+/,"predefined"]],builtInFunctions:[[T.map(K).join("|"),"predefined"]],whitespace:[[/\s+/,"white"]],string:[]}},s={};function K(k){return k.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}},98256:(ce,Q,m)=>{"use strict";m.r(Q),m.d(Q,{DEDUP:()=>G,DISPLAY:()=>w,FIELDS:()=>T,FILTER:()=>v,LIMIT:()=>k,LOGS_COMMANDS:()=>F,LOGS_FUNCTION_OPERATORS:()=>X,LOGS_KEYWORDS:()=>ue,LOGS_LOGIC_OPERATORS:()=>D,PARSE:()=>O,SORT:()=>K,SORT_DIRECTION_KEYWORDS:()=>j,STATS:()=>s,conf:()=>ye,language:()=>_});const w="display",T="fields",v="filter",s="stats",K="sort",k="limit",O="parse",G="dedup",F=[w,T,v,s,K,k,O,G],D=["and","or","not"],X=["abs","ceil","floor","greatest","least","log","sqrt","bin","datefloor","dateceil","fromMillis","toMillis","ispresent","coalesce","isValidIp","isValidIpV4","isValidIpV6","isIpInSubnet","isIpv4InSubnet","isIpv6InSubnet","avg","count","count_distinct","max","min","pct","stddev","sum","earliest","latest","sortsFirst","sortsLast","isempty","isblank","concat","ltrim","rtrim","trim","strlen","toupper","tolower","substr","replace","strcontains","unmask"],j=["asc","desc"],ue=["like","by","in","as",...j],_={defaultToken:"invalid",id:"logs",ignoreCase:!0,brackets:[{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"}],commands:[...F,...ue],operators:D,builtinFunctions:X,tokenizer:{root:[{include:"@comments"},{include:"@regexes"},{include:"@whitespace"},{include:"@fieldNames"},{include:"@variables"},{include:"@strings"},{include:"@numbers"},[/\|\|/,"operator"],[/[,.:\|]/,"delimiter"],[/[()\[\]]/,"delimiter.parenthesis"],[/[\w@#$]+/,{cases:{"@commands":"keyword","@builtinFunctions":"predefined","@operators":"operator","@default":"identifier"}}],[/[+\-*/^%=!<>]/,"operator"]],variables:[[/\${/,{token:"variable",next:"@variable_bracket"}],[/\$[a-zA-Z0-9-_]+/,"variable"]],variable_bracket:[[/[a-zA-Z0-9-_:]+/,"variable"],[/}/,{token:"variable",next:"@pop"}]],fieldNames:[[/(@[_a-zA-Z]+[_.0-9a-zA-Z]*)|(`((\\`)|([^`]))*?`)/,"identifier"]],whitespace:[[/\s+/,"white"]],comments:[[/^#.*/,"comment"],[/\s+#.*/,"comment"]],numbers:[[/0[xX][0-9a-fA-F]*/,"number"],[/[$][+-]*\d*(\.\d*)?/,"number"],[/((\d+(\.\d*)?)|(\.\d+))([eE][\-+]?\d+)?/,"number"]],strings:[[/'/,{token:"string",next:"@string"}],[/"/,{token:"string",next:"@string_double"}],[/`/,{token:"identifier",next:"@string_backtick"}]],string:[[/[^']+/,"string"],[/''/,"string"],[/'/,{token:"string",next:"@pop"}]],string_double:[[/[^\\"]+/,"string"],[/"/,"string","@pop"]],string_backtick:[[/[^\\`]+/,"identifier"],[/`/,"identifier","@pop"]],regexes:[[/\/.*?\/(?=\s*\||\s*$|,)/,"regexp"]]}},ye={comments:{lineComment:"#"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"`",close:"`"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"`",close:"`"}]}},61955:(ce,Q,m)=>{"use strict";m.r(Q),m.d(Q,{METRIC_MATH_FNS:()=>w,METRIC_MATH_KEYWORDS:()=>v,METRIC_MATH_OPERATORS:()=>s,METRIC_MATH_PERIODS:()=>K,METRIC_MATH_STATISTIC_KEYWORD_STRINGS:()=>T,conf:()=>O,language:()=>k});const w=["ABS","ANOMALY_DETECTION_BAND","AVG","CEIL","DATAPOINT_COUNT","DIFF","DIFF_TIME","FILL","FIRST","LAST","FLOOR","IF","INSIGHT_RULE_METRIC","LOG","LOG10","MAX","METRIC_COUNT","METRICS","MIN","MINUTE","HOUR","DAY","DATE","MONTH","YEAR","EPOCH","PERIOD","RATE","REMOVE_EMPTY","RUNNING_SUM","SEARCH","SERVICE_QUOTA","SLICE","SORT","STDDEV","SUM","TIME_SERIES"],T=["Average","Maximum","Minimum","Sum","SampleCount"],v=["REPEAT","LINEAR","ASC","DSC"],s=["+","-","*","/","^","==","!=","<=",">=","<",">","AND","&&","OR","||"],K=[10,60,300,900,3e3,21600,86400],k={id:"metricMath",ignoreCase:!1,brackets:[{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"{",close:"}",token:"delimiter.curly"}],tokenizer:{root:[{include:"@nonNestableStates"},{include:"@strings"}],nonNestableStates:[{include:"@variables"},{include:"@macros"},{include:"@whitespace"},{include:"@numbers"},{include:"@assignment"},{include:"@keywords"},{include:"@operators"},{include:"@builtInFunctions"},[/[;,.]/,"delimiter"],[/[(){}\[\]]/,"@brackets"]],keywords:[[v.map(G).join("|"),"keyword"]],operators:[[s.map(G).join("|"),"operator"]],builtInFunctions:[[w.map(G).join("|"),"predefined"]],variables:[[/\$[a-zA-Z0-9-_]+/,"variable"]],macros:[[/\$__[a-zA-Z0-9-_]+/,"type"]],whitespace:[[/\s+/,"white"]],assignment:[[/=/,"tag"]],numbers:[[/0[xX][0-9a-fA-F]*/,"number"],[/[$][+-]*\d*(\.\d*)?/,"number"],[/((\d+(\.\d*)?)|(\.\d+))([eE][\-+]?\d+)?/,"number"]],strings:[[/'/,{token:"string",next:"@string"}],[/"/,{token:"type",next:"@string_double"}]],string:[[/{/,{token:"delimiter.curly",next:"@nestedCurly"}],[/\(/,{token:"delimiter.parenthesis",next:"@nestedParens"}],[/"/,{token:"type",next:"@string_double"}],[/'/,{token:"string",next:"@pop"}],{include:"@nonNestableStates"},[/[^']/,"string"]],string_double:[[/[^"]/,"type"],[/"/,{token:"type",next:"@pop"}]],nestedCurly:[[/}/,{token:"delimiter.curly",next:"@pop"}],[/'/,{token:"string",next:"@string"}],[/"/,{token:"type",next:"@string_double"}]],nestedParens:[[/\)/,{token:"delimiter.parenthesis",next:"@pop"}],[/'/,{token:"string",next:"@string"}],[/"/,{token:"type",next:"@string_double"}]]}},O={brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]};function G(F){return F.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}},17357:(ce,Q,m)=>{"use strict";m.r(Q),m.d(Q,{plugin:()=>yo});var w=m(68246),T=m(84714),v=m(32713),s=m(27702),K=m(29956),k=m(84923),O=m(17312),G=m(76305),F=m(48024),D=m(1128),X=m(79510),j=m(33877),ue=m(12308),_=m(73807),ye=m(5926),pe=m(84749),z=m(89949),Ce=m(45383),we=m(6857),N=m(53933),U=m(42751),Y=m(26858),te=m(99386),Qe=m(63250),Re=m(29036),de=m(60426),ve=m(57942),H=m(81924),it=m(63201),Mt=m(63439);const ke=t=>t.queryMode==="Logs",Oe=t=>t.queryMode==="Metrics"||!t.hasOwnProperty("queryMode"),Ot=t=>t.queryMode==="Annotations",Gr=t=>t.target?.queryMode==="Annotations";var Pr=m(26623),lt=m(26811),q=m(81078),me=m(34667),h=m(14180);const Ve=t=>({label:t,value:t}),ge=(t,e)=>[...e,{label:"Template Variables",options:t.getVariables().map(Ve)}],Ft=t=>{const{region:e,metricQueryType:r,metricEditorMode:n,expression:a,metricName:o,namespace:i,sqlExpression:l,statistic:c}=t;return e?r===h.$5.Search&&n===h.MQ.Builder?!!i&&!!o&&!!c:r===h.$5.Search&&n===h.MQ.Code?!!a:r===h.$5.Query?!!l:!1:!1},ct=t=>{const[e,r]=(0,s.useState)(!1),[n,a]=(0,s.useState)([{label:"default",value:"default"}]);return(0,s.useEffect)(()=>{r(!0);const o={label:"Template Variables",options:t.getVariables().map(q.E)};t.resources.getRegions().then(i=>a([...i,o])).finally(()=>r(!1))},[t]),[n,e]},ut=t=>{const[e,r]=(0,s.useState)([]);return(0,s.useEffect)(()=>{t.resources.getNamespaces().then(n=>{r(ge(t,n))})},[t]),e},dt=(t,{region:e,namespace:r,accountId:n})=>{const[a,o]=(0,s.useState)([]);return e&&(e=t.templateSrv.replace(e,{})),r&&(r=t.templateSrv.replace(r,{})),n&&(n=t.templateSrv.replace(n,{})),(0,s.useEffect)(()=>{t.resources.getMetrics({namespace:r,region:e,accountId:n}).then(i=>{o(ge(t,i))})},[t,e,r,n]),a},Fe=(t,{region:e,namespace:r,metricName:n,dimensionFilters:a,accountId:o})=>{const[i,l]=(0,s.useState)([]);return e&&(e=t.templateSrv.replace(e,{})),r&&(r=t.templateSrv.replace(r,{})),n&&(n=t.templateSrv.replace(n,{})),o&&(o=t.templateSrv.replace(o,{})),a&&(a=t.resources.convertDimensionFormat(a,{})),(0,Pr.Z)(()=>{t.resources.getDimensionKeys({namespace:r,region:e,metricName:n,accountId:o,dimensionFilters:a}).then(c=>{l(ge(t,c))})},[t,r,e,n,o,a]),i},Kr=(t,e)=>{const[r,n]=(0,s.useState)(!1);return e&&(e=t.templateSrv.replace(e,{})),(0,s.useEffect)(()=>{me.config.featureToggles.cloudWatchCrossAccountQuerying&&t.isMonitoringAccount(e).then(a=>n(a))},[e,t]),r},mt=(t,e)=>{e&&(e=t?.templateSrv.replace(e,{})??"");const r=async()=>{if(!me.config.featureToggles.cloudWatchCrossAccountQuerying)return Promise.resolve([]);const o=await t?.getAccounts({region:e})??[];if(o.length===0)return[];const i=o.map(p=>({label:p.label,value:p.id,description:p.id})),c={label:"Template Variables",options:t?.getVariables().map(q.E)||[]};return[...i,c]},[n,a]=(0,lt.Z)(r,[t,e]);return(0,s.useEffect)(()=>{a()},[t,e,a]),n};var Nt=m(83788),Ye=m(2906),Z=m(28580),Xe=m(38162),W=m(42844),Be=m(70774),ze=m(76715),Ee=m(66310),Dt=m(80402);const Gt={value:"*",label:"*"},Wr=(t,e)=>Object.entries(t??{}).reduce((r,[n,a])=>n!==e?{...r,[n]:a}:r,{}),$r=({filter:t,metricStat:{region:e,namespace:r,metricName:n,dimensions:a,accountId:o},datasource:i,dimensionKeys:l,disableExpressions:c,onChange:p,onDelete:u})=>{const g=(0,s.useMemo)(()=>Wr(a??{},t.key),[a,t]),d=async()=>t.key?i.resources.getDimensionValues({dimensionKey:t.key,dimensionFilters:g,region:e,namespace:r,metricName:n,accountId:o}).then(C=>(C.length&&!c&&!C.some(I=>I.value===Gt.value)&&C.unshift(Gt),ge(i,C))):[],[y,E]=(0,lt.Z)(d,[t.key,a,e,r,n,o]),x=(0,Ee.l4)(),b=Qr(x);return s.createElement("div",{"data-testid":"cloudwatch-dimensions-filter-item"},s.createElement(Be.B,null,s.createElement(Z.Ph,{"aria-label":"Dimensions filter key",inputId:"cloudwatch-dimensions-filter-item-key",width:"auto",value:t.key?(0,q.E)(t.key):null,allowCustomValue:!0,options:l,onChange:C=>{C.label&&p({key:C.label,value:void 0})}}),s.createElement("span",{className:(0,W.cx)(b.root)},"="),s.createElement(Z.Ph,{"aria-label":"Dimensions filter value",inputId:"cloudwatch-dimensions-filter-item-value",onOpenMenu:E,width:"auto",value:t.value?(0,q.E)(t.value):null,allowCustomValue:!0,isLoading:y.loading,options:y.value,onChange:C=>{C.value&&p({...t,value:C.value})}}),s.createElement(ze._,{"aria-label":"remove",icon:"times",variant:"secondary",onClick:u,type:"button"})))},Qr=(0,Dt.B)(t=>({root:(0,W.css)({padding:t.spacing(0,1),alignSelf:"center"})})),kr=t=>Object.entries(t??{}).reduce((e,[r,n])=>{if(!n)return e;let a="";if(typeof n=="string"?a=n:Array.isArray(n)&&typeof n[0]=="string"&&(a=n[0]),!a)return e;const o={key:r,value:a,operator:"="};return[...e,o]},[]),Vr=t=>t.reduce((e,{key:r,value:n})=>r&&n?{...e,[r]:n}:e,{}),Pt=({metricStat:t,datasource:e,dimensionKeys:r,disableExpressions:n,onChange:a})=>{const o=(0,s.useMemo)(()=>kr(t.dimensions),[t.dimensions]),[i,l]=(0,s.useState)(o),c=p=>{l(p);const u=Vr(p);(0,z.isEqual)(u,t.dimensions)||a(u)};return s.createElement(Xe.k,{items:i,onChange:c,renderItem:Br(e,t,r,n)})};function Br(t,e,r,n){function a(o,i,l){return s.createElement($r,{filter:o,onChange:c=>i(c),datasource:t,metricStat:e,disableExpressions:n,dimensionKeys:r,onDelete:l})}return a}const zr=({label:t,tooltip:e,children:r})=>React.createElement(React.Fragment,null,React.createElement(InlineFormLabel,{width:8,className:"query-keyword",tooltip:e},t),r),vo=({...t})=>React.createElement("div",{className:"gf-form-inline"},React.createElement(zr,{...t}),React.createElement("div",{className:"gf-form gf-form--grow"},React.createElement("div",{className:"gf-form-label gf-form-label--grow"})));var Kt=m(60644),Ur=m(24077),pt=m(73453);const Hr=m(39955),jr="console.aws.amazon.com",Yr="console.amazonaws-us-gov.com",Xr="console.amazonaws.cn";function qr(t){let e=jr;return t.startsWith("us-gov-")&&(e=Yr),t.startsWith("cn-")&&(e=Xr),`${t}.${e}`}function Wt(t,e){return`https://${qr(e)}/cloudwatch/home?region=${e}#logs-insights:queryDetail=${Hr.stringify(t)}`}function $t({panelData:t,query:e,datasource:r}){const[n,a]=(0,s.useState)(""),o=(0,Ur.Z)(t);return(0,s.useEffect)(()=>{if(o!==t&&t?.request?.range){const i=(e.logGroups??[]).filter(y=>y?.arn).map(y=>(y.arn??"").replace(/:\*$/,"")),l=e.logGroupNames;let c=i?.length?i:l;const p=t?.request?.range,u=p.from.toISOString(),d={end:p.to.toISOString(),start:u,timeType:"ABSOLUTE",tz:"UTC",editorString:e.expression??"",isLiveTail:!1,source:c??[]};a(Wt(d,r.resources.getActualRegion(e.region)))}},[t,o,r,e]),s.createElement("a",{href:n,target:"_blank",rel:"noopener noreferrer"},s.createElement(pt.J,{name:"share-alt"})," CloudWatch Logs Insights")}var Qt=m(6570),kt=m.n(Qt),Zr=m(45485),Vt=m(54916),Jr=m(9857);const Bt=[{label:"fields",documentation:"Retrieves the specified fields from log events"},{label:"display",documentation:"Specifies which fields to display in the query results"},{label:"filter",documentation:"Filters the results of a query based on one or more conditions"},{label:"stats",documentation:"Calculates aggregate statistics based on the values of log fields"},{label:"sort",documentation:"Sorts the retrieved log events"},{label:"limit",documentation:"Specifies the number of log events returned by the query"},{label:"parse",documentation:"Extracts data from a log field, creating one or more ephemeral fields that you can process further in the query"}],Eo=null,bo=null,zt=[{label:"abs",detail:"abs(a)",documentation:"Absolute value."},{label:"ceil",detail:"ceil(a)",documentation:"Round to ceiling (the smallest integer that is greater than the value of a)."},{label:"floor",detail:"floor(a)",documentation:"Round to floor (the largest integer that is smaller than the value of a)."},{label:"greatest",detail:"greatest(a,b, ... z)",documentation:"Returns the largest value."},{label:"least",detail:"least(a, b, ... z)",documentation:"Returns the smallest value."},{label:"log",detail:"log(a)",documentation:"Natural logarithm."},{label:"sqrt",detail:"sqrt(a)",documentation:"Square root."}],_r=[{label:"ispresent",detail:"ispresent(fieldname)",documentation:"Returns true if the field exists."},{label:"coalesce",detail:"coalesce(fieldname1, fieldname2, ... fieldnamex)",documentation:"Returns the first non-null value from the list."}],Ut=[{label:"isempty",detail:"isempty(fieldname)",documentation:"Returns true if the field is missing or is an empty string."},{label:"isblank",detail:"isblank(fieldname)",documentation:"Returns true if the field is missing, an empty string, or contains only white space."},{label:"concat",detail:"concat(string1, string2, ... stringz)",documentation:"Concatenates the strings."},{label:"ltrim",detail:"ltrim(string) or ltrim(string1, string2)",documentation:"Remove white space from the left of the string. If the function has a second string argument, it removes the characters of string2 from the left of string1."},{label:"rtrim",detail:"rtrim(string) or rtrim(string1, string2)",documentation:"Remove white space from the right of the string. If the function has a second string argument, it removes the characters of string2 from the right of string1."},{label:"trim",detail:"trim(string) or trim(string1, string2)",documentation:"Remove white space from both ends of the string. If the function has a second string argument, it removes the characters of string2 from both sides of string1."},{label:"strlen",detail:"strlen(string)",documentation:"Returns the length of the string in Unicode code points."},{label:"toupper",detail:"toupper(string)",documentation:"Converts the string to uppercase."},{label:"tolower",detail:"tolower(string)",documentation:"Converts the string to lowercase."},{label:"substr",detail:"substr(string1, x), or substr(string1, x, y)",documentation:"Returns a substring from the index specified by the number argument to the end of the string. If the function has a second number argument, it contains the length of the substring to be retrieved."},{label:"replace",detail:"replace(string1, string2, string3)",documentation:"Replaces all instances of string2 in string1 with string3."},{label:"strcontains",detail:"strcontains(string1, string2)",documentation:"Returns 1 if string1 contains string2 and 0 otherwise."}],Ht=[{label:"bin",detail:"bin(period)",documentation:"Rounds the value of @timestamp to the given period and then truncates."},{label:"datefloor",detail:"datefloor(a, period)",documentation:"Truncates the timestamp to the given period."},{label:"dateceil",detail:"dateceil(a, period)",documentation:"Rounds up the timestamp to the given period and then truncates."},{label:"fromMillis",detail:"fromMillis(fieldname)",documentation:"Interprets the input field as the number of milliseconds since the Unix epoch and converts it to a timestamp."},{label:"toMillis",detail:"toMillis(fieldname)",documentation:"Converts the timestamp found in the named field into a number representing the milliseconds since the Unix epoch."}],gt=[{label:"isValidIp",detail:"isValidIp(fieldname)",documentation:"Returns true if the field is a valid v4 or v6 IP address."},{label:"isValidIpV4",detail:"isValidIpV4(fieldname)",documentation:"Returns true if the field is a valid v4 IP address."},{label:"isValidIpV6",detail:"isValidIpV6(fieldname)",documentation:"Returns true if the field is a valid v6 IP address."},{label:"isIpInSubnet",detail:"isIpInSubnet(fieldname, string)",documentation:"Returns true if the field is a valid v4 or v6 IP address within the specified v4 or v6 subnet."},{label:"isIpv4InSubnet",detail:"isIpv4InSubnet(fieldname, string)",documentation:"Returns true if the field is a valid v4 IP address within the specified v4 subnet."},{label:"isIpv6InSubnet",detail:"isIpv6InSubnet(fieldname, string)",documentation:"Returns true if the field is a valid v6 IP address within the specified v6 subnet."}],jt=[{label:"ispresent",detail:"ispresent(fieldname)",documentation:"Returns true if the field exists."},{label:"isempty",detail:"isempty(fieldname)",documentation:"Returns true if the field is missing or is an empty string."},{label:"isblank",detail:"isblank(fieldname)",documentation:"Returns true if the field is missing, an empty string, or contains only white space."},{label:"strcontains",detail:"strcontains(string1, string2)",documentation:"Returns 1 if string1 contains string2 and 0 otherwise."},...gt],Yt=[{label:"avg",detail:"avg(NumericFieldname)",documentation:"The average of the values in the specified field."},{label:"count",detail:"count(fieldname) or count(*)",documentation:"Counts the log records."},{label:"count_distinct",detail:"count_distinct(fieldname)",documentation:"Returns the number of unique values for the field."},{label:"max",detail:"max(fieldname)",documentation:"The maximum of the values for this log field in the queried logs."},{label:"min",detail:"min(fieldname)",documentation:"The minimum of the values for this log field in the queried logs."},{label:"pct",detail:"pct(fieldname, value)",documentation:"A percentile indicates the relative standing of a value in a datas."},{label:"stddev",detail:"stddev(NumericFieldname)",documentation:"The standard deviation of the values in the specified field."},{label:"sum",detail:"sum(NumericFieldname)",documentation:"The sum of the values in the specified field."}],en=[{label:"earliest",detail:"earliest(fieldname)",documentation:"Returns the value of fieldName from the log event that has the earliest time stamp in the queried logs."},{label:"latest",detail:"latest(fieldname)",documentation:"Returns the value of fieldName from the log event that has the latest time stamp in the queried logs."},{label:"sortsFirst",detail:"sortsFirst(fieldname)",documentation:"Returns the value of fieldName that sorts first in the queried logs."},{label:"sortsLast",detail:"sortsLast(fieldname)",documentation:"Returns the value of fieldName that sorts last in the queried logs."}],tn=[...Yt,...en],rn=["as","like","by","in","desc","asc"],Xt=[...zt,..._r,...Ut,...Ht,...gt],nn=[...Xt,...tn],ft={comment:{pattern:/^#.*/,greedy:!0},backticks:{pattern:/`.*?`/,alias:"string",greedy:!0},quote:{pattern:/".*?"/,alias:"string",greedy:!0},regex:{pattern:/\/.*?\/(?=\||\s*$|,)/,greedy:!0},"query-command":{pattern:new RegExp(`\\b(?:${Bt.map(t=>t.label).join("|")})\\b`,"i"),alias:"function"},function:{pattern:new RegExp(`\\b(?:${nn.map(t=>t.label).join("|")})\\b`,"i")},keyword:{pattern:new RegExp(`(\\s+)(${rn.join("|")})(?=\\s+)`,"i"),lookbehind:!0},"field-name":{pattern:/(@?[_a-zA-Z]+[_.0-9a-zA-Z]*)|(`((\\`)|([^`]))*?`)/,greedy:!0},number:/\b-?\d+((\.\d*)?([eE][+-]?\d+)?)?\b/,"command-separator":{pattern:/\|/,alias:"punctuation"},"comparison-operator":{pattern:/([<>]=?)|(!?=)/},punctuation:/[{}()`,.]/,whitespace:/\s+/},sn=/\s+by\s+/im,ht=/([\w$@().]+)(?:(\s+as\s+)([\w$]+))?\s*,?\s*/iy;function qt(t){let e=[],r;if(r=t.match(sn)){ht.lastIndex=r.index+r[0].length;let n;for(;n=ht.exec(t);)e.push(n[2]?n[3]:n[1]),ht.lastIndex=n.index+n[0].length}return e}const yt=(t,e,r,n)=>{n=n??"value";const a=n==="value"?"pipe":"text";let o=[];for(const i of e){const l=t.getVariableName(i),c=t.getVariables().find(({name:p})=>p===l);if(c&&"current"in c&&an(c.current)){const p=c.current[n];if(Array.isArray(p)){const u=a==="text"?" + ":"|";o.push(...t.replace(i,r,a).split(u))}else typeof p=="string"&&o.push(t.replace(i,r,a))}else o.push(i)}return o},Zt=(t,e)=>{const r=t.getVariableName(e);return t.getVariables().some(({name:n})=>n===r)},an=t=>t.hasOwnProperty("value")&&t.hasOwnProperty("text"),on=20,ln=4,cn=300,un=({region:t,selectedLogGroups:e,onChange:r,datasource:n,onOpenMenu:a,width:o,saved:i=!0})=>{const[l,c]=(0,s.useState)(!1),[p,u]=(0,s.useState)([]),g=(0,s.useMemo)(()=>(0,z.unionBy)(p,e?.map(q.E),"value"),[p,e]),d=(0,s.useCallback)(async(b,C)=>{if(!n)return[];try{return await n.resources.legacyDescribeLogGroups(b,C)}catch(I){return(0,pe.WI)((0,j.$l)((0,_.t_)(typeof I=="string"?I:JSON.stringify(I)))),[]}},[n]),y=async(b,C,I)=>{if(I.action!=="input-change"||!n)return;if(!/^[\.\-_/#A-Za-z0-9]+$/.test(b)){b!==""&&(0,pe.WI)((0,j.$l)((0,_.t_)("Invalid Log Group name: "+b)));return}c(!0);const le=await d(C,b);u((0,z.unionBy)(p,le,"value")),c(!1)};(0,s.useEffect)(()=>{async function b(){if(!n||!n.getActualRegion(t)){u([]);return}return c(!0),d(n.getActualRegion(t)).then(C=>{u(C)}).finally(()=>{c(!1)})}return i&&b(),()=>{u([]),c(!1)}},[n,t,i]);const E=async()=>{a&&await a()},x=(0,z.debounce)(y,cn);return s.createElement(Z.NU,{inputId:"default-log-groups","aria-label":"Log Groups",allowCustomValue:!0,options:n?ge(n,g):g,value:e,onChange:b=>r(b.filter(({value:C})=>C).map(({value:C})=>C)),closeMenuOnSelect:!1,isClearable:!0,isOptionDisabled:()=>e.length>=on,placeholder:"Choose Log Groups",maxVisibleValues:ln,noOptionsMessage:"No log groups available",isLoading:l,onOpenMenu:E,onInputChange:(b,C)=>{x(b,t,C)},width:o})},dn=(0,W.css)` gap: 3px; `,mn=({datasource:t,region:e,legacyLogGroupNames:r,onChange:n})=>s.createElement("div",{className:`gf-form gf-form--grow flex-grow-1 ${dn}`},s.createElement(un,{region:e,selectedLogGroups:r,datasource:t,onChange:n}));var Jt=m(13741),pn=m(52419),gn=m(83967),fn=m(79978),xe=m(66670);const hn=({searchFn:t,searchPhrase:e})=>{const[r,n]=(0,s.useState)(e),a=(0,s.useMemo)(()=>(0,z.debounce)(t,600),[t]);return(0,s.useEffect)(()=>()=>{a?.cancel()},[a]),s.createElement(D.I,{"aria-label":"log group search",prefix:s.createElement(pt.J,{name:"search"}),value:r,onChange:o=>{const i=o.currentTarget.value;n(i),a(i)},placeholder:"search by log group name prefix"})},Ne={label:"All",value:"all",description:"Target all linked accounts"};function _t({accountId:t,onChange:e,accountOptions:r}){const n=(0,s.useMemo)(()=>r.find(a=>a.options?a.options.find(i=>i.value===t):a.value===t),[r,t]);return r.length===0?null:s.createElement(H.S,{label:"Account",width:26,tooltip:"A CloudWatch monitoring account views data from source accounts so you can centralize monitoring and troubleshooting activities across multiple accounts. Go to the CloudWatch settings page in the AWS console for more details."},s.createElement(Z.Ph,{"aria-label":"Account Selection",value:n?t:Ne.value,options:[Ne,...r],onChange:({value:a})=>{e(a)}}))}const er=t=>({table:(0,W.css)({width:"100%",tableLayout:"fixed"}),selectedLogGroupsContainer:(0,W.css)({marginLeft:t.spacing(.5),marginBottom:t.spacing(.5),display:"flex",flexFlow:"wrap",gap:t.spacing(1),button:{margin:"unset"}}),limitLabel:(0,W.css)({color:t.colors.text.secondary,textAlign:"center",maxWidth:"none",svg:{marginRight:t.spacing(.5)},fontSize:12}),logGroupCountLabel:(0,W.css)({color:t.colors.text.secondary,maxWidth:"none"}),tableScroller:(0,W.css)({maxHeight:"40vh",overflow:"auto"}),row:(0,W.css)({borderBottom:`1px solid ${t.colors.border.weak}`,"&:last-of-type":{borderBottomColor:t.colors.border.medium}}),cell:(0,W.css)({padding:t.spacing(1,1,1,0),width:"25%","&:first-of-type":{width:"80%",padding:t.spacing(1,1,1,2)}}),nestedEntry:(0,W.css)({display:"flex",alignItems:"center"}),logGroupSearchResults:(0,W.css)({overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",width:"90%",verticalAlign:"middle"}),modal:(0,W.css)({width:t.breakpoints.values.lg}),selectAccountId:(0,W.css)({maxWidth:"100px"}),logGroupSelectionArea:(0,W.css)({display:"flex"}),searchField:(0,W.css)({width:"100%",marginRight:t.spacing(1)}),resultLimit:(0,W.css)({margin:"4px 0",fontStyle:"italic"}),removeButton:(0,W.css)({verticalAlign:"middle",marginLeft:t.spacing(.5)})}),yn=({accountOptions:t=[],variables:e=[],fetchLogGroups:r,onChange:n,onBeforeOpen:a,...o})=>{const[i,l]=(0,s.useState)(!1),[c,p]=(0,s.useState)([]),[u,g]=(0,s.useState)(o.selectedLogGroups??[]),[d,y]=(0,s.useState)(""),[E,x]=(0,s.useState)(Ne.value),[b,C]=(0,s.useState)(!1),I=(0,Ee.wW)(er),re=(0,s.useMemo)(()=>u.filter(L=>!L.name?.startsWith("$")).length,[u]),le=(0,s.useMemo)(()=>e.map(L=>({label:L,value:L})),[e]),Te=(0,s.useMemo)(()=>u.find(L=>L.name?.startsWith("$"))?.name,[u]),Lt={label:Te,value:Te};(0,s.useEffect)(()=>{g(o.selectedLogGroups??[])},[o.selectedLogGroups]);const M=()=>{l(!i),i||(g(u),Ie(d,E))},he=(0,s.useMemo)(()=>{const L={};return t.forEach(J=>{J.value&&J.label&&(L[J.value]=J.label)}),L},[t]),Ie=async(L,J)=>{C(!0);try{const $e=await r({logGroupPattern:L,accountId:J});p($e.map(je=>({arn:je.value.arn,name:je.value.name,accountId:je.accountId,accountLabel:je.accountId?he[je.accountId]:void 0})))}catch{p([])}C(!1)},st=(L,J)=>{g(J?[...u,L]:u.filter($e=>$e.arn!==L.arn))},at=()=>{n(u),M()},ot=()=>{g(u),M()};return s.createElement(s.Fragment,null,s.createElement(Jt.u,{className:I.modal,title:"Select log groups",isOpen:i,onDismiss:M},s.createElement("div",{className:I.logGroupSelectionArea},s.createElement("div",{className:I.searchField},s.createElement(H.S,{label:"Log group name prefix"},s.createElement(hn,{searchFn:L=>{Ie(L,E),y(L)},searchPhrase:d}))),s.createElement(_t,{onChange:L=>{Ie(d,L),x(L||Ne.value)},accountOptions:t,accountId:E})),s.createElement(de.T,{layout:"block",v:2}),s.createElement("div",null,!b&&c.length>=25&&s.createElement(s.Fragment,null,s.createElement("div",{className:I.limitLabel},s.createElement(pt.J,{name:"info-circle"}),"Only the first 50 results can be shown. If you do not see an expected log group, try narrowing down your search.",s.createElement("p",null,"A"," ",s.createElement("a",{target:"_blank",rel:"noopener noreferrer",href:"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/cloudwatch_limits_cwl.html"},"maximum"," ")," ","of 50 Cloudwatch log groups can be queried at one time.")),s.createElement(de.T,{layout:"block",v:1})),s.createElement("div",{className:I.tableScroller},s.createElement("table",{className:I.table},s.createElement("thead",null,s.createElement("tr",{className:I.row},s.createElement("td",{className:I.cell},"Log Group"),t.length>0&&s.createElement("td",{className:I.cell},"Account label"),s.createElement("td",{className:I.cell},"Account ID"))),s.createElement("tbody",null,b&&s.createElement("tr",{className:I.row},s.createElement("td",{className:I.cell},s.createElement(pn.u,{text:"Loading..."}))),!b&&c.length===0&&s.createElement("tr",{className:I.row},s.createElement("td",{className:I.cell},"No log groups found")),!b&&c.map(L=>s.createElement("tr",{className:I.row,key:`${L.arn}`},s.createElement("td",{className:I.cell},s.createElement("div",{className:I.nestedEntry},s.createElement(gn.X,{id:L.arn,onChange:J=>st(L,J.currentTarget.checked),value:!!(L.arn&&u.some(J=>J.arn===L.arn))}),s.createElement(de.T,{layout:"inline",h:2}),s.createElement("label",{className:I.logGroupSearchResults,htmlFor:L.arn,title:L.name},L.name))),t.length>0&&s.createElement("td",{className:I.cell},L.accountLabel),s.createElement("td",{className:I.cell},L.accountId))))))),s.createElement(de.T,{layout:"block",v:2}),s.createElement(fn._,{className:I.logGroupCountLabel},re," log group",re!==1&&"s"," selected"),s.createElement(de.T,{layout:"block",v:1}),s.createElement(H.S,{label:"Template variable",width:26,tooltip:"Optionally you can specify a single or multi-valued template variable. Select a variable separately or in conjunction with log groups."},s.createElement(Z.Ph,{isClearable:!0,"aria-label":"Template variable",value:Lt,allowCustomValue:!0,options:le,onChange:L=>{const J=u.filter($e=>!$e.name?.startsWith("$"));L?.label&&J.push({name:L.label,arn:L.label}),g(J)}})),s.createElement(Jt.u.ButtonRow,null,s.createElement(xe.zx,{onClick:ot,variant:"secondary",type:"button",fill:"outline"},"Cancel"),s.createElement(xe.zx,{onClick:at,type:"button"},"Add log groups"))),s.createElement("div",null,s.createElement(xe.zx,{variant:"secondary",onClick:()=>{try{a?.(),M()}catch{}},type:"button"},"Select log groups")))};var tr=m(3613);const rr=6,vn=({selectedLogGroups:t=[],onChange:e,maxNoOfVisibleLogGroups:r=rr})=>{const n=(0,Ee.wW)(er),[a,o]=(0,s.useState)(!1),[i,l]=(0,s.useState)(t.slice(0,rr));return(0,s.useEffect)(()=>{l(t.slice(0,r))},[t,r]),s.createElement(s.Fragment,null,s.createElement("div",{className:n.selectedLogGroupsContainer},i.map(c=>s.createElement(xe.zx,{key:c.arn,size:"sm",variant:"secondary",icon:"times",className:n.removeButton,onClick:()=>{e(t.filter(p=>p.arn!==c.arn))}},`${c.name}${c.accountLabel?`(${c.accountLabel})`:""}`)),i.length!==t.length&&s.createElement(xe.zx,{size:"sm",variant:"secondary",icon:"plus",fill:"outline",className:n.removeButton,onClick:()=>l(t)},"Show all"),t.length>0&&s.createElement(xe.zx,{size:"sm",variant:"secondary",icon:"times",fill:"outline",className:n.removeButton,onClick:()=>o(!0)},"Clear selection")),s.createElement(tr.s,{isOpen:a,title:"Clear Log Group Selection",body:"Are you sure you want to clear all log groups?",confirmText:"Yes",dismissText:"No",icon:"exclamation-triangle",onConfirm:()=>{o(!1),e([])},onDismiss:()=>o(!1)}))},En=(0,W.css)` gap: 3px; `,bn=({datasource:t,onChange:e,legacyLogGroupNames:r,logGroups:n,region:a,maxNoOfVisibleLogGroups:o,onBeforeOpen:i})=>{const l=mt(t?.resources,a),[c,p]=(0,s.useState)(!1);return(0,s.useEffect)(()=>{if(t&&!c&&!n?.length&&r?.length){p(!0);const u=r.filter(d=>Zt(t.resources.templateSrv,d)),g=r.filter(d=>!Zt(t.resources.templateSrv,d));Promise.all(g.map(d=>t.resources.getLogGroups({region:a,logGroupNamePrefix:d}))).then(d=>{const y=d.flatMap(E=>E.map(x=>({arn:x.value.arn,name:x.value.name,accountId:x.accountId})));e([...y,...u.map(E=>({name:E,arn:E}))])}).catch(d=>{console.error(d)})}},[t,r,n,e,a,c]),s.createElement("div",{className:`gf-form gf-form--grow flex-grow-1 ${En}`},s.createElement(yn,{fetchLogGroups:async u=>t?.resources.getLogGroups({region:a,...u})??[],onChange:e,accountOptions:l.value,selectedLogGroups:n,onBeforeOpen:i,variables:t?.getVariables()}),s.createElement(vn,{selectedLogGroups:n??[],onChange:e,maxNoOfVisibleLogGroups:o}))},vt=t=>me.config.featureToggles.cloudWatchCrossAccountQuerying?s.createElement(bn,{...t}):s.createElement(mn,{...t,onChange:t.legacyOnChange,legacyLogGroupNames:t.legacyLogGroupNames||[]}),Sn=[(0,Zr.h)(),(0,Vt.Z)({onlyIn:t=>t.object==="block"&&t.type==="code_block",getSyntax:t=>"cloudwatch"},{...Qt.languages,cloudwatch:ft})],An=t=>{const{query:e,datasource:r,onChange:n,ExtraFieldElement:a,data:o}=t,i=o?.error?.refId===e.refId,l=r.languageProvider.cleanText,c=u=>{const g={...e,expression:u,statsGroups:qt(u)};n(g)},p=async u=>{const{datasource:g,query:d}=t,{logGroups:y}=d;if(!g.languageProvider)return{suggestions:[]};const{history:E,absoluteRange:x}=t,{prefix:b,text:C,value:I,wrapperClasses:re,labelKey:le,editor:Te}=u;return await g.languageProvider.provideCompletionItems({text:C,value:I,prefix:b,wrapperClasses:re,labelKey:le,editor:Te},{history:E,absoluteRange:x,logGroups:y,region:d.region})};return s.createElement(s.Fragment,null,s.createElement(vt,{region:e.region,datasource:r,legacyLogGroupNames:e.logGroupNames,logGroups:e.logGroups,onChange:u=>{n({...e,logGroups:u,logGroupNames:void 0})},legacyOnChange:u=>{n({...e,logGroupNames:u})}}),s.createElement("div",{className:"gf-form-inline gf-form-inline--nowrap flex-grow-1"},s.createElement("div",{className:"gf-form gf-form--grow flex-shrink-1"},s.createElement(Jr.q,{additionalPlugins:Sn,query:e.expression??"",onChange:c,onTypeahead:p,cleanText:l,placeholder:"Enter a CloudWatch Logs Insights query (run with Shift+Enter)",portalOrigin:"cloudwatch"})),a),i?s.createElement("div",{className:"query-row-break"},s.createElement("div",{className:"prom-query-field-info text-error"},o?.error?.message)):null)},Tn=(0,Ee.HE)(An);var qe=m(11649);const se="cloudwatch-logs",nr={id:se,extensions:[],aliases:[],mimetypes:[],loader:()=>Promise.resolve().then(m.bind(m,98256))},B={id:"editor.action.triggerSuggest",title:""},Ze=(t,e,r)=>{const{id:n,loader:a}=e;t.languages.getLanguages().find(i=>i.id===n)||(t.languages.register({id:n}),a().then(i=>{t.languages.setMonarchTokensProvider(n,i.language),t.languages.setLanguageConfiguration(n,i.conf),t.languages.registerCompletionItemProvider(n,r.getCompletionProvider(t,e))}))},In=t=>{const{query:e,datasource:r,onChange:n,ExtraFieldElement:a,data:o}=t,i=o?.error?.refId===e.refId,l=(0,s.useCallback)(p=>{const u={...e,expression:p,statsGroups:qt(p)};n(u)},[n,e]),c=(0,s.useCallback)((p,u)=>{p.onDidFocusEditorText(()=>p.trigger(B.id,B.id,{})),p.addCommand(u.KeyMod.Shift|u.KeyCode.Enter,()=>{const g=p.getValue();l(g)})},[l]);return s.createElement(s.Fragment,null,s.createElement(vt,{region:e.region,datasource:r,legacyLogGroupNames:e.logGroupNames,logGroups:e.logGroups,onChange:p=>{n({...e,logGroups:p,logGroupNames:void 0})},legacyOnChange:p=>{n({...e,logGroupNames:p})}}),s.createElement("div",{className:"gf-form-inline gf-form-inline--nowrap flex-grow-1"},s.createElement("div",{className:"gf-form--grow flex-shrink-1"},s.createElement(qe.p,{height:"150px",width:"100%",showMiniMap:!1,monacoOptions:{scrollBeyondLastLine:!1,fontSize:14,lineNumbers:"off",renderLineHighlight:"none",scrollbar:{vertical:"hidden",horizontal:"hidden"},suggestFontSize:12,wordWrap:"on",padding:{top:6}},language:nr.id,value:e.expression??"",onBlur:p=>{p!==e.expression&&l(p)},onBeforeEditorMount:p=>Ze(p,nr,r.logsCompletionItemProvider),onEditorDidMount:c})),a),i?s.createElement("div",{className:"query-row-break"},s.createElement("div",{className:"prom-query-field-info text-error"},o?.error?.message)):null)},Cn=(0,Ee.HE)(In),sr=(0,W.css)` margin-left: 3px; flex-grow: 0; `,wn=(0,s.memo)(function(e){const{query:r,data:n,datasource:a,exploreId:o}=e;let i;if(n?.request?.range?.from){const{range:l}=n.request;i={from:l.from.valueOf(),to:l.to.valueOf()}}else i={from:Date.now()-1e4,to:Date.now()};return me.config.featureToggles.cloudWatchLogsMonacoEditor?s.createElement(Cn,{...e,ExtraFieldElement:s.createElement(Kt.c,{className:`gf-form-label--btn ${sr}`,width:"auto",tooltip:"Link to Graph in AWS"},s.createElement($t,{query:r,panelData:n,datasource:a}))}):s.createElement(Tn,{...e,exploreId:o,history:[],absoluteRange:i,ExtraFieldElement:s.createElement(Kt.c,{className:`gf-form-label--btn ${sr}`,width:"auto",tooltip:"Link to Graph in AWS"},s.createElement($t,{query:r,panelData:n,datasource:a}))})});var Rn=m(40705),xn=m(52131),Ln=m.n(xn);function Et(t){const e=Mn(t);return Ln()(e,t)?t:e}const ar={metric:"PROP('MetricName')",namespace:"PROP('Namespace')",period:"PROP('Period')",region:"PROP('Region')",stat:"PROP('Stat')",label:"LABEL"};function Mn(t){if(!t.hasOwnProperty("label")){const e={...t};if(!t.hasOwnProperty("label")){const r=/{{\s*(.+?)\s*}}/g;e.label=t.alias?.replace(r,(n,a)=>ar.hasOwnProperty(a)?`\${${ar[a]}}`:`\${PROP('Dim.${a}')}`)??""}return e}return t}const On=(t,e)=>{const r=(0,s.useMemo)(()=>Et(t),[t]);return(0,s.useEffect)(()=>{r!==t&&e(r)},[r,t,e]),r};class Fn{constructor(e,r,n,a,o,i){this.type=e,this.value=r,this.range=n,this.previous=a,this.next=o,this.tokenTypes=i}isKeyword(){return this.type===this.tokenTypes.Keyword}isWhiteSpace(){return this.type===this.tokenTypes.Whitespace}isParenthesis(){return this.type===this.tokenTypes.Parenthesis}isIdentifier(){return this.type===this.tokenTypes.Identifier}isString(){return this.type===this.tokenTypes.String}isDoubleQuotedString(){return this.type===this.tokenTypes.Type}isVariable(){return this.type===this.tokenTypes.Variable}isFunction(){return this.type===this.tokenTypes.Function}isNumber(){return this.type===this.tokenTypes.Number}is(e,r){const n=this.type===e;return r!==void 0?n&&this.value===r:n}endsWith(e){return this.value===e||this.value[this.value.length-1]===e}getPreviousNonWhiteSpaceToken(){let e=this.previous;for(;e!=null;){if(!e.isWhiteSpace())return e;e=e.previous}return null}getPreviousOfType(e,r){let n=this.previous;for(;n!=null;){const a=n.type===e;if(r!==void 0?a&&n.value===r:a)return n;n=n.previous}return null}getPreviousUntil(e,r,n){let a=[],o=this.previous;for(;o!=null;){if(r.some(l=>l===o?.type)){o=o.previous;continue}const i=o.type===e;if(n!==void 0?i&&o.value===n:i)return a;o.isWhiteSpace()||a.push(o),o=o.previous}return a}getNextUntil(e,r,n){let a=[],o=this.next;for(;o!=null;){if(r.some(l=>l===o?.type)){o=o.next;continue}const i=o.type===e;if(n!==void 0?i&&o.value===n:i)return a;o.isWhiteSpace()||a.push(o),o=o.next}return a}getPreviousKeyword(){let e=this.previous;for(;e!=null;){if(e.isKeyword())return e;e=e.previous}return null}getNextNonWhiteSpaceToken(){let e=this.next;for(;e!=null;){if(!e.isWhiteSpace())return e;e=e.next}return null}getNextOfType(e,r){let n=this.next;for(;n!=null;){const a=n.type===e;if(r!==void 0?a&&n.value===r:a)return n;n=n.next}return null}}function or(t,e,r,n,a){let o=null,i=null;const l=t.editor.tokenize(r.getValue()??"",e.id);for(let c=0;c<l.length;c++){const p=l[c];if(!p.length&&i){const u={offset:0,type:a.Whitespace,language:e.id,_tokenBrand:void 0};p.push(u)}for(let u=0;u<p.length;u++){const g=p[u];let d=p.length>u+1?p[u+1].offset+1:r.getLineLength(c+1)+1;const y={startLineNumber:c+1,startColumn:g.offset===0?0:g.offset+1,endLineNumber:c+1,endColumn:d},E=r.getValueInRange(y),x=new Fn(g.type,E,y,i,null,a);t.Range.containsPosition(y,n)&&(o=x),i&&(i.next=x),i=x}}return o}var f=(t=>(t[t.Unknown=0]="Unknown",t[t.SelectKeyword=1]="SelectKeyword",t[t.AfterSelectKeyword=2]="AfterSelectKeyword",t[t.AfterSelectFuncFirstArgument=3]="AfterSelectFuncFirstArgument",t[t.AfterFromKeyword=4]="AfterFromKeyword",t[t.SchemaFuncFirstArgument=5]="SchemaFuncFirstArgument",t[t.SchemaFuncExtraArgument=6]="SchemaFuncExtraArgument",t[t.FromKeyword=7]="FromKeyword",t[t.AfterFrom=8]="AfterFrom",t[t.WhereKey=9]="WhereKey",t[t.WhereComparisonOperator=10]="WhereComparisonOperator",t[t.WhereValue=11]="WhereValue",t[t.AfterWhereValue=12]="AfterWhereValue",t[t.AfterGroupByKeywords=13]="AfterGroupByKeywords",t[t.AfterGroupBy=14]="AfterGroupBy",t[t.AfterOrderByKeywords=15]="AfterOrderByKeywords",t[t.AfterOrderByFunction=16]="AfterOrderByFunction",t[t.AfterOrderByDirection=17]="AfterOrderByDirection",t[t.PredefinedFunction=18]="PredefinedFunction",t[t.SearchFuncSecondArg=19]="SearchFuncSecondArg",t[t.SearchFuncThirdArg=20]="SearchFuncThirdArg",t[t.PredefinedFuncSecondArg=21]="PredefinedFuncSecondArg",t[t.AfterFunction=22]="AfterFunction",t[t.WithinString=23]="WithinString",t[t.NewCommand=24]="NewCommand",t[t.Comment=25]="Comment",t[t.DedupKeyword=26]="DedupKeyword",t[t.AfterDedupKeyword=27]="AfterDedupKeyword",t[t.DisplayKeyword=28]="DisplayKeyword",t[t.AfterDisplayKeyword=29]="AfterDisplayKeyword",t[t.FieldsKeyword=30]="FieldsKeyword",t[t.AfterFieldsKeyword=31]="AfterFieldsKeyword",t[t.FilterKeyword=32]="FilterKeyword",t[t.AfterFilterKeyword=33]="AfterFilterKeyword",t[t.FilterArg=34]="FilterArg",t[t.LimitKeyword=35]="LimitKeyword",t[t.AfterLimitKeyword=36]="AfterLimitKeyword",t[t.ParseKeyword=37]="ParseKeyword",t[t.AfterParseKeyword=38]="AfterParseKeyword",t[t.SortKeyword=39]="SortKeyword",t[t.AfterSortKeyword=40]="AfterSortKeyword",t[t.SortArg=41]="SortArg",t[t.StatsKeyword=42]="StatsKeyword",t[t.AfterStatsKeyword=43]="AfterStatsKeyword",t[t.AsKeyword=44]="AsKeyword",t[t.AfterAsKeyword=45]="AfterAsKeyword",t[t.ByKeyword=46]="ByKeyword",t[t.AfterByKeyword=47]="AfterByKeyword",t[t.InKeyword=48]="InKeyword",t[t.AfterInKeyword=49]="AfterInKeyword",t[t.LikeKeyword=50]="LikeKeyword",t[t.AfterLikeKeyword=51]="AfterLikeKeyword",t[t.Function=52]="Function",t[t.FunctionArg=53]="FunctionArg",t[t.CommandArg=54]="CommandArg",t[t.AfterCommand=55]="AfterCommand",t[t.ArithmeticOperator=56]="ArithmeticOperator",t[t.ArithmeticOperatorArg=57]="ArithmeticOperatorArg",t[t.BooleanOperator=58]="BooleanOperator",t[t.BooleanOperatorArg=59]="BooleanOperatorArg",t[t.ComparisonOperator=60]="ComparisonOperator",t[t.ComparisonOperatorArg=61]="ComparisonOperatorArg",t))(f||{}),A=(t=>(t[t.SelectKeyword=0]="SelectKeyword",t[t.FunctionsWithArguments=1]="FunctionsWithArguments",t[t.Metrics=2]="Metrics",t[t.FromKeyword=3]="FromKeyword",t[t.SchemaKeyword=4]="SchemaKeyword",t[t.Namespaces=5]="Namespaces",t[t.LabelKeys=6]="LabelKeys",t[t.WhereKeyword=7]="WhereKeyword",t[t.GroupByKeywords=8]="GroupByKeywords",t[t.OrderByKeywords=9]="OrderByKeywords",t[t.FunctionsWithoutArguments=10]="FunctionsWithoutArguments",t[t.LimitKeyword=11]="LimitKeyword",t[t.SortOrderDirectionKeyword=12]="SortOrderDirectionKeyword",t[t.ComparisonOperators=13]="ComparisonOperators",t[t.LabelValues=14]="LabelValues",t[t.LogicalOperators=15]="LogicalOperators",t[t.KeywordArguments=16]="KeywordArguments",t[t.Operators=17]="Operators",t[t.Statistic=18]="Statistic",t[t.Period=19]="Period",t[t.Command=20]="Command",t[t.Function=21]="Function",t[t.InKeyword=22]="InKeyword",t))(A||{}),ee=(t=>(t.High="a",t.MediumHigh="d",t.Medium="g",t.MediumLow="k",t.Low="q",t))(ee||{}),Nn=m(64131);class Dn{constructor(){this.tokenTypes={Parenthesis:"delimiter.parenthesis.cloudwatch-dynamicLabels",Whitespace:"white.cloudwatch-dynamicLabels",Keyword:"keyword.cloudwatch-dynamicLabels",Delimiter:"delimiter.cloudwatch-dynamicLabels",Operator:"operator.cloudwatch-dynamicLabels",Identifier:"identifier.cloudwatch-dynamicLabels",Type:"type.cloudwatch-dynamicLabels",Function:"predefined.cloudwatch-dynamicLabels",Number:"number.cloudwatch-dynamicLabels",String:"string.cloudwatch-dynamicLabels",Variable:"variable.cloudwatch-dynamicLabels",Comment:"comment.cloudwatch-dynamicLabels",Regexp:"regexp.cloudwatch-dynamicLabels"}}getCompletionProvider(e,r){return{triggerCharacters:[" ","$",",","(","'"],provideCompletionItems:async(n,a)=>{const o=or(e,r,n,a,this.tokenTypes),l=o?.isWhiteSpace()||o?.isParenthesis()||!o?.range?e.Range.fromPositions(a):o?.range,c=(g,d={})=>({label:g,insertText:g,kind:e.languages.CompletionItemKind.Field,range:l,sortText:ee.Medium,...d});let p=[];const u=o?.next;return!o?.isFunction()&&(!u||u.isWhiteSpace())&&(p=Nn.DYNAMIC_LABEL_PATTERNS.map(g=>c(g)),p.push(c("${PROP('Dim.')}",{sortText:ee.High,insertText:"${PROP('Dim.$0')} ",insertTextRules:e.languages.CompletionItemInsertTextRule.InsertAsSnippet}))),{suggestions:p}}}}}const ir={id:"cloudwatch-dynamicLabels",extensions:[],aliases:[],mimetypes:[],loader:()=>Promise.resolve().then(m.bind(m,64131))},Gn=new Dn;function Pn({label:t,width:e,onChange:r}){const n=(0,Ee.l4)(),a=(0,D.H)({theme:n,width:e}),o=(0,s.useRef)(null),i=(0,s.useCallback)((l,c)=>{l.onDidFocusEditorText(()=>l.trigger(B.id,B.id,{})),l.addCommand(c.KeyMod.Shift|c.KeyCode.Enter,()=>{const u=l.getValue();r(u)});const p=o.current;p!==null&&l.layout({width:p.clientWidth,height:p.clientHeight})},[r]);return s.createElement("div",{ref:o,className:(0,W.cx)(a.wrapper)},s.createElement(qe.p,{containerStyles:(0,W.css)` border: 1px solid ${n.colors.action.disabledBackground}; &:hover { border-color: ${n.components.input.borderColor}; } `,monacoOptions:{scrollBeyondLastLine:!1,fontSize:14,lineNumbers:"off",renderLineHighlight:"none",overviewRulerLanes:0,scrollbar:{vertical:"hidden",horizontal:"hidden"},suggestFontSize:12,padding:{top:6}},language:ir.id,value:t,onBlur:l=>{l!==t&&r(l)},onBeforeEditorMount:l=>Ze(l,ir,Gn),onEditorDidMount:i}))}const lr={id:"cloudwatch-sql",extensions:[".cloudwatchSql"],aliases:["CloudWatch","cloudwatch","CloudWatchSQL"],mimetypes:[],loader:()=>Promise.resolve().then(m.bind(m,26599))},Kn=({region:t,sql:e,onChange:r,datasource:n})=>{(0,s.useEffect)(()=>{n.sqlCompletionItemProvider.setRegion(t)},[t,n]);const a=(0,s.useCallback)((o,i)=>{o.onDidFocusEditorText(()=>o.trigger(B.id,B.id,{})),o.addCommand(i.KeyMod.Shift|i.KeyCode.Enter,()=>{const l=o.getValue();r(l)})},[r]);return s.createElement(qe.p,{height:"150px",language:lr.id,value:e,onBlur:o=>{o!==e&&r(o)},showMiniMap:!1,showLineNumbers:!0,onBeforeEditorMount:o=>Ze(o,lr,n.sqlCompletionItemProvider),onEditorDidMount:a})},cr=[{label:"Metric Search",value:h.$5.Search},{label:"Metric Query",value:h.$5.Query}],Wn=[{label:"Builder",value:h.MQ.Builder},{label:"Code",value:h.MQ.Code}],$n=t=>{const{query:e,datasource:r,extraHeaderElementLeft:n,extraHeaderElementRight:a,onChange:o}=t,[i,l]=(0,s.useState)(!1),[c,p]=(0,s.useState)(!1),u=On(e,t.onChange),g=(0,s.useCallback)(d=>{if(c&&e.metricQueryType===h.$5.Query&&e.metricEditorMode===h.MQ.Code){l(!0);return}o({...e,metricEditorMode:d})},[l,o,c,e]);return(0,s.useEffect)(()=>(n?.(s.createElement(Re.X,{"aria-label":"Metric editor mode",value:cr.find(d=>d.value===e.metricQueryType),options:cr,onChange:({value:d})=>{o({...e,metricQueryType:d})}})),a?.(s.createElement(s.Fragment,null,s.createElement(Rn.S,{options:Wn,size:"sm",value:e.metricEditorMode,onChange:g}),s.createElement(tr.s,{isOpen:i,title:"Are you sure?",body:"You will lose manual changes done to the query if you go back to the visual builder.",confirmText:"Yes, I am sure.",dismissText:"No, continue editing the query manually.",icon:"exclamation-triangle",onConfirm:()=>{l(!1),o({...e,metricEditorMode:h.MQ.Builder})},onDismiss:()=>l(!1)}))),()=>{n?.(void 0),a?.(void 0)}),[e,c,r,o,n,a,i,g]),s.createElement(s.Fragment,null,s.createElement(de.T,{v:.5}),e.metricQueryType===h.$5.Search&&s.createElement(s.Fragment,null,e.metricEditorMode===h.MQ.Builder&&s.createElement(fr,{...t,refId:e.refId,metricStat:e,onChange:d=>t.onChange({...e,...d})}),e.metricEditorMode===h.MQ.Code&&s.createElement(ws,{expression:e.expression??"",onChange:d=>t.onChange({...e,expression:d}),datasource:r})),e.metricQueryType===h.$5.Query&&s.createElement(s.Fragment,null,e.metricEditorMode===h.MQ.Code&&s.createElement(Kn,{region:e.region,sql:e.sqlExpression??"",onChange:d=>{c||p(!0),t.onChange({...u,sqlExpression:d})},datasource:r}),e.metricEditorMode===h.MQ.Builder&&s.createElement(s.Fragment,null,s.createElement(Cs,{query:e,onChange:t.onChange,datasource:r}))),s.createElement(de.T,{v:.5}),s.createElement(ve.p,null,s.createElement(H.S,{label:"ID",width:26,optional:!0,tooltip:"ID can be used to reference other queries in math expressions. The ID can include numbers, letters, and underscore, and must start with a lowercase letter.",invalid:!!e.id&&!/^$|^[a-z][a-zA-Z0-9_]*$/.test(e.id)},s.createElement(D.I,{id:`${e.refId}-cloudwatch-metric-query-editor-id`,onChange:d=>o({...u,id:d.target.value}),type:"text",value:e.id})),s.createElement(H.S,{label:"Period",width:26,tooltip:"Minimum interval between points in seconds."},s.createElement(D.I,{id:`${e.refId}-cloudwatch-metric-query-editor-period`,value:e.period||"",placeholder:"auto",onChange:d=>o({...u,period:d.target.value})})),s.createElement(H.S,{label:"Label",width:26,optional:!0,tooltip:"Change time series legend name using Dynamic labels. See documentation for details."},s.createElement(Pn,{width:52,label:u.label??"",onChange:d=>t.onChange({...e,label:d})}))))};var Qn=m(62247),kn=m(29473),Vn=m(25357);const Bn={queryMode:"Metrics",namespace:"",metricName:"",expression:"",dimensions:{},region:"default",id:"",statistic:"Average",period:"",metricQueryType:h.$5.Search,metricEditorMode:h.MQ.Builder,sqlExpression:"",matchExact:!0},bt={queryMode:"Annotations",namespace:"",region:"default",statistic:"Average"},zn=`fields @timestamp, @message | sort @timestamp desc | limit 20`,Un=(t,e)=>({id:"",region:"default",logGroupNames:e,logGroups:t??[]}),Hn={queryType:h.wf.Regions,region:"default"},jn=[{label:"CloudWatch Metrics",value:"Metrics"},{label:"CloudWatch Logs",value:"Logs"}],Yn=({query:t,onChange:e,datasource:r,extraHeaderElementLeft:n,extraHeaderElementRight:a,dataIsStale:o,data:i,onRunQuery:l})=>{const{queryMode:c,region:p}=t,u=Kr(r.resources,t.region),[g,d]=ct(r),y=ke(t)?!t.expression:!1,E=({value:C})=>{if(C&&C!==c){let I="";C==="Logs"&&(I=zn),e({...r.getDefaultQuery(Qn.zj.Unknown),...t,expression:I,queryMode:C})}},x=async C=>{if(me.config.featureToggles.cloudWatchCrossAccountQuerying&&Oe(t)){const I=await r.resources.isMonitoringAccount(C);e({...t,region:C,accountId:I?t.accountId:void 0})}else e({...t,region:C})},b=me.config.featureToggles.cloudWatchCrossAccountQuerying&&u&&(t.queryMode==="Logs"||Oe(t)&&t.metricQueryType===h.$5.Search);return s.createElement(s.Fragment,null,s.createElement(Qe.K,null,s.createElement(Re.X,{label:"Region",value:p,placeholder:"Select region",allowCustomValue:!0,onChange:({value:C})=>C&&x(C),options:g,isLoading:d}),s.createElement(Re.X,{"aria-label":"Query mode",value:c,options:jn,onChange:E,inputId:`cloudwatch-query-mode-${t.refId}`,id:`cloudwatch-query-mode-${t.refId}`}),n,s.createElement(kn.B,{grow:1}),b&&s.createElement(s.Fragment,null,s.createElement(Vn.C,{text:"Monitoring account",color:"blue",tooltip:"AWS monitoring accounts view data from source accounts so you can centralize monitoring and troubleshoot activities"})),s.createElement(xe.zx,{variant:o?"primary":"secondary",size:"sm",onClick:l,icon:i?.state===N.Gu.Loading?"fa fa-spinner":void 0,disabled:i?.state===N.Gu.Loading||y},"Run queries"),a))},Xn=t=>{const{query:e,onChange:r,data:n}=t,[a,o]=(0,s.useState)(!1),[i,l]=(0,s.useState)(),[c,p]=(0,s.useState)();(0,s.useEffect)(()=>{o(!1)},[n]);const u=(0,s.useCallback)(g=>{o(!0),r(g)},[r]);return s.createElement(s.Fragment,null,s.createElement(Yn,{...t,extraHeaderElementLeft:i,extraHeaderElementRight:c,dataIsStale:a}),Oe(e)&&s.createElement($n,{...t,query:e,onRunQuery:()=>{},onChange:u,extraHeaderElementLeft:l,extraHeaderElementRight:p}),ke(e)&&s.createElement(wn,{...t,query:e,onChange:u}))};var R=m(89967);class ur{constructor(e=(0,te.J)()){this.templateSrv=e}expressionToSqlQuery({select:e,from:r,where:n,groupBy:a,orderBy:o,orderByDirection:i,limit:l}){if(!r||!e?.name||!e?.parameters?.length)return;let c=[];return this.appendSelect(e,c),this.appendFrom(r,c),this.appendWhere(n,c,!0,n?.expressions?.length??0),this.appendGroupBy(a,c),this.appendOrderBy(o,i,c),this.appendLimit(l,c),c.join(" ")}appendSelect(e,r){r.push("SELECT"),this.appendFunction(e,r)}appendFrom(e,r){r.push("FROM"),e?.type===R.az.Function?this.appendFunction(e,r):r.push(this.formatValue(e?.property?.name??""))}appendWhere(e,r,n,a){if(!e)return;const o="expressions"in e&&e.expressions.length>0;if(n&&o&&r.push("WHERE"),e.type===R.az.And){const i=[];if(e.expressions.map(p=>this.appendWhere(p,i,!1,a)),i.length===0)return;const l=i.join(" AND "),c=!n&&a>1&&i.length>1;return r.push(c?`(${l})`:l)}if(e.type===R.az.Or){const i=[];if(e.expressions.map(p=>this.appendWhere(p,i,!1,a)),i.length===0)return;const l=i.join(" OR "),c=!n&&a>1&&i.length>1;r.push(c?`(${l})`:l);return}if(e.type===R.az.Operator)return this.appendOperator(e,r)}appendGroupBy(e,r){const n=[];for(const a of e?.expressions??[])a?.type!==R.az.GroupBy||!a.property.name||n.push(this.formatValue(a.property.name));n.length>0&&r.push(`GROUP BY ${n.join(", ")}`)}appendOrderBy(e,r,n){e&&(n.push("ORDER BY"),this.appendFunction(e,n),n.push(r??"ASC"))}appendLimit(e,r){e&&r.push(`LIMIT ${e}`)}appendOperator(e,r,n){const{property:a,operator:o}=e;!a.name||!o.name||!o.value||r.push(`${this.formatValue(a.name)} ${o.name} '${o.value}'`)}appendFunction(e,r){if(!e?.name)return;const n=(e.parameters??[]).map(a=>a.name&&this.formatValue(a.name)).filter(Boolean).join(", ");r.push(`${e.name}(${n})`)}formatValue(e){const r=/[/\s\.-]/,n=this.templateSrv.replace(e,{},"raw");return r.test(n)?`"${e}"`:e}}var S=m(26599);function St(t){return t?.parameters?.[0].name}function Je(t){if(t?.type===R.az.Property)return t.property.name;if(t?.type===R.az.Function)return t.parameters?.[0].name}function qn(t){if(t?.type===R.az.Function&&t?.parameters?.length)return t?.parameters?.length<=1?[]:(t?.parameters.slice(1)).reduce((r,n)=>n.name?[...r,n.name]:r,[])}function Zn(t){return t?.type===R.az.Function&&t.name===S.SCHEMA}function Jn(t){const e=t.property?.name,r=t.operator?.value,n=t.operator?.name;if(e&&r&&n)return{type:R.az.Operator,property:{type:R.Rv.String,name:e},operator:{value:r,name:n}}}function dr(t){return t.flatMap(e=>e.type===R.az.Operator?e:e.type===R.az.And||e.type===R.az.Or?dr(e.expressions):[])}function _n(t){const e=t.where;return dr(e?.expressions??[])}function es(t){return t.flatMap(e=>e.type===R.az.GroupBy?e:[])}function ts(t){const e=t.groupBy;return es(e?.expressions??[])}function rs(t){return t.reduce((e,r)=>r?{...e,[r]:null}:e,{})}function ae(t,e){return{...t,sql:{...t.sql??{},...e}}}function ns(t,e){const r=t.sql??{};if(t.namespace=e||"",e===void 0)return ae(t,{from:void 0});if(!r.from||r.from.type===R.az.Property)return ae(t,{from:{type:R.az.Property,property:{type:R.Rv.String,name:e}}});if(r.from.type===R.az.Function){const n={type:R.az.FunctionParameter,name:e},a=(r.from.parameters??[]).slice(1);return ae(t,{from:{type:R.az.Function,name:S.SCHEMA,parameters:[n,...a]}})}return t}function ss(t,e){const r=t.sql??{};if(e=Array.isArray(e)?e.map(n=>n.value):[e.value],r.from?.type===R.az.Function&&r.from.parameters?.length){const n=(e??[]).map(o=>({type:R.az.FunctionParameter,name:o})),a=(r.from.parameters??[])[0];return ae(t,{from:{type:R.az.Function,name:S.SCHEMA,parameters:[a,...n]}})}return t}function as(t,e){const r={type:R.az.FunctionParameter,name:e};return ae(t,{select:{type:R.az.Function,...t.sql?.select??{},parameters:[r]}})}function os(t){const e={...t};return delete e.sql?.select?.parameters,e}function mr(t,e){return ae(t,{select:{type:R.az.Function,...t.sql?.select??{},name:e}})}function is(t,e){return ae(t,{orderBy:{type:R.az.Function,name:e}})}function ls(t,e){const r=Je((t.sql??{}).from);if(e){const n={type:R.az.FunctionParameter,name:r};return ae(t,{from:{type:R.az.Function,name:S.SCHEMA,parameters:[n]}})}return ae(t,{from:{type:R.az.Property,property:{type:R.Rv.String,name:r}}})}function cs(t,e){return{type:R.az.Operator,property:{type:R.Rv.String,name:e},operator:t.operator??{}}}function us(t,e){return{type:R.az.Operator,property:t.property??{type:R.Rv.String},operator:{...t.operator,name:e}}}function ds(t,e){return{type:R.az.Operator,property:t.property??{type:R.Rv.String},operator:{...t.operator,value:e}}}function ms(t){return{type:R.az.GroupBy,property:{type:R.Rv.String,name:t}}}const ps=S.STATISTICS.map(q.E),gs=({datasource:t,query:e,onQueryChange:r})=>{const n=e.sql??{},a=n.select?.name;(0,s.useEffect)(()=>{a||r(mr(e,S.STATISTICS[0]))},[a,r,e]);const o=St(n.select),i=Je(n.from),l=qn(n.from),c=Zn(n.from),p=ut(t),u=dt(t,{region:e.region,namespace:i}),g=(0,s.useMemo)(()=>rs(l??[]),[l]),d=Fe(t,{region:e.region,namespace:i,metricName:o,dimensionFilters:g}),y=(0,s.useMemo)(()=>l?.length?[...d,...l.map(q.E)]:d,[d,l]),E=async b=>{const C=await x(b);r(C)},x=async b=>{let{region:C,sql:I,namespace:re}=b;return await t.resources.getMetrics({namespace:re,region:C}).then(le=>{le.some(Te=>Te.value===o)||(I=os(b).sql)}),{...b,sql:I}};return s.createElement(s.Fragment,null,s.createElement(Ye.s,null,s.createElement(H.S,{label:"Namespace",width:16},s.createElement(Z.Ph,{"aria-label":"Namespace",value:i?(0,q.E)(i):null,inputId:`${e.refId}-cloudwatch-sql-namespace`,options:p,allowCustomValue:!0,onChange:({value:b})=>b&&E(ns(e,b))})),s.createElement(H.S,{label:"With schema"},s.createElement(it.r,{id:`${e.refId}-cloudwatch-sql-withSchema`,value:c,onChange:b=>b.target instanceof HTMLInputElement&&r(ls(e,b.target.checked))})),c&&s.createElement(H.S,{label:"Schema labels",disabled:!i},s.createElement(Z.Ph,{id:`${e.refId}-cloudwatch-sql-schema-label-keys`,width:"auto",isMulti:!0,value:l?l.map(q.E):null,options:y,allowCustomValue:!0,onChange:b=>b&&r(ss(e,b))}))),s.createElement(Ye.s,null,s.createElement(H.S,{label:"Metric name",width:16},s.createElement(Z.Ph,{"aria-label":"Metric name",value:o?(0,q.E)(o):null,options:u,allowCustomValue:!0,onChange:({value:b})=>b&&r(as(e,b))})),s.createElement(H.S,{label:"Aggregation",width:16},s.createElement(Z.Ph,{"aria-label":"Aggregation",value:a?(0,q.E)(a):null,options:ge(t,ps),onChange:({value:b})=>b&&r(mr(e,b))}))))},fs=S.COMPARISON_OPERATORS.map(q.E),hs=({query:t,onQueryChange:e,datasource:r})=>{const n=(0,s.useMemo)(()=>_n(t.sql??{}),[t.sql]),[a,o]=(0,s.useState)(n),i=l=>{const c=l.map(g=>({type:R.az.Operator,property:g.property??{type:R.Rv.String},operator:g.operator??{name:S.EQUALS}}));o(c);const p=[];for(const g of c){const d=Jn(g);d&&p.push(d)}const u=p.length?{type:R.az.And,expressions:p}:void 0;e(ae(t,{where:u}))};return s.createElement(Xe.k,{items:a,onChange:i,renderItem:ys(r,t)})};function ys(t,e){function r(n,a,o){return s.createElement(Es,{datasource:t,query:e,filter:n,onChange:a,onDelete:o})}return r}const vs=hs,Es=t=>{const{datasource:e,query:r,filter:n,onChange:a,onDelete:o}=t,i=r.sql??{},l=Je(i.from),c=St(i.select),p=Fe(e,{region:r.region,namespace:l,metricName:c}),u=async()=>!n.property?.name||!l?[]:e.resources.getDimensionValues({region:r.region,namespace:l,metricName:c,dimensionKey:n.property.name}).then(y=>ge(e,y)),[g,d]=(0,lt.Z)(u,[r.region,l,c,n.property?.name]);return s.createElement(Be.B,null,s.createElement(Z.Ph,{width:"auto",value:n.property?.name?(0,q.E)(n.property?.name):null,options:p,allowCustomValue:!0,onChange:({value:y})=>y&&a(cs(n,y))}),s.createElement(Z.Ph,{width:"auto",value:n.operator?.name&&(0,q.E)(n.operator.name),options:fs,onChange:({value:y})=>y&&a(us(n,y))}),s.createElement(Z.Ph,{width:"auto",isLoading:g.loading,value:n.operator?.value&&typeof n.operator?.value=="string"?(0,q.E)(n.operator?.value):null,options:g.value,allowCustomValue:!0,onOpenMenu:d,onChange:({value:y})=>y&&a(ds(n,y))}),s.createElement(ze._,{"aria-label":"remove",icon:"times",variant:"secondary",onClick:o}))},bs=({query:t,datasource:e,onQueryChange:r})=>{const n=t.sql??{},a=(0,s.useMemo)(()=>ts(t.sql??{}),[t.sql]),[o,i]=(0,s.useState)(a),l=Je(n.from),c=St(n.select),p=Fe(e,{region:t.region,namespace:l,metricName:c}),u=(0,s.useMemo)(()=>p.filter(d=>!a.some(y=>y.property.name===d.value)),[p,a]),g=d=>{const y=d.map(b=>({type:R.az.GroupBy,property:{type:R.Rv.String,name:b.property?.name}}));i(y);const E=y.filter(b=>b.property?.name),x=E.length?{type:R.az.And,expressions:E}:void 0;r(ae(t,{groupBy:x}))};return s.createElement(Xe.k,{items:o,onChange:g,renderItem:Ss(u)})};function Ss(t){function e(r,n,a){return s.createElement(As,{options:t,item:r,onChange:n,onDelete:a})}return e}const As=t=>{const{options:e,item:r,onChange:n,onDelete:a}=t,o=r.property?.name;return s.createElement(Be.B,null,s.createElement(Z.Ph,{"aria-label":`Group by ${o??"filter key"}`,width:"auto",value:o?(0,q.E)(o):null,options:e,allowCustomValue:!0,onChange:({value:i})=>i&&n(ms(i))}),s.createElement(ze._,{"aria-label":"remove",icon:"times",variant:"secondary",onClick:a}))},Ts=bs,pr=[{label:S.ASC,value:S.ASC},{label:S.DESC,value:S.DESC}],Is=({query:t,onQueryChange:e,datasource:r})=>{const n=t.sql??{},a=n.orderBy?.name,o=n.orderByDirection;return s.createElement(Ye.s,null,s.createElement(H.S,{label:"Order by",optional:!0,width:16},s.createElement(Be.B,null,s.createElement(Z.Ph,{"aria-label":"Order by",onChange:({value:i})=>i&&e(is(t,i)),options:ge(r,S.STATISTICS.map(q.E)),value:a?(0,q.E)(a):null}),a&&s.createElement(ze._,{"aria-label":"remove",icon:"times",variant:"secondary",onClick:()=>e(ae(t,{orderBy:void 0}))}))),s.createElement(H.S,{label:"Direction",disabled:!a,width:16},s.createElement(Z.Ph,{"aria-label":"Direction",inputId:"cloudwatch-sql-order-by-direction",value:o?(0,q.E)(o):pr[0],options:ge(r,pr),onChange:i=>i&&e(ae(t,{orderByDirection:i.value}))})))};function Cs({query:t,datasource:e,onChange:r}){const n=t.sql??{},a=(0,s.useCallback)(l=>{const p=new ur().expressionToSqlQuery(l.sql??{}),u={...l,sqlExpression:p};r(u)},[r]),[o,i]=(0,s.useState)();return(0,s.useEffect)(()=>{const c=new ur().expressionToSqlQuery(t.sql??{});o!==c&&i(c)},[t,o,i]),s.createElement(Nt._,null,s.createElement(ve.p,null,s.createElement(gs,{query:t,onQueryChange:a,datasource:e})),s.createElement(ve.p,null,s.createElement(H.S,{label:"Filter",optional:!0},s.createElement(vs,{query:t,onQueryChange:a,datasource:e}))),s.createElement(ve.p,null,s.createElement(H.S,{label:"Group by",optional:!0},s.createElement(Ts,{query:t,onQueryChange:a,datasource:e})),s.createElement(Is,{query:t,onQueryChange:a,datasource:e}),s.createElement(H.S,{label:"Limit",optional:!0},s.createElement(D.I,{id:`${t.refId}-cloudwatch-sql-builder-editor-limit`,value:n.limit,onChange:l=>{const c=l.currentTarget.valueAsNumber;a(ae(t,{limit:isNaN(c)?void 0:c}))},type:"number",min:1}))),o&&s.createElement(ve.p,null,!1,s.createElement("pre",null,o??"")))}const gr={id:"cloudwatch-MetricMath",extensions:[],aliases:[],mimetypes:[],loader:()=>Promise.resolve().then(m.bind(m,61955))};function ws({expression:t,onChange:e,datasource:r}){const n=(0,s.useRef)(null),a=(0,s.useCallback)((o,i)=>{o.onDidFocusEditorText(()=>o.trigger(B.id,B.id,{})),o.addCommand(i.KeyMod.Shift|i.KeyCode.Enter,()=>{const c=o.getValue();e(c)});const l=()=>{const c=n.current;if(c!==null&&o.getContentHeight()<200){const p=Math.max(32,o.getContentHeight());c.style.height=`${p}px`,c.style.width="100%";const u=c.clientWidth;o.layout({width:u,height:p})}};o.onDidContentSizeChange(l),l()},[e]);return s.createElement("div",{ref:n},s.createElement(qe.p,{monacoOptions:{scrollBeyondLastLine:!1,fontSize:14,lineNumbers:"off",renderLineHighlight:"none",scrollbar:{vertical:"hidden",horizontal:"hidden"},suggestFontSize:12,wordWrap:"on",padding:{top:6}},language:gr.id,value:t,onBlur:o=>{o!==t&&e(o)},onBeforeEditorMount:o=>Ze(o,gr,r.metricMathCompletionItemProvider),onEditorDidMount:a}))}const _e=["Average","Maximum","Minimum","Sum","SampleCount","IQM"],Rs=/^(p|tm|tc|ts|wm)\d{2}(?:\.\d{1,2})?$/,xs="\\d*(\\.\\d+)?%?:\\d*(\\.\\d+)?%?",Ls=new RegExp(`^(PR|TM|TC|TS|WM)\\((${xs})\\)$`);function fr({refId:t,metricStat:e,datasource:r,disableExpressions:n=!1,onChange:a}){const o=ut(r),i=dt(r,e),l=Fe(r,{...e,dimensionFilters:e.dimensions}),c=mt(r.resources,e.region);(0,s.useEffect)(()=>{r.resources.isMonitoringAccount(e.region).then(g=>{g&&!c.loading&&c.value?.length&&!e.accountId&&a({...e,accountId:"all"}),!c.loading&&c.value&&!c.value.length&&e.accountId&&a({...e,accountId:void 0})})},[c,e,a,r.resources]);const p=async g=>{const d=await u(g);a(d)},u=async g=>{let{metricName:d,namespace:y,region:E}=g;return d?(await r.resources.getMetrics({namespace:y,region:E}).then(x=>{x.find(b=>b.value===d)||(d="")}),{...g,metricName:d}):g};return s.createElement(Nt._,null,s.createElement(ve.p,null,!n&&me.config.featureToggles.cloudWatchCrossAccountQuerying&&s.createElement(_t,{accountId:e.accountId,onChange:g=>{a({...e,accountId:g})},accountOptions:c?.value||[]}),s.createElement(Ye.s,null,s.createElement(H.S,{label:"Namespace",width:26},s.createElement(Z.Ph,{"aria-label":"Namespace",value:e?.namespace&&Ve(e.namespace),allowCustomValue:!0,options:o,onChange:({value:g})=>{g&&p({...e,namespace:g})}})),s.createElement(H.S,{label:"Metric name",width:16},s.createElement(Z.Ph,{"aria-label":"Metric name",value:e?.metricName&&Ve(e.metricName),allowCustomValue:!0,options:i,onChange:({value:g})=>{g&&a({...e,metricName:g})}})),s.createElement(H.S,{label:"Statistic",width:16},s.createElement(Z.Ph,{inputId:`${t}-metric-stat-editor-select-statistic`,allowCustomValue:!0,value:Ve(e.statistic??_e[0]),options:ge(r,_e.filter(g=>g!==e.statistic).map(Ve)),onChange:({value:g})=>{!g||!_e.includes(g)&&!(Rs.test(g)||Ls.test(g))&&!r.templateSrv.containsTemplate(g)||a({...e,statistic:g})}})))),s.createElement(ve.p,null,s.createElement(H.S,{label:"Dimensions"},s.createElement(Pt,{metricStat:e,onChange:g=>a({...e,dimensions:g}),dimensionKeys:l,disableExpressions:n,datasource:r})),!n&&s.createElement(H.S,{label:"Match exact",optional:!0,tooltip:"Only show metrics that exactly match all defined dimension names."},s.createElement(it.r,{id:`${t}-cloudwatch-match-exact`,value:!!e.matchExact,onChange:g=>{a({...e,matchExact:g.currentTarget.checked})}}))))}const Ms={prepareAnnotation:t=>Gr(t)?t:{datasource:t.datasource,enable:t.enable,iconColor:t.iconColor,name:t.name,builtIn:t.builtIn,hide:t.hide,target:{...t.target,...t,statistic:t.statistic||bt.statistic,region:t.region||bt.region,queryMode:"Annotations",refId:t.refId||"annotationQuery"}},prepareQuery:t=>{if(!t.target)return;const{prefixMatching:e,actionPrefix:r,alarmNamePrefix:n,statistic:a,namespace:o,metricName:i,dimensions:l={}}=t.target,c=!!e&&!!r&&!!n,p=!e&&!!o&&!!i&&!!a&&!!Object.values(l).length;if(c||p)return t.target},getDefaultQuery(){return bt},QueryEditor:t=>{const{query:e,onChange:r,datasource:n}=t,[a,o]=ct(n);return Ot(e)?s.createElement(s.Fragment,null,s.createElement(Qe.K,null,s.createElement(Re.X,{label:"Region",value:a.find(i=>i.value===e.region),placeholder:"Select region",allowCustomValue:!0,onChange:({value:i})=>i&&r({...e,region:i}),options:a,isLoading:o})),s.createElement(de.T,{v:.5}),s.createElement(fr,{...t,refId:e.refId,metricStat:e,disableExpressions:!0,onChange:i=>r({...e,...i})}),s.createElement(de.T,{v:.5}),s.createElement(ve.p,null,s.createElement(H.S,{label:"Period",width:26,tooltip:"Minimum interval between points in seconds."},s.createElement(D.I,{value:e.period||"",placeholder:"auto",onChange:i=>r({...e,period:i.target.value})})),s.createElement(H.S,{label:"Enable Prefix Matching",optional:!0},s.createElement(it.r,{value:e.prefixMatching,onChange:i=>{r({...e,prefixMatching:i.currentTarget.checked})}})),s.createElement(H.S,{label:"Action",optional:!0,disabled:!e.prefixMatching},s.createElement(D.I,{value:e.actionPrefix||"",onChange:i=>r({...e,actionPrefix:i.target.value})})),s.createElement(H.S,{label:"Alarm Name",optional:!0,disabled:!e.prefixMatching},s.createElement(D.I,{value:e.alarmNamePrefix||"",onChange:i=>r({...e,alarmNamePrefix:i.target.value})})))):s.createElement(Mt.b,{severity:"error",title:"Invalid annotation query",topSpacing:2},JSON.stringify(e,null,4))}};var hr=m(78209),Le=m(95704);class Os extends w.iL{constructor(e,r){super(),this.started=!1,this.cleanText=n=>n.replace(/[()]/g,"").trim(),this.request=(n,a)=>(0,hr.n)(this.datasource.logsQueryRunner.awsRequest(n,a)),this.start=()=>(this.startTask||(this.startTask=Promise.resolve().then(()=>(this.started=!0,[]))),this.startTask),this.fetchFields=async(n,a)=>{const o=yt((0,te.J)(),n.map(l=>l.name),{},"text");return(await Promise.all(o.map(l=>this.datasource.resources.getLogGroupFields({logGroupName:l,region:a}).then(c=>c.filter(p=>p).map(p=>p.value.name??""))))).flat()},this.handleKeyword=async n=>{const a=await this.getFieldCompletionItems(n?.logGroups,n?.region||"default"),o=[{searchFunctionType:Le.Z.Prefix,label:"Functions",items:Ut.concat(Ht,gt)}];return a.suggestions.push(...o),a},this.handleCommand=async(n,a,o)=>{const i=n.content.toLowerCase(),l=De(a),c=l===n;if(i==="sort")return this.handleSortCommand(c,a,o);if(i==="parse"&&c)return await this.getFieldCompletionItems(o?.logGroups??[],o?.region||"default");const p=be(n.next,"whitespace")&&!n.next?.next,u=p||Fs(n)===a,g=be(a,"punctuation",","),d=g||be(l,"punctuation",",");if(!(u||d))return{suggestions:[]};if(["display","fields"].includes(i)){const y=await this.getFieldCompletionItems(o?.logGroups??[],o?.region||"default");return y.suggestions.push(...this.getFieldAndFilterFunctionCompletionItems().suggestions),y}if(i==="stats"){const y=this.getStatsAggCompletionItems();return(g||p)&&y?.suggestions.forEach(E=>{E.skipFilter=!0}),y}if(i==="filter"&&c){const y=await this.getFieldCompletionItems(o?.logGroups,o?.region||"default"),E=this.getBoolFuncCompletionItems();return y.suggestions.push(...E.suggestions),y}return{suggestions:[]}},this.handleComparison=async n=>{const a=await this.getFieldCompletionItems(n?.logGroups,n?.region||"default"),o=this.getComparisonCompletionItems();return a.suggestions.push(...o.suggestions),a},this.getCommandCompletionItems=()=>({suggestions:[{searchFunctionType:Le.Z.Prefix,label:"Commands",items:Bt}]}),this.getFieldAndFilterFunctionCompletionItems=()=>({suggestions:[{searchFunctionType:Le.Z.Prefix,label:"Functions",items:Xt}]}),this.getStatsAggCompletionItems=()=>({suggestions:[{searchFunctionType:Le.Z.Prefix,label:"Functions",items:Yt}]}),this.getBoolFuncCompletionItems=()=>({suggestions:[{searchFunctionType:Le.Z.Prefix,label:"Functions",items:jt}]}),this.getComparisonCompletionItems=()=>({suggestions:[{searchFunctionType:Le.Z.Prefix,label:"Functions",items:zt.concat(jt)}]}),this.getFieldCompletionItems=async(n,a)=>n?{suggestions:[{label:"Fields",items:(await this.fetchFields(n,a)).map(i=>({label:i,insertText:i.match(/@?[_a-zA-Z]+[_.0-9a-zA-Z]*/)?void 0:`\`${i}\``}))}]}:{suggestions:[]},this.datasource=e,Object.assign(this,r)}getSyntax(){return ft}isStatsQuery(e){const r=this.getSyntax();return!!(kt().tokenize(e,r)??[]).find(a=>typeof a!="string"&&a.content.toString().toLowerCase()==="stats"&&a.type==="query-command")}async provideCompletionItems(e,r){const{value:n}=e,a=n?.data.get("tokens");if(!a||!a.length)return{suggestions:[]};const o=a.filter(u=>u.offsets.start<=n.selection?.start?.offset&&u.offsets.end>=n.selection?.start?.offset)[0],i=!o.prev,l=De(o);if(i||!i&&l?.types.includes("command-separator"))return this.getCommandCompletionItems();if(Gs(o))return await this.getFieldCompletionItems(r?.logGroups,r?.region||"default");if(Ps("by",o))return this.handleKeyword(r);if(l?.types.includes("comparison-operator"))return this.handleComparison(r);const p=Ns(o);return p?await this.handleCommand(p,o,r):{suggestions:[]}}async handleSortCommand(e,r,n){return e?await this.getFieldCompletionItems(n?.logGroups,n?.region||"default"):be(De(r),"field-name")?{suggestions:[{searchFunctionType:Le.Z.Prefix,label:"Sort Order",items:[{label:"asc"},{label:"desc"}]}]}:{suggestions:[]}}}function Fs(t){let e=t;for(;e.next;)if(e.next.types.includes("whitespace"))e=e.next;else return e.next;return null}function De(t){let e=t;for(;e.prev;)if(be(e.prev,"whitespace"))e=e.prev;else return e.prev;return null}function Ns(t){let e=t;for(;e.prev;)if(e=e.prev,e.types.includes("query-command")&&(!e.prev||be(De(e),"command-separator")))return e;return null}const Ds=["avg","count","count_distinct","earliest","latest","sortsFirst","sortsLast","max","min","pct","stddev","ispresent","fromMillis","toMillis","isempty","isblank","isValidIp","isValidIpV4","isValidIpV6","isIpInSubnet","isIpv4InSubnet","isIpv6InSubnet"].map(t=>t.toLowerCase());function Gs(t){const e=De(t);if(!e)return!1;const r=t.content==="("?t:e.content==="("?e:void 0;if(r){const n=De(r);if(n)return Ds.includes(n.content.toLowerCase())&&n.types.includes("function")}return!1}function Ps(t,e){const r=yr(e,["whitespace","function","punctuation","field-name","number"]);if(be(r,"keyword","by")){const n=yr(e,["whitespace"]);if(n===r||be(n,"punctuation",","))return!0}return!1}function be(t,e,r){return!(!t?.types.includes(e)||r&&t?.content.toLowerCase()!==r)}function yr(t,e){let r=t.prev;e:for(;r;){for(const n of e)if(typeof n=="string"){if(r.types.includes(n)){r=r.prev;continue e}}else if(r.types.includes(n.type)&&r.content.toLowerCase()===n.value){r=r.prev;continue e}break}return r}var et=m(39317);class At{constructor(e,r=(0,et.J)()){this.resources=e,this.templateSrv=r,this.templateSrv=r,this.tokenTypes={Parenthesis:"delimiter.parenthesis",Whitespace:"white",Keyword:"keyword",Delimiter:"delimiter",Operator:"operator",Identifier:"identifier",Type:"type",Function:"predefined",Number:"number",String:"string",Variable:"variable",Comment:"comment",Regexp:"regexp"}}getStatementPosition(e){return f.Unknown}getSuggestionKinds(e){return[]}getSuggestions(e,r,n,a,o){return Promise.reject([])}getCompletionProvider(e,r){return{triggerCharacters:[" ","$",",","(","'"],provideCompletionItems:async(n,a)=>{const o=or(e,r,n,a,this.tokenTypes),i=this.getStatementPosition(o),l=this.getSuggestionKinds(i);return{suggestions:await this.getSuggestions(e,o,l,i,a)}}}}}const P={Parenthesis:"delimiter.parenthesis.sql",Whitespace:"white.sql",Keyword:"keyword.sql",Delimiter:"delimiter.sql",Operator:"operator.sql",Identifier:"identifier.sql",Type:"type.sql",Function:"predefined.sql",Number:"number.sql",String:"string.sql",Variable:"variable.sql",Comment:"comment.sql",Regexp:"regexp.sql"};function Ks(t){const e=t?.getPreviousNonWhiteSpaceToken(),r=t?.getPreviousKeyword(),n=t?.getPreviousNonWhiteSpaceToken()?.is(P.Operator,"/");return t===null||t.isWhiteSpace()&&t.previous===null||t.is(P.Keyword,S.SELECT)&&t.previous===null||n||t.isIdentifier()&&(n||t?.previous===null)?f.SelectKeyword:e?.value===S.SELECT?f.AfterSelectKeyword:(e?.is(P.Parenthesis,"(")||t?.is(P.Parenthesis,"()"))&&r?.value===S.SELECT?f.AfterSelectFuncFirstArgument:r?.value===S.SELECT&&e?.isParenthesis()?f.FromKeyword:e?.value===S.FROM?f.AfterFromKeyword:(e?.is(P.Parenthesis,"(")||t?.is(P.Parenthesis,"()"))&&r?.value===S.SCHEMA?f.SchemaFuncFirstArgument:r?.value===S.SCHEMA&&e?.is(P.Delimiter,",")?f.SchemaFuncExtraArgument:r?.value===S.FROM&&e?.isDoubleQuotedString()||r?.value===S.FROM&&e?.isVariable()||r?.value===S.SCHEMA&&e?.is(P.Parenthesis,")")?f.AfterFrom:r?.value===S.WHERE&&(e?.isKeyword()||e?.is(P.Parenthesis,"(")||e?.is(P.Operator,S.AND))?f.WhereKey:r?.value===S.WHERE&&(e?.isIdentifier()||e?.isDoubleQuotedString())?f.WhereComparisonOperator:r?.value===S.WHERE&&(e?.is(P.Operator,S.EQUALS)||e?.is(P.Operator,S.NOT_EQUALS))?f.WhereValue:r?.value===S.WHERE&&(e?.isString()||e?.is(P.Parenthesis,")"))?f.AfterWhereValue:r?.is(P.Keyword,S.BY)&&r?.getPreviousKeyword()?.is(P.Keyword,S.GROUP)&&(e?.is(P.Keyword,S.BY)||e?.is(P.Delimiter,","))?f.AfterGroupByKeywords:r?.is(P.Keyword,S.BY)&&r?.getPreviousKeyword()?.is(P.Keyword,S.GROUP)&&(e?.isIdentifier()||e?.isDoubleQuotedString())?f.AfterGroupBy:e?.is(P.Keyword,S.BY)&&e?.getPreviousKeyword()?.is(P.Keyword,S.ORDER)?f.AfterOrderByKeywords:r?.is(P.Keyword,S.BY)&&r?.getPreviousKeyword()?.is(P.Keyword,S.ORDER)&&e?.is(P.Parenthesis)&&e?.getPreviousNonWhiteSpaceToken()?.is(P.Function)?f.AfterOrderByFunction:r?.is(P.Keyword,S.DESC)||r?.is(P.Keyword,S.ASC)?f.AfterOrderByDirection:f.Unknown}function Ws(t){switch(t){case f.SelectKeyword:return[A.SelectKeyword];case f.AfterSelectKeyword:return[A.FunctionsWithArguments];case f.AfterSelectFuncFirstArgument:return[A.Metrics];case f.AfterFromKeyword:return[A.Namespaces,A.SchemaKeyword];case f.SchemaFuncFirstArgument:return[A.Namespaces];case f.SchemaFuncExtraArgument:return[A.LabelKeys];case f.FromKeyword:return[A.FromKeyword];case f.AfterFrom:return[A.WhereKeyword,A.GroupByKeywords,A.OrderByKeywords,A.LimitKeyword];case f.WhereKey:return[A.LabelKeys];case f.WhereComparisonOperator:return[A.ComparisonOperators];case f.WhereValue:return[A.LabelValues];case f.AfterWhereValue:return[A.LogicalOperators,A.GroupByKeywords,A.OrderByKeywords,A.LimitKeyword];case f.AfterGroupByKeywords:return[A.LabelKeys];case f.AfterGroupBy:return[A.OrderByKeywords,A.LimitKeyword];case f.AfterOrderByKeywords:return[A.FunctionsWithoutArguments];case f.AfterOrderByFunction:return[A.SortOrderDirectionKeyword,A.LimitKeyword];case f.AfterOrderByDirection:return[A.LimitKeyword]}return[]}const vr=t=>t?.getPreviousOfType(P.Keyword,S.SELECT)??null,$s=t=>{const e=vr(t)?.getNextNonWhiteSpaceToken();return e?.isVariable()||e?.isFunction()?e:null},Tt=t=>{const e=$s(t)?.next?.next;return e?.isVariable()||e?.isIdentifier()?e:null},Qs=t=>vr(t)?.getNextOfType(P.Keyword,S.FROM),It=t=>{const r=Qs(t)?.getNextNonWhiteSpaceToken();if(r?.isDoubleQuotedString()||r?.isVariable()&&r?.value.toUpperCase()!==S.SCHEMA)return r;if(r?.isKeyword()&&r.next?.is(P.Parenthesis,"(")){const n=r.next?.next;if(n?.isDoubleQuotedString()||n?.isVariable())return n}return null};class ks extends At{constructor(e,r=(0,et.J)()){super(e,r),this.region=e.getActualRegion()??"",this.getStatementPosition=Ks,this.getSuggestionKinds=Ws,this.tokenTypes=P}setRegion(e){this.region=e}async getSuggestions(e,r,n,a,o){let i=[];const c=r?.isWhiteSpace()||r?.isParenthesis()||!r?.range?e.Range.fromPositions(o):r?.range,p=(g,d={})=>({label:g,insertText:g,kind:e.languages.CompletionItemKind.Field,range:c,sortText:ee.Medium,...d});function u(g,d={}){i=[...i,p(g,d)]}for(const g of n)switch(g){case A.SelectKeyword:u(S.SELECT,{insertText:`${S.SELECT} $0`,insertTextRules:e.languages.CompletionItemInsertTextRule.InsertAsSnippet,kind:e.languages.CompletionItemKind.Keyword,command:B});break;case A.FunctionsWithArguments:S.STATISTICS.map(E=>u(E,{insertText:`${E}($0)`,insertTextRules:e.languages.CompletionItemInsertTextRule.InsertAsSnippet,command:B,kind:e.languages.CompletionItemKind.Function}));break;case A.FunctionsWithoutArguments:S.STATISTICS.map(E=>u(E,{insertText:`${E}() `,insertTextRules:e.languages.CompletionItemInsertTextRule.InsertAsSnippet,command:B,kind:e.languages.CompletionItemKind.Function}));break;case A.Metrics:{const E=It(r);if(E?.value)(await this.resources.getMetrics({namespace:E?.value.replace(/\"/g,""),region:this.region})).forEach(b=>b.value&&u(b.value));else{const x=await this.resources.getAllMetrics({region:this.region});(0,z.uniq)(x.map(b=>b.metricName)).forEach(b=>b&&u(b,{insertText:b}))}}break;case A.FromKeyword:u(S.FROM,{insertText:`${S.FROM} `,command:B});break;case A.SchemaKeyword:u(S.SCHEMA,{sortText:ee.High,insertText:`${S.SCHEMA}($0)`,insertTextRules:e.languages.CompletionItemInsertTextRule.InsertAsSnippet,command:B,kind:e.languages.CompletionItemKind.Function});break;case A.Namespaces:const d=Tt(r);let y=[];if(d?.value){const E=await this.resources.getMetrics({region:this.region}),x=this.templateSrv.replace(d.value);y=E.filter(b=>b.metricName===x).map(b=>b.namespace)}else y=(await this.resources.getNamespaces()).map(x=>x.value);y.map(E=>u(`"${E}"`,{insertText:`"${E}"`}));break;case A.LabelKeys:{const E=Tt(r),x=It(r);if(x?.value){let b={},C;a===f.SchemaFuncExtraArgument?C=x?.getNextUntil(this.tokenTypes.Parenthesis,[this.tokenTypes.Delimiter,this.tokenTypes.Whitespace]):a===f.AfterGroupByKeywords&&(C=r?.getPreviousUntil(this.tokenTypes.Keyword,[this.tokenTypes.Delimiter,this.tokenTypes.Whitespace])),b=(C||[]).reduce((re,le)=>({...re,[le.value]:null}),{}),(await this.resources.getDimensionKeys({namespace:this.templateSrv.replace(x.value.replace(/\"/g,"")),region:this.templateSrv.replace(this.region),metricName:E?.value,dimensionFilters:b})).map(re=>{const le=/[\s\.-]/.test(re.value??"")?`"${re.value}"`:re.value;le&&u(le)})}}break;case A.LabelValues:{const E=It(r),x=Tt(r),b=r?.getPreviousNonWhiteSpaceToken()?.getPreviousNonWhiteSpaceToken();E?.value&&b?.value&&x?.value&&(await this.resources.getDimensionValues({region:this.region,namespace:E.value.replace(/\"/g,""),metricName:x.value,dimensionKey:b.value})).map(I=>u(`'${I.value}'`,{insertText:`'${I.value}' `,command:B}))}break;case A.LogicalOperators:S.LOGICAL_OPERATORS.map(E=>u(`${E}`,{insertText:`${E} `,command:B,sortText:ee.MediumHigh}));break;case A.WhereKeyword:u(`${S.WHERE}`,{insertText:`${S.WHERE} `,command:B,sortText:ee.High});break;case A.ComparisonOperators:S.COMPARISON_OPERATORS.map(E=>u(`${E}`,{insertText:`${E} `,command:B}));break;case A.GroupByKeywords:u(`${S.GROUP} ${S.BY}`,{insertText:`${S.GROUP} ${S.BY} `,command:B,sortText:ee.MediumHigh});break;case A.OrderByKeywords:u(`${S.ORDER} ${S.BY}`,{insertText:`${S.ORDER} ${S.BY} `,command:B,sortText:ee.Medium});break;case A.LimitKeyword:u(S.LIMIT,{insertText:`${S.LIMIT} `,sortText:ee.MediumLow});break;case A.SortOrderDirectionKeyword:[S.ASC,S.DESC].map(E=>u(E,{insertText:`${E} `,command:B}));break}return this.templateSrv.getVariables().map(g=>{const d=`$${g.name}`;u(d,{range:c,label:d,insertText:d,kind:e.languages.CompletionItemKind.Variable,sortText:ee.Low})}),i}}var V=m(98256);const ne={Parenthesis:`delimiter.parenthesis.${se}`,Whitespace:`white.${se}`,Keyword:`keyword.${se}`,Delimiter:`delimiter.${se}`,Operator:`operator.${se}`,Identifier:`identifier.${se}`,Type:`type.${se}`,Function:`predefined.${se}`,Number:`number.${se}`,String:`string.${se}`,Variable:`variable.${se}`,Comment:`comment.${se}`,Regexp:`regexp.${se}`},Vs=t=>{const e=t?.getPreviousNonWhiteSpaceToken(),r=t?.getNextNonWhiteSpaceToken(),n=t?.value?.toLowerCase(),a=e?.value?.toLowerCase();if(t?.is(ne.Comment))return f.Comment;if(t?.isFunction())return f.Function;if(t===null||t?.isWhiteSpace()&&e===null&&r===null||e?.is(ne.Delimiter,"|")&&t?.isWhiteSpace()||t?.isIdentifier()&&(e?.is(ne.Delimiter,"|")||e===null))return f.NewCommand;if(t?.is(ne.Delimiter,")")||t?.isWhiteSpace()&&e?.is(ne.Delimiter,")")){const i=t?.getPreviousOfType(ne.Delimiter,"(")?.getPreviousNonWhiteSpaceToken()?.value?.toLowerCase();if(i){if(V.LOGS_COMMANDS.includes(i))return f.AfterCommand;if(V.LOGS_FUNCTION_OPERATORS.includes(i))return f.AfterFunction}}if(t?.isKeyword()&&n)switch(n){case V.DEDUP:return f.DedupKeyword;case V.DISPLAY:return f.DisplayKeyword;case V.FIELDS:return f.FieldsKeyword;case V.FILTER:return f.FilterKeyword;case V.LIMIT:return f.LimitKeyword;case V.PARSE:return f.ParseKeyword;case V.STATS:return f.StatsKeyword;case V.SORT:return f.SortKeyword;case"as":return f.AsKeyword;case"by":return f.ByKeyword;case"in":return f.InKeyword;case"like":return f.LikeKeyword}if(t?.isWhiteSpace()&&e?.isKeyword&&a)switch(a){case V.DEDUP:return f.AfterDedupKeyword;case V.DISPLAY:return f.AfterDisplayKeyword;case V.FIELDS:return f.AfterFieldsKeyword;case V.FILTER:return f.AfterFilterKeyword;case V.LIMIT:return f.AfterLimitKeyword;case V.PARSE:return f.AfterParseKeyword;case V.STATS:return f.AfterStatsKeyword;case V.SORT:return f.AfterSortKeyword;case"as":return f.AfterAsKeyword;case"by":return f.AfterByKeyword;case"in":return f.AfterInKeyword;case"like":return f.AfterLikeKeyword}if(t?.is(ne.Operator)&&n){if(["+","-","*","/","^","%"].includes(n))return f.ArithmeticOperator;if(["=","!=","<",">","<=",">="].includes(n))return f.ComparisonOperator;if(V.LOGS_LOGIC_OPERATORS.includes(n))return f.BooleanOperator}if(e?.is(ne.Operator)&&a){if(["+","-","*","/","^","%"].includes(a))return f.ArithmeticOperatorArg;if(["=","!=","<",">","<=",">="].includes(a))return f.ComparisonOperatorArg;if(V.LOGS_LOGIC_OPERATORS.includes(a))return f.BooleanOperatorArg}if(t?.isIdentifier()||t?.isNumber()||t?.is(ne.Parenthesis,"()")||t?.is(ne.Delimiter,",")||t?.is(ne.Parenthesis,")")||t?.isWhiteSpace()&&e?.is(ne.Delimiter,",")||t?.isWhiteSpace()&&e?.isIdentifier()||t?.isWhiteSpace()&&e?.isKeyword()&&a&&V.LOGS_COMMANDS.includes(a)){const o=t?.getPreviousOfType(ne.Keyword),i=t?.getPreviousOfType(ne.Function);if(o!==null&&i===null)return o.value===V.SORT?f.SortArg:o.value===V.FILTER?f.FilterArg:f.CommandArg;if(i!==null&&o===null)return f.FunctionArg;if(o!==null&&i!==null){if(o.range.startLineNumber>i.range.startLineNumber||o.range.endColumn>i.range.endColumn)return o.value===V.SORT?f.SortArg:o.value===V.FILTER?f.FilterArg:f.CommandArg;if(i.range.startLineNumber>o.range.startLineNumber||i.range.endColumn>o.range.endColumn)return f.FunctionArg}}return f.Unknown};function Bs(t){switch(t){case f.NewCommand:return[A.Command];case f.AfterSortKeyword:case f.SortArg:return[A.SortOrderDirectionKeyword,A.Function];case f.AfterDisplayKeyword:case f.AfterFieldsKeyword:case f.AfterFilterKeyword:case f.AfterStatsKeyword:case f.AfterLimitKeyword:case f.AfterParseKeyword:case f.AfterDedupKeyword:case f.CommandArg:case f.FunctionArg:case f.ArithmeticOperatorArg:case f.BooleanOperatorArg:case f.ComparisonOperatorArg:return[A.Function];case f.FilterArg:return[A.InKeyword,A.Function]}return[]}class zs extends At{constructor(e,r=(0,et.J)()){super(e,r),this.getStatementPosition=Vs,this.getSuggestionKinds=Bs,this.tokenTypes=ne}async getSuggestions(e,r,n,a,o){const i=[],c=r?.isWhiteSpace()||r?.isParenthesis()||!r?.range?e.Range.fromPositions(o):r?.range;function p(g,d={}){return{label:g,insertText:g,kind:e.languages.CompletionItemKind.Field,range:c,sortText:ee.Medium,...d}}function u(g,d={}){i.push(p(g,d))}for(const g of n){switch(g){case A.Command:V.LOGS_COMMANDS.forEach(d=>{u(d,{insertText:`${d} $0`,insertTextRules:e.languages.CompletionItemInsertTextRule.InsertAsSnippet,command:B})});break;case A.Function:V.LOGS_FUNCTION_OPERATORS.forEach(d=>{u(d,{insertText:`${d}($0)`,insertTextRules:e.languages.CompletionItemInsertTextRule.InsertAsSnippet,command:B})});break;case A.SortOrderDirectionKeyword:V.SORT_DIRECTION_KEYWORDS.forEach(d=>{u(d,{sortText:ee.High})});break;case A.InKeyword:u("in []",{insertText:'in ["$0"]',insertTextRules:e.languages.CompletionItemInsertTextRule.InsertAsSnippet,kind:e.languages.CompletionItemKind.Snippet,sortText:ee.High});break}this.templateSrv.getVariables().map(d=>{const y=`$${d.name}`;u(y,{range:c,label:y,insertText:y,kind:e.languages.CompletionItemKind.Variable,sortText:ee.Low})})}return i}}var Ue=m(61955);const He={Parenthesis:"delimiter.parenthesis.cloudwatch-MetricMath",Whitespace:"white.cloudwatch-MetricMath",Keyword:"keyword.cloudwatch-MetricMath",Delimiter:"delimiter.cloudwatch-MetricMath",Operator:"operator.cloudwatch-MetricMath",Identifier:"identifier.cloudwatch-MetricMath",Type:"type.cloudwatch-MetricMath",Function:"predefined.cloudwatch-MetricMath",Number:"number.cloudwatch-MetricMath",String:"string.cloudwatch-MetricMath",Variable:"variable.cloudwatch-MetricMath",Comment:"comment.cloudwatch-MetricMath",Regexp:"regexp.cloudwatch-MetricMath"};function Us(t){const e=t?.getPreviousNonWhiteSpaceToken();if(t&&t.isString())return f.WithinString;if(t&&e){const r=t.getPreviousOfType(He.Function),n=e.is(He.Delimiter,","),a=r&&r.value==="SEARCH",o=t.getPreviousUntil(He.Function,[],"SEARCH")||[];if(a){if(o.filter(({value:l})=>l==="'").length===1)return f.WithinString;const i=e.getPreviousOfType(He.Delimiter,",");return i&&i.range.startColumn>r.range.startColumn&&i.range.startLineNumber>=r.range.startLineNumber?f.SearchFuncThirdArg:f.SearchFuncSecondArg}if(!a&&n)return f.PredefinedFuncSecondArg}return e?.endsWith(")")?f.AfterFunction:!t||!t.isString()?f.PredefinedFunction:f.Unknown}function Hs(t){switch(t){case f.PredefinedFunction:return[A.FunctionsWithArguments];case f.PredefinedFuncSecondArg:return[A.FunctionsWithArguments,A.KeywordArguments];case f.AfterFunction:return[A.Operators];case f.SearchFuncSecondArg:return[A.Statistic];case f.SearchFuncThirdArg:return[A.Period]}return[]}class js extends At{constructor(e,r=(0,et.J)()){super(e,r),this.getStatementPosition=Us,this.getSuggestionKinds=Hs,this.tokenTypes=He}async getSuggestions(e,r,n,a,o){let i=[];const c=r?.isWhiteSpace()||r?.isParenthesis()||!r?.range?e.Range.fromPositions(o):r?.range,p=(g,d={})=>({label:g,insertText:g,kind:e.languages.CompletionItemKind.Field,range:c,sortText:ee.Medium,...d});function u(g,d={}){i=[...i,p(g,d)]}for(const g of n)switch(g){case A.FunctionsWithArguments:Ue.METRIC_MATH_FNS.map(d=>u(d,{insertText:d==="SEARCH"?`${d}('$0')`:`${d}($0)`,insertTextRules:e.languages.CompletionItemInsertTextRule.InsertAsSnippet,command:B,kind:e.languages.CompletionItemKind.Function}));break;case A.KeywordArguments:Ue.METRIC_MATH_KEYWORDS.map(d=>u(d,{insertText:d,command:B,kind:e.languages.CompletionItemKind.Keyword,sortText:ee.MediumHigh}));break;case A.Statistic:Ue.METRIC_MATH_STATISTIC_KEYWORD_STRINGS.map(d=>u(d,{insertText:`'${d}', `,command:B}));break;case A.Operators:Ue.METRIC_MATH_OPERATORS.map(d=>u(d,{insertText:`${d} `,command:B}));break;case A.Period:u("$__period_auto",{kind:e.languages.CompletionItemKind.Variable,sortText:"a",detail:"Sets period dynamically to adjust to selected time range."}),Ue.METRIC_MATH_PERIODS.map((d,y)=>u(d.toString(),{kind:e.languages.CompletionItemKind.Value,sortText:String.fromCharCode(97+y)}));break}return this.templateSrv.getVariables().map(g=>{const d=`$${g.name}`;u(d,{range:c,label:d,insertText:d,kind:e.languages.CompletionItemKind.Variable,sortText:ee.Low})}),i}}var Me=m(39343),Ge=m(35306),Er=m(73289),br=m(18771);const Sr=(t,e=7e3)=>{const r=(0,z.memoize)((...n)=>(0,z.debounce)(t,e,{leading:!0}),(...n)=>JSON.stringify(n));return(...n)=>r(...n)(...n)};class tt{constructor(e,r){this.instanceSettings=e,this.dsQueryEndpoint="/api/ds/query",this.debouncedCustomAlert=Sr(Ys,br.AppNotificationTimeout.Error),this.templateSrv=r,this.ref=(0,O.iU)(e)}awsRequest(e,r,n={}){const a={method:"POST",url:e,data:r,headers:n};return(0,Er.i)().fetch(a)}convertDimensionFormat(e,r){return Object.entries(e).reduce((n,[a,o])=>{if(a=this.replaceVariableAndDisplayWarningIfMulti(a,r,!0,"dimension keys"),Array.isArray(o))return{...n,[a]:o};if(!o)return{...n,[a]:null};const i=this.expandVariableToArray(o,r);return{...n,[a]:i}},{})}expandVariableToArray(e,r){const n=this.templateSrv.getVariableName(e),a=this.templateSrv.getVariables().find(({name:o})=>o===n);return n&&a?(a?.type==="custom"||a?.type==="query"||a?.type==="datasource")&&a.multi?this.templateSrv.replace(e,r,"pipe").split("|"):[this.templateSrv.replace(e,r)]:[e]}convertMultiFilterFormat(e,r){return Object.entries(e).reduce((n,[a,o])=>{const i=this.replaceVariableAndDisplayWarningIfMulti(a,{},!0,r);if(!o)return{...n,[i]:null};const l=[],c=o.reduce((p,u)=>{const g=this.expandVariableToArray(u,{});return[...p,...g]},l);return{...n,[i]:c}},{})}replaceVariableAndDisplayWarningIfMulti(e,r,n,a){if(n&&e){const i=this.templateSrv.getVariables().find(({name:c})=>c===this.templateSrv.getVariableName(e));(i?.type==="custom"||i?.type==="query"||i?.type==="datasource")&&i.multi&&this.debouncedCustomAlert("CloudWatch templating error",`Multi template variables are not supported for ${a||e}`)}return this.templateSrv.replace(e,r)}getActualRegion(e){return e==="default"||e===void 0||e===""?this.instanceSettings.jsonData.defaultRegion??"":e}getVariables(){return this.templateSrv.getVariables().map(e=>`$${e.name}`)}}const Ys=(t,e)=>pe.h.dispatch((0,j.$l)((0,_.t_)(t,e)));class Xs extends tt{constructor(e,r){super(e,r)}handleAnnotationQuery(e,r){return this.awsRequest(this.dsQueryEndpoint,{from:r.range.from.valueOf().toString(),to:r.range.to.valueOf().toString(),queries:e.map(n=>({...n,statistic:this.templateSrv.replace(n.statistic),region:this.templateSrv.replace(this.getActualRegion(n.region)),namespace:this.templateSrv.replace(n.namespace),metricName:this.templateSrv.replace(n.metricName),dimensions:this.convertDimensionFormat(n.dimensions??{},{}),period:n.period??"",actionPrefix:n.actionPrefix??"",alarmNamePrefix:n.alarmNamePrefix??"",type:"annotationQuery",datasource:this.ref}))}).pipe((0,Me.U)(n=>({data:(0,Ge.z1)(n).data})))}}var Ar=m(22479),Tr=m(91053),qs=m(9045),Zs=m(53146),Ir=m(32900),Js=m(91729),_s=m(98405),ea=m(76970),ta=m(83639),ra=m(90581),Cr=m(56469),Ct=m(48592),wt=m(51451),na=m(10864);async function sa(t,e,r,n,a,o,i){const l=(p,u)=>n(p,e.scopedVars,!1,u),c=p=>a(p,e.scopedVars);for(const p of t.data){const u=e.targets.find(d=>d.refId===p.refId),g=o(l(u.region??"","region"));for(const d of p.fields)if(d.name==="@xrayTraceId"&&i){o(l(u.region??"","region"));const y=await aa(i,g);y&&(d.config.links=[y])}else d.config.links=[oa(u,r,g,l,c)]}}async function aa(t,e){let r;try{r=await(0,na.F)().get(t)}catch(n){console.error("Could not load linked xray data source, it was probably deleted after it was linked",n);return}return{title:r.name,url:"",internal:{query:{query:"${__value.raw}",queryType:"getTrace",region:e},datasourceUid:t,datasourceName:r.name}}}function oa(t,e,r,n,a){const o=(t.logGroups??[]).filter(d=>d?.arn).map(d=>(d.arn??"").replace(/:\*$/,"")),i=t.logGroupNames??[],l=o?.length?o:i,c=t.expression?n(t.expression):"",p=l?.flatMap(a),u={end:e.to.toISOString(),start:e.from.toISOString(),timeType:"ABSOLUTE",tz:"UTC",editorString:c,isLiveTail:!1,source:p};return{url:Wt(u,r),title:"View in CloudWatch console",targetBlank:!0}}function ia(t,e,r){const n=new Date;let a=0,o,i,l={};const c=p=>Math.pow(2,p)*1e3+Math.random()*100;return new Ct.y(p=>{function u(g){i=t(g).subscribe({next(d){const y=(0,Ge.z1)({data:{results:l}}).data||[];p.next({frames:[...y,...d]}),p.complete()},error(d){if(typeof d=="string"){p.error(d);return}const y=la(d);if(!y){p.error(d);return}if(!y.errors.length){p.error(d);return}if(r(a,n.valueOf())){if(Object.keys(l).length||Object.keys(y.good).length){const E=(0,Ge.z1)({data:{results:{...y.good??{},...l??{}}}});E.error={...E.error??{},message:`Some queries timed out: ${y.errorMessage}`},p.next({error:E.error,frames:E.data}),p.complete()}else{const E=(0,Ge.z1)({data:{results:d.data?.results??{}}});p.error(E.error)}return}l={...l,...y.good},o=setTimeout(()=>{a++,u(y.errors)},c(a+1))}})}return u(e),()=>{clearTimeout(o),i.unsubscribe()}})}function la(t){const e=t.data?.results;if(e)return Object.keys(e).reduce((r,n)=>(e[n].error?.startsWith("LimitExceededException")?(r.errorMessage=e[n].error,r.errors.push(t.config.data.queries.find(a=>a.refId===n))):r.good[n]=e[n],r),{errors:[],good:{},errorMessage:""})}var ca=m(85202);const ua=({startPeriod:t=0,endPeriod:e=5e3,step:r=1e3},n=ca.z)=>new Ct.y(a=>{const o={subscriber:a,counter:0,period:t,step:r,endPeriod:e};return a.add(n.schedule(da,t,o)),a});function da(t){if(!t)return;const{subscriber:e,counter:r,period:n,step:a,endPeriod:o}=t;e.next(r);const i=Math.min(n+a,o);this.schedule({subscriber:e,counter:r+1,period:i,step:a,endPeriod:o},i)}const ma="__log__grafana_internal__",pa="__logstream__grafana_internal__";class ga extends tt{constructor(e,r,n){super(e,r),this.timeSrv=n,this.logQueries={},this.handleLogQueries=(a,o)=>{const l=a.filter(this.filterQuery).map(u=>{const g=yt(this.templateSrv,(u.logGroups||this.instanceSettings.jsonData.logGroups||[]).map(x=>x.arn),o.scopedVars),d=yt(this.templateSrv,u.logGroupNames||this.instanceSettings.jsonData.defaultLogGroups||[],o.scopedVars,"text"),y=(0,z.uniq)(g).map(x=>({arn:x,name:x})),E=(0,z.uniq)(d);return{refId:u.refId,region:this.templateSrv.replace(this.getActualRegion(u.region)),queryString:this.templateSrv.replace(u.expression||"",o.scopedVars),logGroups:y,logGroupNames:E}}),c=new Date,p=()=>Date.now()>=c.valueOf()+G.intervalToMs(this.logsTimeout);return ia(u=>this.makeLogActionRequest("StartQuery",u,o),l,p).pipe((0,Ar.z)(({frames:u,error:g})=>this.logsQuery(u.map(d=>({queryId:d.fields[0].values[0],region:d.meta?.custom?.Region??"default",refId:d.refId,statsGroups:a.find(y=>y.refId===d.refId)?.statsGroups})),p).pipe((0,Me.U)(d=>(!d.error&&g&&(d.error=g),d)))),(0,Ar.z)(u=>(0,Tr.D)((async()=>(await sa(u,o,this.timeSrv.timeRange(),this.replaceVariableAndDisplayWarningIfMulti.bind(this),this.expandVariableToArray.bind(this),this.getActualRegion.bind(this),this.tracingDataSourceUid),u))())))},this.getLogRowContext=async(a,{limit:o=10,direction:i=wt.M4.Backward}={},l)=>{let c=null,p=null;for(const d of a.dataFrame.fields)if(d.name===pa){if(c=d,p!==null)break}else if(d.name===ma&&(p=d,c!==null))break;const u={limit:o,startFromHead:i!==wt.M4.Backward,region:l?.region,logGroupName:ha(p.values[a.rowIndex]),logStreamName:c.values[a.rowIndex]};return i===wt.M4.Backward?u.endTime=a.timeEpochMs:u.startTime=a.timeEpochMs,{data:await(0,hr.n)(this.makeLogActionRequest("GetLogEvents",[u]))}},this.tracingDataSourceUid=e.jsonData.tracingDatasourceUid,this.logsTimeout=e.jsonData.logsTimeout||"30m"}logsQuery(e,r){this.logQueries={},e.forEach(l=>{this.logQueries[l.refId]={id:l.queryId,region:l.region,statsQuery:(l.statsGroups?.length??0)>0}});const n=ua({startPeriod:100,endPeriod:1e3,step:300}).pipe((0,qs.b)(l=>this.makeLogActionRequest("GetQueryResults",e)),(0,Zs.r)(),(0,Ir.B)()),a={failures:0,prevRecordsMatched:{}},o=n.pipe((0,Js.R)(({failures:l,prevRecordsMatched:c},p)=>{l++;for(const u of p){const g=u.meta?.stats?.find(d=>d.displayName==="Records scanned")?.value;g>(c[u.refId]??0)&&(l=0),c[u.refId]=g}return{failures:l,prevRecordsMatched:c}},a),(0,Me.U)(({failures:l})=>l),(0,Ir.B)()),i=(0,_s.$)(n,o).pipe((0,ea.b)(([l])=>{for(const c of l)[h.KB.Complete,h.KB.Cancelled,h.KB.Failed].includes(c.meta?.custom?.Status)&&this.logQueries.hasOwnProperty(c.refId)&&delete this.logQueries[c.refId]}),(0,Me.U)(([l,c])=>{if(r())for(const p of l)(0,z.set)(p,"meta.custom.Status",h.KB.Cancelled);return{data:l,key:"test-key",state:l.every(p=>[h.KB.Complete,h.KB.Cancelled,h.KB.Failed].includes(p.meta?.custom?.Status))?N.Gu.Done:N.Gu.Loading,error:r()?{message:`error: query timed out after ${c} attempts`,type:w.eA.Timeout}:void 0}}),(0,ta.o)(({state:l})=>l!==N.Gu.Error&&l!==N.Gu.Done,!0));return fa(i,()=>this.stopQueries())}stopQueries(){Object.keys(this.logQueries).length>0&&this.makeLogActionRequest("StopQuery",Object.values(this.logQueries).map(e=>({queryId:e.id,region:e.region,queryString:"",refId:""}))).pipe((0,ra.x)(()=>{this.logQueries={}}))}makeLogActionRequest(e,r,n){const a=n?.range||this.timeSrv.timeRange(),o={from:a.from.valueOf().toString(),to:a.to.valueOf().toString(),queries:r.map(l=>({refId:l.refId||"A",intervalMs:1,maxDataPoints:1,datasource:this.ref,type:"logAction",subtype:e,...l}))},i=l=>(0,Ge.z1)(l).data||[];return this.awsRequest(this.dsQueryEndpoint,o,{"X-Cache-Skip":"true"}).pipe((0,Me.U)(l=>i(l)),(0,Cr.K)(l=>{throw me.config.featureToggles.datasourceQueryMultiStatus&&l.status===207||l.status===400?l:l.data?.error?l.data.error:l.data?.message?l.data.message:l}))}filterQuery(e){const r=!e.logGroupNames?.length,n=!e.logGroups?.length,a=!e.expression?.length;return!(n&&r||a)}}function fa(t,e){return new Ct.y(r=>{const n=t.subscribe({next:a=>r.next(a),error:a=>r.next(a),complete:()=>r.complete()});return()=>{n.unsubscribe(),e()}})}function ha(t){const e=t.lastIndexOf(":");return t.slice(e+1)}var wr=m(91826),ya=m(60956),va=m(29241);const Ea=({region:t})=>s.createElement("p",null,"Please visit the\xA0",s.createElement("a",{target:"_blank",rel:"noreferrer",className:"text-link",href:`https://${t}.console.aws.amazon.com/servicequotas/home?region=${t}#!/services/monitoring/quotas/L-5E141212`},"AWS Service Quotas console"),"\xA0to request a quota increase or see our\xA0",s.createElement("a",{target:"_blank",rel:"noreferrer",className:"text-link",href:"https://grafana.com/docs/grafana/latest/datasources/cloudwatch/#service-quotas"},"documentation"),"\xA0to learn more."),ba=(t,e)=>pe.h.dispatch((0,j.$l)((0,_.t_)(`CloudWatch request limit reached in ${e} for data source ${t}`,"",void 0,s.createElement(Ea,{region:e},null))));class Sa extends tt{constructor(e,r){super(e,r),this.debouncedAlert=Sr(ba,br.AppNotificationTimeout.Error),this.handleMetricQueries=(n,a)=>{const o=(0,ya.dq)(Date.now(),{timeZone:a.timezone,format:"Z"}).replace(":",""),i=n.filter(this.filterMetricQuery).map(c=>{const p=Et(c),u=this.replaceMetricQueryVars(p,a.scopedVars);return{timezoneUTCOffset:o,intervalMs:a.intervalMs,maxDataPoints:a.maxDataPoints,...u,type:"timeSeriesQuery",datasource:this.ref}});if((0,z.isEmpty)(i))return(0,Ce.of)({data:[]});const l={from:a?.range?.from.valueOf().toString(),to:a?.range?.to.valueOf().toString(),queries:i};return this.performTimeSeriesQuery(l,a.range)}}interpolateMetricsQueryVariables(e,r){return{alias:this.replaceVariableAndDisplayWarningIfMulti(e.alias,r),metricName:this.replaceVariableAndDisplayWarningIfMulti(e.metricName,r),namespace:this.replaceVariableAndDisplayWarningIfMulti(e.namespace,r),period:this.replaceVariableAndDisplayWarningIfMulti(e.period,r),expression:this.templateSrv.replace(e.expression,r),sqlExpression:this.replaceVariableAndDisplayWarningIfMulti(e.sqlExpression,r),dimensions:this.convertDimensionFormat(e.dimensions??{},r)}}performTimeSeriesQuery(e,{from:r,to:n}){return this.awsRequest(this.dsQueryEndpoint,e).pipe((0,Me.U)(a=>{const o=(0,Ge.z1)(a).data;if(!o||o.length<=0)return{data:[]};const i=(0,z.findLast)(a.data.results,l=>!!l.error);return o.forEach(l=>{l.fields.forEach(c=>{c.type===va.fS.time&&(c.config.interval=l.meta?.custom?.period*1e3)})}),{data:o,error:i?{message:i.error}:void 0}}),(0,Cr.K)(a=>{if(!a.data?.results&&a.data&&a.data.message==="Metric request error"&&a.data.error)return a.message=a.data.error,(0,wr._)(()=>a);const i=Object.values(a.data?.results??{}),l=i.find(c=>c.error);if(l&&(a.message=l.error),i.some(c=>c.error&&/^Throttling:.*/.test(c.error))){const c=Object.keys(a.data?.results??{});Object.values(e.queries).reduce((u,{refId:g,region:d})=>g&&!c.includes(g)||u.includes(d)?u:[...u,d],[]).forEach(u=>{const g=this.getActualRegion(u);g&&this.debouncedAlert(this.instanceSettings.name,g)})}return(0,wr._)(()=>a)}))}filterMetricQuery(e){return Ft(e)}replaceMetricQueryVars(e,r){return e.region=this.templateSrv.replace(this.getActualRegion(e.region),r),e.namespace=this.replaceVariableAndDisplayWarningIfMulti(e.namespace,r,!0,"namespace"),e.metricName=this.replaceVariableAndDisplayWarningIfMulti(e.metricName,r,!0,"metric name"),e.dimensions=this.convertDimensionFormat(e.dimensions??{},r),e.statistic=this.templateSrv.replace(e.statistic,r),e.period=String(this.getPeriod(e,r)),e.id=this.templateSrv.replace(e.id,r),e.expression=this.templateSrv.replace(e.expression,r),e.sqlExpression=this.templateSrv.replace(e.sqlExpression,r,"raw"),e.accountId&&(e.accountId=this.templateSrv.replace(e.accountId,r)),e}getPeriod(e,r){let n=this.templateSrv.replace(e.period,r);if(n&&n.toLowerCase()!=="auto"){let a;return/^\d+$/.test(n)?a=parseInt(n,10):a=G.intervalToSeconds(n),a<1&&(a=1),String(a)}return n}}class Aa extends tt{constructor(e,r){super(e,r),this.memoizedGetRequest=(0,z.memoize)(this.getRequest.bind(this),(n,a)=>JSON.stringify({path:n,parameters:a}))}getRequest(e,r){return(0,Er.i)().get(`/api/datasources/${this.instanceSettings.id}/resources/${e}`,r)}getAccounts({region:e}){return this.memoizedGetRequest("accounts",{region:this.templateSrv.replace(this.getActualRegion(e))}).then(r=>r.map(n=>n.value))}isMonitoringAccount(e){return this.getAccounts({region:e}).then(r=>r.some(n=>n.isMonitoringAccount)).catch(()=>!1)}getRegions(){return this.memoizedGetRequest("regions").then(e=>[{label:"default",value:"default",text:"default"},...e.filter(r=>r.value)])}getNamespaces(){return this.memoizedGetRequest("namespaces").then(e=>e.map(r=>({label:r.value,value:r.value})))}getLogGroups(e){return this.memoizedGetRequest("log-groups",{...e,region:this.templateSrv.replace(this.getActualRegion(e.region)),accountId:this.templateSrv.replace(e.accountId),listAllLogGroups:e.listAllLogGroups?"true":"false"})}getLogGroupFields({region:e,arn:r,logGroupName:n}){return this.memoizedGetRequest("log-group-fields",{region:this.templateSrv.replace(this.getActualRegion(e)),logGroupName:this.templateSrv.replace(n,{}),logGroupArn:this.templateSrv.replace(r)})}getMetrics({region:e,namespace:r,accountId:n}){return r?this.memoizedGetRequest("metrics",{region:this.templateSrv.replace(this.getActualRegion(e)),namespace:this.templateSrv.replace(r),accountId:this.templateSrv.replace(n)}).then(a=>a.map(o=>({label:o.value.name,value:o.value.name}))):Promise.resolve([])}getAllMetrics({region:e,accountId:r}){return this.memoizedGetRequest("metrics",{region:this.templateSrv.replace(this.getActualRegion(e)),accountId:this.templateSrv.replace(r)}).then(n=>n.map(a=>({metricName:a.value.name,namespace:a.value.namespace})))}getDimensionKeys({region:e,namespace:r="",dimensionFilters:n={},metricName:a="",accountId:o}){return this.memoizedGetRequest("dimension-keys",{region:this.templateSrv.replace(this.getActualRegion(e)),namespace:this.templateSrv.replace(r),accountId:this.templateSrv.replace(o),metricName:this.templateSrv.replace(a),dimensionFilters:JSON.stringify(this.convertDimensionFormat(n,{}))}).then(i=>i.map(l=>({label:l.value,value:l.value})))}getDimensionValues({dimensionKey:e,region:r,namespace:n,dimensionFilters:a={},metricName:o="",accountId:i}){return!n||!o?Promise.resolve([]):this.memoizedGetRequest("dimension-values",{region:this.templateSrv.replace(this.getActualRegion(r)),namespace:this.templateSrv.replace(n),metricName:this.templateSrv.replace(o.trim()),dimensionKey:this.templateSrv.replace(e),dimensionFilters:JSON.stringify(this.convertDimensionFormat(a,{})),accountId:this.templateSrv.replace(i)}).then(l=>l.map(c=>({label:c.value,value:c.value})))}getEbsVolumeIds(e,r){return this.memoizedGetRequest("ebs-volume-ids",{region:this.templateSrv.replace(this.getActualRegion(e)),instanceId:this.templateSrv.replace(r)})}getEc2InstanceAttribute(e,r,n){return this.memoizedGetRequest("ec2-instance-attribute",{region:this.templateSrv.replace(this.getActualRegion(e)),attributeName:this.templateSrv.replace(r),filters:JSON.stringify(this.convertMultiFilterFormat(n,"filter key"))})}getResourceARNs(e,r,n){return this.memoizedGetRequest("resource-arns",{region:this.templateSrv.replace(this.getActualRegion(e)),resourceType:this.templateSrv.replace(r),tags:JSON.stringify(this.convertMultiFilterFormat(n,"tag name"))})}legacyDescribeLogGroups(e,r){return this.memoizedGetRequest("legacy-log-groups",{region:this.templateSrv.replace(this.getActualRegion(e)),logGroupNamePrefix:r||""})}}var Ta=m(79726);const Rt=/\${(\w+):json}/g;function Ia(t){return typeof t!="string"&&typeof t.ec2Filters!="string"&&typeof t.tags!="string"}function rt(t){const e=t.replace(Rt,'"$$$1"'),r=JSON.parse(e),n={};return Object.keys(r).forEach(a=>{const o=r[a];typeof o=="string"?n[a]=[o]:o!==void 0&&(n[a]=o)}),n}function Rr(t){if(Ia(t))return t;if(typeof t!="string"){const p=(0,z.omit)(t,["dimensionFilters","ec2Filters","tags"]);if(p.dimensionFilters={},p.ec2Filters={},p.tags={},t.dimensionFilters!==""&&t.ec2Filters!=="[]"){const u=t.dimensionFilters.replace(Rt,'"$$$1"');try{p.dimensionFilters=JSON.parse(u)}catch{throw new Error(`unable to migrate poorly formed filters: ${t.dimensionFilters}`)}}if(t.ec2Filters!==""&&t.ec2Filters!=="[]")try{p.ec2Filters=rt(t.ec2Filters)}catch{throw new Error(`unable to migrate poorly formed filters: ${t.ec2Filters}`)}if(t.tags!==""&&t.tags!=="[]")try{p.tags=rt(t.tags)}catch{throw new Error(`unable to migrate poorly formed filters: ${t.tags}`)}return p}const e={refId:"CloudWatchVariableQueryEditor-VariableQuery",queryType:h.wf.Regions,namespace:"",region:"",metricName:"",dimensionKey:"",dimensionFilters:{},ec2Filters:{},instanceID:"",attributeName:"",resourceType:"",tags:{}};if(t===""||t.match(/^regions\(\)/))return e;if(t.match(/^namespaces\(\)/))return e.queryType=h.wf.Namespaces,e;const r=t.match(/^metrics\(([^\)]+?)(,\s?([^,]+?))?\)/);if(r)return e.queryType=h.wf.Metrics,e.namespace=r[1],e.region=r[3]||"",e;const n=t.match(/^dimension_keys\(([^\)]+?)(,\s?([^,]+?))?\)/);if(n)return e.queryType=h.wf.DimensionKeys,e.namespace=n[1],e.region=n[3]||"",e;const a=t.match(/^dimension_values\(([^,]+?),\s?([^,]+?),\s?([^,]+?),\s?([^,]+?)(,\s?(.+))?\)/);if(a){if(e.queryType=h.wf.DimensionValues,e.region=a[1],e.namespace=a[2],e.metricName=a[3],e.dimensionKey=a[4],e.dimensionFilters={},a[6]&&a[6]!=="[]"){const p=a[6].replace(Rt,'"$$$1"');try{e.dimensionFilters=JSON.parse(p)}catch{throw new Error(`unable to migrate poorly formed filters: ${a[6]}`)}}return e}const o=t.match(/^ebs_volume_ids\(([^,]+?),\s?([^,]+?)\)/);if(o)return e.queryType=h.wf.EBSVolumeIDs,e.region=o[1],e.instanceID=o[2],e;const i=t.match(/^ec2_instance_attribute\(([^,]+?),\s?([^,]+?),\s?(.+?)\)/);if(i){if(e.queryType=h.wf.EC2InstanceAttributes,e.region=i[1],e.attributeName=i[2],i[3]&&i[3]!=="[]")try{e.ec2Filters=rt(i[3])}catch{throw new Error(`unable to migrate poorly formed filters: ${i[3]}`)}return e}const l=t.match(/^resource_arns\(([^,]+?),\s?([^,]+?),\s?(.+?)\)/);if(l){if(e.queryType=h.wf.ResourceArns,e.region=l[1],e.resourceType=l[2],l[3]&&l[3]!=="[]")try{e.tags=rt(l[3])}catch{throw new Error(`unable to migrate poorly formed filters: ${l[3]}`)}return e}if(t.match(/^statistics\(\)/))return e.queryType=h.wf.Statistics,e;throw new Error("unable to parse old variable query")}const Ca=({filter:t,onChange:e,onDelete:r,keyPlaceholder:n})=>{const[a,o]=(0,s.useState)(t.key||""),[i,l]=(0,s.useState)(t.value?.join(", ")||""),c=(0,Ee.l4)(),p=wa(c);return s.createElement("div",{"data-testid":"cloudwatch-multifilter-item"},s.createElement(Be.B,null,s.createElement(D.I,{"data-testid":"cloudwatch-multifilter-item-key","aria-label":"Filter key",value:a,placeholder:n??"key",onChange:u=>o(u.currentTarget.value),onBlur:()=>{a&&a!==t.key&&e({...t,key:a})}}),s.createElement("span",{className:(0,W.cx)(p.root)},"="),s.createElement(D.I,{"data-testid":"cloudwatch-multifilter-item-value","aria-label":"Filter value",value:i,placeholder:"value1, value2,...",onChange:u=>l(u.currentTarget.value),onBlur:()=>{const u=i.split(",").map(g=>g.trim());i&&u!==t.value&&e({...t,value:u}),l(u.join(", "))}}),s.createElement(ze._,{"aria-label":"remove",icon:"times",variant:"secondary",onClick:r,type:"button"})))},wa=(0,Dt.B)(t=>({root:(0,W.css)({padding:t.spacing(0,1),alignSelf:"center"})})),Ra=t=>Object.keys(t).map(e=>({key:e,value:t[e],operator:"="})),xa=t=>{const e={};return t.forEach(({key:r,value:n})=>{r&&n&&(e[r]=n)}),e},xr=({filters:t,onChange:e,keyPlaceholder:r})=>{const[n,a]=(0,s.useState)([]);(0,s.useEffect)(()=>a(t?Ra(t):[]),[t]);const o=i=>{a(i);const l=xa(i);(0,z.isEqual)(l,t)||e(l)};return s.createElement(Xe.k,{items:n,onChange:o,renderItem:La(r)})};function La(t){function e(r,n,a){return s.createElement(Ca,{filter:r,onChange:o=>n(o),onDelete:a,keyPlaceholder:t})}return e}const Ma=20,Pe=({label:t,onChange:e,value:r,options:n,allowCustomValue:a=!1,isLoading:o=!1,inputId:i=t})=>s.createElement(F._,{label:t,labelWidth:Ma,htmlFor:i},s.createElement(Z.Ph,{"aria-label":t,width:25,allowCustomValue:a,value:r,onChange:({value:l})=>e(l),options:n,isLoading:o,inputId:i})),Oa=20,nt=({interactive:t,label:e,onBlur:r,placeholder:n,value:a,tooltip:o})=>{const[i,l]=(0,s.useState)(a);return s.createElement(F._,{interactive:t,label:e,labelWidth:Oa,tooltip:o,grow:!0},s.createElement(D.I,{"aria-label":e,placeholder:n,value:i,onChange:c=>l(c.currentTarget.value),onBlur:()=>r(i),width:25}))},Fa=[{value:h.wf.Regions,label:"Regions"},{value:h.wf.Namespaces,label:"Namespaces"},{value:h.wf.Metrics,label:"Metrics"},{value:h.wf.DimensionKeys,label:"Dimension Keys"},{value:h.wf.DimensionValues,label:"Dimension Values"},{value:h.wf.EBSVolumeIDs,label:"EBS Volume IDs"},{value:h.wf.EC2InstanceAttributes,label:"EC2 Instance Attributes"},{value:h.wf.ResourceArns,label:"Resource ARNs"},{value:h.wf.Statistics,label:"Statistics"},{value:h.wf.LogGroups,label:"Log Groups"},...me.config.featureToggles.cloudWatchCrossAccountQuerying?[{value:h.wf.Accounts,label:"Accounts"}]:[]],Na=({query:t,datasource:e,onChange:r})=>{const n=Rr(t),{region:a,namespace:o,metricName:i,dimensionKey:l,dimensionFilters:c}=n,[p,u]=ct(e),g=ut(e),d=dt(e,{region:a,namespace:o}),y=Fe(e,{region:a,namespace:o,metricName:i}),E=Fe(e,{region:a,namespace:o,metricName:i,dimensionFilters:c}),x=mt(e.resources,t.region),b=async M=>{const he=await re({...n,region:M,accountId:void 0});I(he)},C=async M=>{const he=await re({...n,namespace:M});I(he)},I=M=>{r({...M,refId:"CloudWatchVariableQueryEditor-VariableQuery"})},re=async M=>{let{metricName:he,dimensionKey:Ie,dimensionFilters:st,namespace:at,region:ot}=M;return he&&await e.resources.getMetrics({namespace:at,region:ot}).then(L=>{L.find(J=>J.value===he)||(he="")}),Ie&&await e.resources.getDimensionKeys({namespace:at,region:ot}).then(L=>{L.find(J=>J.value===Ie)||(Ie="",st={})}),{...M,metricName:he,dimensionKey:Ie,dimensionFilters:st}},le=[h.wf.Metrics,h.wf.DimensionKeys,h.wf.DimensionValues,h.wf.EBSVolumeIDs,h.wf.EC2InstanceAttributes,h.wf.ResourceArns,h.wf.LogGroups,h.wf.Accounts].includes(n.queryType),Te=[h.wf.Metrics,h.wf.DimensionKeys,h.wf.DimensionValues,h.wf.LogGroups].includes(n.queryType),Lt=[h.wf.Metrics,h.wf.DimensionKeys,h.wf.DimensionValues].includes(n.queryType);return s.createElement(s.Fragment,null,s.createElement(Pe,{value:n.queryType,options:Fa,onChange:M=>I({...n,queryType:M,accountId:void 0}),label:"Query type",inputId:`variable-query-type-${t.refId}`}),le&&s.createElement(Pe,{value:a,options:p,onChange:M=>b(M),label:"Region",isLoading:u,inputId:`variable-query-region-${t.refId}`}),Te&&x.value&&x.value?.length>0&&me.config.featureToggles.cloudWatchCrossAccountQuerying&&s.createElement(Pe,{label:"Account",value:t.accountId??null,onChange:M=>I({...n,accountId:M}),options:[Ne,...x?.value],allowCustomValue:!1}),Lt&&s.createElement(Pe,{value:o,options:g,onChange:M=>C(M),label:"Namespace",inputId:`variable-query-namespace-${t.refId}`,allowCustomValue:!0}),n.queryType===h.wf.DimensionValues&&s.createElement(s.Fragment,null,s.createElement(Pe,{value:i||null,options:d,onChange:M=>I({...n,metricName:M}),label:"Metric",inputId:`variable-query-metric-${t.refId}`,allowCustomValue:!0}),s.createElement(Pe,{value:l||null,options:y,onChange:M=>I({...n,dimensionKey:M}),label:"Dimension key",inputId:`variable-query-dimension-key-${t.refId}`,allowCustomValue:!0}),s.createElement(F._,{label:"Dimensions",labelWidth:20,shrink:!0,tooltip:"Dimensions to filter the returned values on"},s.createElement(Pt,{metricStat:{...n,dimensions:n.dimensionFilters},onChange:M=>{r({...n,dimensionFilters:M})},dimensionKeys:E,disableExpressions:!0,datasource:e}))),n.queryType===h.wf.EBSVolumeIDs&&s.createElement(nt,{value:t.instanceID,placeholder:"i-XXXXXXXXXXXXXXXXX",onBlur:M=>I({...n,instanceID:M}),label:"Instance ID"}),n.queryType===h.wf.EC2InstanceAttributes&&s.createElement(s.Fragment,null,s.createElement(nt,{value:n.attributeName,onBlur:M=>I({...n,attributeName:M}),label:"Attribute name",interactive:!0,tooltip:s.createElement(s.Fragment,null,'Attribute or tag to query on. Tags should be formatted "Tags.<name>". ',s.createElement("a",{href:"https://grafana.com/docs/grafana/latest/datasources/aws-cloudwatch/template-queries-cloudwatch/#selecting-attributes",target:"_blank",rel:"noreferrer"},"See the documentation for more details"))}),s.createElement(F._,{label:"Filters",labelWidth:20,shrink:!0,tooltip:s.createElement(s.Fragment,null,s.createElement("a",{href:"https://grafana.com/docs/grafana/latest/datasources/aws-cloudwatch/template-queries-cloudwatch/#selecting-attributes",target:"_blank",rel:"noreferrer"},"Pre-defined ec2:DescribeInstances filters/tags")," and the values to filter on. Tags should be formatted tag:<name>.")},s.createElement(xr,{filters:n.ec2Filters,onChange:M=>{r({...n,ec2Filters:M})},keyPlaceholder:"filter/tag"}))),n.queryType===h.wf.ResourceArns&&s.createElement(s.Fragment,null,s.createElement(nt,{value:n.resourceType,onBlur:M=>I({...n,resourceType:M}),label:"Resource type"}),s.createElement(F._,{label:"Tags",shrink:!0,labelWidth:20,tooltip:"Tags to filter the returned values on."},s.createElement(xr,{filters:n.tags,onChange:M=>{r({...n,tags:M})},keyPlaceholder:"tag"}))),n.queryType===h.wf.LogGroups&&s.createElement(nt,{value:t.logGroupPrefix??"",onBlur:M=>I({...n,logGroupPrefix:M}),label:"Log group prefix"}))};class Da extends Ta.Mg{constructor(e){super(),this.resources=e,this.editor=Na,this.allMetricFindValue={text:"All",value:Ne.value,expandable:!0},this.query=this.query.bind(this)}query(e){const r=Rr(e.targets[0]);return(0,Tr.D)(this.execute(r)).pipe((0,Me.U)(n=>({data:n})))}async execute(e){try{switch(e.queryType){case h.wf.Regions:return this.handleRegionsQuery();case h.wf.Namespaces:return this.handleNamespacesQuery();case h.wf.Metrics:return this.handleMetricsQuery(e);case h.wf.DimensionKeys:return this.handleDimensionKeysQuery(e);case h.wf.DimensionValues:return this.handleDimensionValuesQuery(e);case h.wf.EBSVolumeIDs:return this.handleEbsVolumeIdsQuery(e);case h.wf.EC2InstanceAttributes:return this.handleEc2InstanceAttributeQuery(e);case h.wf.ResourceArns:return this.handleResourceARNsQuery(e);case h.wf.Statistics:return this.handleStatisticsQuery();case h.wf.LogGroups:return this.handleLogGroupsQuery(e);case h.wf.Accounts:return this.handleAccountsQuery(e)}}catch(r){return console.error(`Could not run CloudWatchMetricFindQuery ${e}`,r),[]}}async handleLogGroupsQuery({region:e,logGroupPrefix:r,accountId:n}){const a=this.resources.templateSrv.replace(r);return this.resources.getLogGroups({accountId:n,region:e,logGroupNamePrefix:a,listAllLogGroups:!0}).then(o=>o.map(i=>({text:i.value.name,value:i.value.arn,expandable:!0})))}async handleRegionsQuery(){return this.resources.getRegions().then(e=>e.map(Se))}async handleNamespacesQuery(){return this.resources.getNamespaces().then(e=>e.map(Se))}async handleMetricsQuery({namespace:e,region:r,accountId:n}){return this.resources.getMetrics({namespace:e,region:r,accountId:n}).then(a=>a.map(Se))}async handleDimensionKeysQuery({namespace:e,region:r,accountId:n}){return this.resources.getDimensionKeys({namespace:e,region:r,accountId:n}).then(a=>a.map(Se))}async handleDimensionValuesQuery({namespace:e,accountId:r,region:n,dimensionKey:a,metricName:o,dimensionFilters:i}){return!a||!o?[]:this.resources.getDimensionValues({region:n,accountId:r,namespace:e,metricName:o,dimensionKey:a,dimensionFilters:i}).then(l=>l.map(Se))}async handleEbsVolumeIdsQuery({region:e,instanceID:r}){return r?this.resources.getEbsVolumeIds(e,r).then(n=>n.map(Se)):[]}async handleEc2InstanceAttributeQuery({region:e,attributeName:r,ec2Filters:n}){return r?this.resources.getEc2InstanceAttribute(e,r,n??{}).then(a=>a.map(Se)):[]}async handleResourceARNsQuery({region:e,resourceType:r,tags:n}){return r?(await this.resources.getResourceARNs(e,r,n??{})).map(Se):[]}async handleStatisticsQuery(){return _e.map(e=>({text:e,value:e,expandable:!0}))}async handleAccountsQuery({region:e}){return this.resources.getAccounts({region:e}).then(r=>{const n=r.map(a=>({text:a.label,value:a.id,expandable:!0}));return n.length?[this.allMetricFindValue,...n]:[]})}getDefaultQuery(){return Hn}}function Se({label:t,value:e}){return{text:t??e??"",value:e,expandable:!0}}class Lr extends U.CK{constructor(e,r=(0,te.J)(),n=(0,Y.$t)()){super(e),this.instanceSettings=e,this.templateSrv=r,this.type="cloudwatch",this.getLogRowContext=async(a,o,i)=>this.logsQueryRunner.getLogRowContext(a,o,i),this.defaultRegion=e.jsonData.defaultRegion,this.resources=new Aa(e,r),this.languageProvider=new Os(this),this.sqlCompletionItemProvider=new ks(this.resources,this.templateSrv),this.metricMathCompletionItemProvider=new js(this.resources,this.templateSrv),this.metricsQueryRunner=new Sa(e,r),this.logsCompletionItemProvider=new zs(this.resources,this.templateSrv),this.logsQueryRunner=new ga(e,r,n),this.annotationQueryRunner=new Xs(e,r),this.variables=new Da(this.resources),this.annotations=Ms,this.defaultLogGroups=e.jsonData.defaultLogGroups}filterQuery(e){return e.hide!==!0||Oe(e)&&e.id!==""}query(e){e=(0,z.cloneDeep)(e);let r=e.targets.filter(this.filterQuery);const n=[],a=[],o=[];r.forEach(l=>{Ot(l)?o.push(l):ke(l)?n.push(l):a.push(l)});const i=[];return n.length&&i.push(this.logsQueryRunner.handleLogQueries(n,e)),a.length&&i.push(this.metricsQueryRunner.handleMetricQueries(a,e)),o.length&&i.push(this.annotationQueryRunner.handleAnnotationQuery(o,e)),(0,z.isEmpty)(i)?(0,Ce.of)({data:[],state:N.Gu.Done}):(0,we.T)(...i)}interpolateVariablesInQueries(e,r){return e.length?e.map(n=>({...n,region:this.metricsQueryRunner.replaceVariableAndDisplayWarningIfMulti(this.getActualRegion(n.region),r),...Oe(n)&&this.metricsQueryRunner.interpolateMetricsQueryVariables(n,r)})):e}targetContainsTemplate(e){return this.templateSrv.containsTemplate(e.region)||this.templateSrv.containsTemplate(e.namespace)||this.templateSrv.containsTemplate(e.metricName)||this.templateSrv.containsTemplate(e.expression)||e.logGroupNames?.some(r=>this.templateSrv.containsTemplate(r))||(0,z.find)(e.dimensions,(r,n)=>this.templateSrv.containsTemplate(n)||this.templateSrv.containsTemplate(r))}showContextToggle(){return!0}getQueryDisplayText(e){return ke(e)?e.expression??"":JSON.stringify(e)}getVariables(){return this.resources.getVariables()}getActualRegion(e){return e==="default"||e===void 0||e===""?this.defaultRegion??"":e}getDefaultQuery(e){return{...Un(this.instanceSettings.jsonData.logGroups,this.instanceSettings.jsonData.defaultLogGroups),...Bn}}}var Ga=m(53229);const Pa=t=>({infoText:(0,W.css)` padding-bottom: ${t.spacing(2)}; color: ${t.colors.text.secondary}; `}),Mr="grafana-x-ray-datasource";function Ka({datasourceUid:t,onChange:e}){const r=!!(0,ye.ak)().getList({pluginId:Mr}).length,n=(0,Ee.wW)(Pa);return s.createElement(s.Fragment,null,s.createElement("h3",{className:"page-heading"},"X-ray trace link"),s.createElement("div",{className:n.infoText},"Grafana will automatically create a link to a trace in X-ray data source if logs contain @xrayTraceId field"),!r&&s.createElement(Mt.b,{title:"There is no X-ray datasource to link to. First add an X-ray data source and then link it to Cloud Watch. ",severity:"info"}),s.createElement("div",{className:"gf-form-group"},s.createElement(F._,{htmlFor:"data-source-picker",label:"Data source",labelWidth:28,tooltip:"X-ray data source containing traces"},s.createElement(Ga.q,{pluginId:Mr,onChange:a=>e(a.uid),current:t,noDefault:!0}))))}const Wa=t=>{const{options:e,onOptionsChange:r}=t,{defaultLogGroups:n,logsTimeout:a,defaultRegion:o,logGroups:i}=e.jsonData,l=Qa(t);$a(e.jsonData);const c=ka(a),p=Va(t),[u,g]=(0,s.useState)({invalid:!1});return(0,s.useEffect)(()=>g({invalid:!1}),[t.options]),s.createElement(s.Fragment,null,s.createElement(k.mO,{...t,labelWidth:29,loadRegions:l&&(async()=>l.resources.getRegions().then(d=>d.reduce((y,E)=>E.value?[...y,E.value]:y,[])))},s.createElement(F._,{label:"Namespaces of Custom Metrics",labelWidth:29,tooltip:"Namespaces of Custom Metrics."},s.createElement(D.I,{width:60,placeholder:"Namespace1,Namespace2",value:e.jsonData.customMetricsNamespaces||"",onChange:(0,O._R)(t,"customMetricsNamespaces")}))),ue.config.secureSocksDSProxyEnabled&&s.createElement(X.i,{options:e,onOptionsChange:r}),s.createElement("h3",{className:"page-heading"},"CloudWatch Logs"),s.createElement("div",{className:"gf-form-group"},s.createElement(F._,{label:"Retry Timeout",labelWidth:28,tooltip:'Cloudwatch Logs allows for a maximum of 30 concurrent queries. If Grafana hits a concurrent max query error from Cloudwatch Logs it will auto-retry requesting a query for up to 30min. This retry timeout strategy is configurable. Must be a valid duration string, such as "15m" "30s" "2000ms" etc.',invalid:!!c},s.createElement(D.I,{width:60,placeholder:"30m",value:e.jsonData.logsTimeout||"",onChange:(0,O._R)(t,"logsTimeout"),title:'The timeout must be a valid duration string, such as "15m" "30s" "2000ms" etc.'})),s.createElement(F._,{label:"Default Log Groups",labelWidth:28,tooltip:"Optionally, specify default log groups for CloudWatch Logs queries.",shrink:!0,...u},l?s.createElement(vt,{region:o??"",datasource:l,onBeforeOpen:()=>{if(p)return;let d="You need to save the data source before adding log groups.";throw t.options.version&&t.options.version>1&&(d="You have unsaved connection detail changes. You need to save the data source before adding log groups."),g({invalid:!0,error:d}),new Error(d)},legacyLogGroupNames:n,logGroups:i,onChange:d=>{r({...t.options,jsonData:{...t.options.jsonData,logGroups:d,defaultLogGroups:void 0}})},maxNoOfVisibleLogGroups:2,legacyOnChange:d=>{(0,O.tp)(t,"defaultLogGroups",d)}}):s.createElement(s.Fragment,null))),s.createElement(Ka,{onChange:d=>(0,O.tp)(t,"tracingDatasourceUid",d),datasourceUid:e.jsonData.tracingDatasourceUid}))};function $a(t){const e=r=>{pe.h.dispatch((0,j.$l)((0,_.ZR)("CloudWatch Authentication",r)))};(0,s.useEffect)(()=>{t.authType==="arn"?e('Since grafana 7.3 authentication type "arn" is deprecated, falling back to default SDK provider'):t.authType==="credentials"&&!t.profile&&!t.database&&e(`As of grafana 7.3 authentication type "credentials" should be used only for shared file credentials. If you don't have a credentials file, switch to the default SDK provider for extracting credentials from environment variables or IAM roles`)},[t.authType,t.database,t.profile])}function Qa(t){const[e,r]=(0,s.useState)();return(0,s.useEffect)(()=>{t.options.version&&(0,ye.ak)().loadDatasource(t.options.name).then(n=>{n instanceof Lr&&r(n)})},[t.options.version,t.options.name]),e}function ka(t){const[e,r]=(0,s.useState)(void 0);return(0,K.Z)(()=>{if(t)try{G.describeInterval(t),r(void 0)}catch(n){n instanceof Error&&r(n.toString())}else r(void 0)},350,[t]),e}function Va(t){const[e,r]=(0,s.useState)(!!t.options.version&&t.options.version>1);return(0,s.useEffect)(()=>{r(!1)},[t.options.jsonData.assumeRoleArn,t.options.jsonData.authType,t.options.jsonData.defaultRegion,t.options.jsonData.endpoint,t.options.jsonData.externalId,t.options.jsonData.profile,t.options.secureJsonData?.accessKey,t.options.secureJsonData?.secretKey]),(0,s.useEffect)(()=>{t.options.version&&t.options.version>1&&r(!0)},[t.options.version]),e}var Ba=function(){function t(e,r){for(var n=0;n<r.length;n++){var a=r[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),za=Ua(["",""],["",""]);function Ua(t,e){return Object.freeze(Object.defineProperties(t,{raw:{value:Object.freeze(e)}}))}function Ha(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var ja=function(){function t(){for(var e=this,r=arguments.length,n=Array(r),a=0;a<r;a++)n[a]=arguments[a];return Ha(this,t),this.tag=function(o){for(var i=arguments.length,l=Array(i>1?i-1:0),c=1;c<i;c++)l[c-1]=arguments[c];return typeof o=="function"?e.interimTag.bind(e,o):typeof o=="string"?e.transformEndResult(o):(o=o.map(e.transformString.bind(e)),e.transformEndResult(o.reduce(e.processSubstitutions.bind(e,l))))},n.length>0&&Array.isArray(n[0])&&(n=n[0]),this.transformers=n.map(function(o){return typeof o=="function"?o():o}),this.tag}return Ba(t,[{key:"interimTag",value:function(r,n){for(var a=arguments.length,o=Array(a>2?a-2:0),i=2;i<a;i++)o[i-2]=arguments[i];return this.tag(za,r.apply(void 0,[n].concat(o)))}},{key:"processSubstitutions",value:function(r,n,a){var o=this.transformSubstitution(r.shift(),n);return"".concat(n,o,a)}},{key:"transformString",value:function(r){var n=function(o,i){return i.onString?i.onString(o):o};return this.transformers.reduce(n,r)}},{key:"transformSubstitution",value:function(r,n){var a=function(i,l){return l.onSubstitution?l.onSubstitution(i,n):i};return this.transformers.reduce(a,r)}},{key:"transformEndResult",value:function(r){var n=function(o,i){return i.onEndResult?i.onEndResult(o):o};return this.transformers.reduce(n,r)}}]),t}();const oe=ja;var Ya={separator:"",conjunction:"",serial:!1},Xa=function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Ya;return{onSubstitution:function(n,a){if(Array.isArray(n)){var o=n.length,i=e.separator,l=e.conjunction,c=e.serial,p=a.match(/(\n?[^\S\n]+)$/);if(p?n=n.join(i+p[1]):n=n.join(i+" "),l&&o>1){var u=n.lastIndexOf(i);n=n.slice(0,u)+(c?i:"")+" "+l+n.slice(u+1)}}return n}}};const fe=Xa;function qa(t){if(Array.isArray(t)){for(var e=0,r=Array(t.length);e<t.length;e++)r[e]=t[e];return r}else return Array.from(t)}var Za=function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"initial";return{onEndResult:function(n){if(e==="initial"){var a=n.match(/^[^\S\n]*(?=\S)/gm),o=a&&Math.min.apply(Math,qa(a.map(function(l){return l.length})));if(o){var i=new RegExp("^.{"+o+"}","gm");return n.replace(i,"")}return n}if(e==="all")return n.replace(/^[^\S\n]+/gm,"");throw new Error("Unknown type: "+e)}}};const Ae=Za;var Ja=function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";return{onEndResult:function(n){if(e==="")return n.trim();if(e=e.toLowerCase(),e==="start"||e==="left")return n.replace(/^\s*/,"");if(e==="end"||e==="right")return n.replace(/\s*$/,"");throw new Error("Side not supported: "+e)}}};const ie=Ja;var Do=new oe(fe({separator:","}),Ae,ie);const Go=null;var Po=new oe(fe({separator:",",conjunction:"and"}),Ae,ie);const Ko=null;var Wo=new oe(fe({separator:",",conjunction:"or"}),Ae,ie);const $o=null;var _a=function(e){return{onSubstitution:function(n,a){if(e!=null&&typeof e=="string")typeof n=="string"&&n.includes(e)&&(n=n.split(e));else throw new Error("You need to specify a string character to split by.");return n}}};const Or=_a;var Fr=function(e){return e!=null&&!Number.isNaN(e)&&typeof e!="boolean"},eo=function(){return{onSubstitution:function(r){return Array.isArray(r)?r.filter(Fr):Fr(r)?r:""}}};const to=eo;var Qo=new oe(Or(` `),to,fe,Ae,ie);const ko=null;var ro=function(e,r){return{onSubstitution:function(a,o){if(e==null||r==null)throw new Error("replaceSubstitutionTransformer requires at least 2 arguments.");return a==null?a:a.toString().replace(e,r)}}};const Ke=ro;var Vo=new oe(Or(` `),fe,Ae,ie,Ke(/&/g,"&"),Ke(/</g,"<"),Ke(/>/g,">"),Ke(/"/g,"""),Ke(/'/g,"'"),Ke(/`/g,"`"));const Bo=null;var no=function(e,r){return{onEndResult:function(a){if(e==null||r==null)throw new Error("replaceResultTransformer requires at least 2 arguments.");return a.replace(e,r)}}};const We=no;var zo=new oe(We(/(?:\n(?:\s*))+/g," "),ie);const Uo=null;var Ho=new oe(We(/(?:\n\s*)/g,""),ie);const jo=null;var Yo=new oe(fe({separator:","}),We(/(?:\s+)/g," "),ie);const Xo=null;var qo=new oe(fe({separator:",",conjunction:"or"}),We(/(?:\s+)/g," "),ie);const Zo=null;var Jo=new oe(fe({separator:",",conjunction:"and"}),We(/(?:\s+)/g," "),ie);const _o=null;var ei=new oe(fe,Ae,ie);const ti=null;var ri=new oe(fe,We(/(?:\s+)/g," "),ie);const ni=null;var so=new oe(Ae,ie);const ao=so;var oo=new oe(Ae("all"),ie);const $=oo;var Nr=m(41640);const io=[{category:"Lambda",examples:[{title:"View latency statistics for 5-minute intervals",expr:$`filter @type = "REPORT" | stats avg(@duration), max(@duration), min(@duration) by bin(5m)`},{title:"Determine the amount of overprovisioned memory",expr:ao`filter @type = "REPORT" | stats max(@memorySize / 1000 / 1000) as provisionedMemoryMB, min(@maxMemoryUsed / 1000 / 1000) as smallestMemoryRequestMB, avg(@maxMemoryUsed / 1000 / 1000) as avgMemoryUsedMB, max(@maxMemoryUsed / 1000 / 1000) as maxMemoryUsedMB, provisionedMemoryMB - maxMemoryUsedMB as overProvisionedMB `},{title:"Find the most expensive requests",expr:$`filter @type = "REPORT" | fields @requestId, @billedDuration | sort by @billedDuration desc`}]},{category:"VPC Flow Logs",examples:[{title:"Average, min, and max byte transfers by source and destination IP addresses",expr:"stats avg(bytes), min(bytes), max(bytes) by srcAddr, dstAddr"},{title:"IP addresses using UDP transfer protocol",expr:"filter protocol=17 | stats count(*) by srcAddr"},{title:"Top 10 byte transfers by source and destination IP addresses",expr:$`stats sum(bytes) as bytesTransferred by srcAddr, dstAddr | sort bytesTransferred desc | limit 10`},{title:"Top 20 source IP addresses with highest number of rejected requests",expr:$`filter action="REJECT" | stats count(*) as numRejections by srcAddr | sort numRejections desc | limit 20`},{title:"Find the top 15 packet transfers across hosts",expr:$`stats sum(packets) as packetsTransferred by srcAddr, dstAddr | sort packetsTransferred desc | limit 15`},{title:"Find the IP addresses where flow records were skipped during the capture window",expr:$`filter logStatus="SKIPDATA" | stats count(*) by bin(1h) as t | sort t`}]},{category:"CloudTrail",examples:[{title:"Number of log entries by service, event type, and region",expr:"stats count(*) by eventSource, eventName, awsRegion"},{title:"Number of log entries by region and EC2 event type",expr:$`filter eventSource="ec2.amazonaws.com" | stats count(*) as eventCount by eventName, awsRegion | sort eventCount desc`},{title:"Regions, usernames, and ARNs of newly created IAM users",expr:$`filter eventName="CreateUser" | fields awsRegion, requestParameters.userName, responseElements.user.arn`},{title:"Find EC2 hosts that were started or stopped in a given AWS Region",expr:$`filter (eventName="StartInstances" or eventName="StopInstances") and region="us-east-2"`},{title:"Find the number of records where an exception occurred while invoking the UpdateTrail API",expr:$`filter eventName="UpdateTrail" and ispresent(errorCode) | stats count(*) by errorCode, errorMessage`},{title:"Find log entries where TLS 1.0 or 1.1 was used",expr:$`filter tlsDetails.tlsVersion in [ "TLSv1", "TLSv1.1" ] | stats count(*) as numOutdatedTlsCalls by userIdentity.accountId, recipientAccountId, eventSource, eventName, awsRegion, tlsDetails.tlsVersion, tlsDetails.cipherSuite, userAgent | sort eventSource, eventName, awsRegion, tlsDetails.tlsVersion`},{title:"Find the number of calls per service that used TLS versions 1.0 or 1.1",expr:$`filter tlsDetails.tlsVersion in [ "TLSv1", "TLSv1.1" ] | stats count(*) as numOutdatedTlsCalls by eventSource | sort numOutdatedTlsCalls desc`}]},{category:"Common Queries",examples:[{title:"25 most recently added log events",expr:$`fields @timestamp, @message | sort @timestamp desc | limit 25`},{title:"Number of exceptions logged every 5 minutes",expr:$`filter @message like /Exception/ | stats count(*) as exceptionCount by bin(5m) | sort exceptionCount desc`},{title:"List of log events that are not exceptions",expr:"fields @message | filter @message not like /Exception/"},{title:"To parse and count fields",expr:$`fields @timestamp, @message | filter @message like /User ID/ | parse @message "User ID: *" as @userId | stats count(*) by @userId`},{title:"To Identify faults on any API calls",expr:$`filter Operation = <operation> AND Fault > 0 | fields @timestamp, @logStream as instanceId, ExceptionMessage`},{title:"To get the number of exceptions logged every 5 minutes using regex where exception is not case sensitive",expr:$`filter @message like /(?i)Exception/ | stats count(*) as exceptionCount by bin(5m) | sort exceptionCount desc`},{title:"To parse ephemeral fields using a glob expression",expr:$`parse @message "user=*, method:*, latency := *" as @user, @method, @latency | stats avg(@latency) by @method, @user`},{title:"To parse ephemeral fields using a glob expression using regular expression",expr:$`parse @message /user=(?<user2>.*?), method:(?<method2>.*?), latency := (?<latency2>.*?)/ | stats avg(latency2) by @method2, @user2`},{title:"To extract ephemeral fields and display field for events that contain an ERROR string",expr:$`fields @message | parse @message "* [*] *" as loggingTime, loggingType, loggingMessage | filter loggingType IN ["ERROR"] | display loggingMessage, loggingType = "ERROR" as isError`},{title:"To trim whitespaces from query results",expr:$`fields trim(@message) as trimmedMessage | parse trimmedMessage "[*] * * Retrieving CloudWatch Metrics for AccountID : *, CloudWatch Metric : *, Resource Type : *, ResourceID : *" as level, time, logId, accountId, metric, type, resourceId | display level, time, logId, accountId, metric, type, resourceId | filter level like "INFO"`}]},{category:"Route 53",examples:[{title:"Number of requests received every 10 minutes by edge location",expr:"stats count(*) by queryType, bin(10m)"},{title:"Number of unsuccessful requests by domain",expr:'filter responseCode="SERVFAIL" | stats count(*) by queryName'},{title:"Top 10 DNS resolver IPs with highest number of requests",expr:"stats count(*) as numRequests by resolverIp | sort numRequests desc | limit 10"}]},{category:"AWS AppSync",examples:[{title:"Number of unique HTTP status codes",expr:$`fields ispresent(graphQLAPIId) as isApi | filter isApi | filter logType = "RequestSummary" | stats count() as statusCount by statusCode | sort statusCount desc`},{title:"Top 10 resolvers with maximum latency",expr:$`fields resolverArn, duration | filter logType = "Tracing" | sort duration desc | limit 10`},{title:"Most frequently invoked resolvers",expr:$`fields ispresent(resolverArn) as isRes | stats count() as invocationCount by resolverArn | filter isRes | filter logType = "Tracing" | sort invocationCount desc | limit 10`},{title:"Resolvers with most errors in mapping templates",expr:$`fields ispresent(resolverArn) as isRes | stats count() as errorCount by resolverArn, logType | filter isRes and (logType = "RequestMapping" or logType = "ResponseMapping") and fieldInError | sort errorCount desc | limit 10`},{title:"Field latency statistics",expr:$`fields requestId, latency | filter logType = "RequestSummary" | sort latency desc | limit 10`},{title:"Resolver latency statistics",expr:$`fields ispresent(resolverArn) as isRes | filter isRes | filter logType = "Tracing" | stats min(duration), max(duration), avg(duration) as avgDur by resolverArn | sort avgDur desc | limit 10`},{title:"Top 10 requests with maximum latency",expr:$`fields requestId, latency | filter logType = "RequestSummary" | sort latency desc | limit 10`}]}],lo=[{category:"fields",examples:[{description:"Retrieve one or more log fields. You can also use functions and operations such as abs(a+b), sqrt(a/b), log(a)+log(b), strlen(trim()), datefloor(), isPresent(), and others in this command.",expr:"fields @log, @logStream, @message, @timestamp"}]},{category:"filter",examples:[{description:"Retrieve log fields based on one or more conditions. You can use comparison operators such as =, !=, >, >=, <, <=, boolean operators such as and, or, and not, and regular expressions in this command.",expr:"filter @message like /(?i)(Exception|error|fail|5dd)/"}]},{category:"stats",examples:[{description:"Calculate aggregate statistics such as sum(), avg(), count(), min() and max() for log fields.",expr:"stats count() by bin(5m)"}]},{category:"sort",examples:[{description:"Sort the log fields in ascending or descending order.",expr:"sort @timestamp asc"}]},{category:"limit",examples:[{description:"Limit the number of log events returned by a query.",expr:"limit 10"}]},{category:"parse",examples:[{description:"Create one or more ephemeral fields, which can be further processed by the query. The following example will extract the ephemeral fields host, identity, dateTimeString, httpVerb, url, protocol, statusCode, bytes from @message, and return the url, max(bytes), and avg(bytes) fields sorted by max(bytes) in descending order.",expr:$`parse '* - * [*] "* * *" * *' as host, identity, dateTimeString, httpVerb, url, protocol, statusCode, bytes | stats max(bytes) as maxBytes, avg(bytes) by url | sort maxBytes desc`}]}];function Dr(t,e){const r=ft,a=(0,Vt.a)(kt().tokenize(t,r)).filter(o=>typeof o!="string").map((o,i)=>s.createElement("span",{className:`prism-token token ${o.types.join(" ")} ${o.aliases.join(" ")}`,key:`${e}-token-${i}`},o.content));return s.createElement("div",{className:"slate-query-field"},a)}const co=(0,W.css)` margin-top: 5px; `,uo=(0,W.css)` text-decoration: underline; `,mo=t=>{const[e,r]=(0,s.useState)(!1),[n,a]=(0,s.useState)(!1);return s.createElement("div",null,s.createElement("h3",null,"CloudWatch Logs cheat sheet"),s.createElement(Nr.U,{label:"Commands",collapsible:!0,isOpen:e,onToggle:o=>r(o)},s.createElement(s.Fragment,null,lo.map((o,i)=>s.createElement("div",{key:`cat-${i}`},s.createElement("h5",null,o.category),o.examples.map((l,c)=>s.createElement("div",{key:`item-${c}`},s.createElement("p",null,l.description),s.createElement("button",{type:"button",className:"cheat-sheet-item__example",key:l.expr,onClick:()=>t.onClickExample({refId:t.query.refId??"A",expression:l.expr,queryMode:"Logs",region:t.query.region,id:t.query.refId??"A",logGroupNames:"logGroupNames"in t.query?t.query.logGroupNames:[],logGroups:"logGroups"in t.query?t.query.logGroups:[]})},s.createElement("pre",null,Dr(l.expr,`item-${c}`))))))))),s.createElement(Nr.U,{label:"Queries",collapsible:!0,isOpen:n,onToggle:o=>a(o)},io.map((o,i)=>s.createElement("div",{key:`cat-${i}`},s.createElement("div",{className:`cheat-sheet-item__title ${(0,W.cx)(co)}`},o.category),o.examples.map((l,c)=>s.createElement("div",{className:"cheat-sheet-item",key:`item-${c}`},s.createElement("h4",null,l.title),s.createElement("button",{type:"button",className:"cheat-sheet-item__example",key:l.expr,onClick:()=>t.onClickExample({refId:t.query.refId??"A",expression:l.expr,queryMode:"Logs",region:t.query.region,id:t.query.refId??"A",logGroupNames:"logGroupNames"in t.query?t.query.logGroupNames:[],logGroups:"logGroups"in t.query?t.query.logGroups:[]})},s.createElement("pre",null,Dr(l.expr,`item-${c}`)))))))),s.createElement("div",null,"Note: If you are seeing masked data, you may have CloudWatch logs data protection enabled."," ",s.createElement("a",{className:(0,W.cx)(uo),href:"https://grafana.com/docs/grafana/latest/datasources/aws-cloudwatch/#cloudwatch-logs-data-protection",target:"_blank",rel:"noreferrer"},"See documentation for details"),"."))};function po({data:t=[]}){const e=(0,s.useMemo)(()=>(0,z.groupBy)(t,"refId"),[t]);return s.createElement(s.Fragment,null,s.createElement("table",{className:"filter-table form-inline"},s.createElement("thead",null,s.createElement("tr",null,s.createElement("th",null,"RefId"),s.createElement("th",null,"Metric Data Query ID"),s.createElement("th",null,"Metric Data Query Expression"),s.createElement("th",null,"Period"),s.createElement("th",null))),Object.entries(e).map(([r,n],a)=>{if(!n.length)return null;const o=n[0],i=o.meta?.custom;return i?s.createElement("tbody",{key:a},s.createElement("tr",null,s.createElement("td",null,r),s.createElement("td",null,i.id),s.createElement("td",null,o.meta?.executedQueryString),s.createElement("td",null,i.period))):null})))}var go=m(86312),fo=m(92949);const ho=({payload:{dashboardId:t,orgId:e,grafanaVersion:r,queries:n}})=>{try{const a=n[fo.id];if(!a?.length)return;let o=[],i=[];for(const c of a)if(!c.hide){if(ke(c))c.logGroupNames?.length&&o.push(c);else if(Oe(c)){const p=Et(c);Ft(p)&&i.push(c)}}const l={grafana_version:r,dashboard_id:t,org_id:e,logs_queries_count:o?.length,metrics_queries_count:i?.length,metrics_search_count:0,metrics_search_builder_count:0,metrics_search_code_count:0,metrics_search_match_exact_count:0,metrics_query_count:0,metrics_query_builder_count:0,metrics_query_code_count:0,metrics_queries_with_account_count:0};for(const c of i)l.metrics_search_count+=+(c.metricQueryType===h.$5.Search),l.metrics_search_builder_count+=+xt(c),l.metrics_search_code_count+=+(c.metricQueryType===h.$5.Search&&c.metricEditorMode===h.MQ.Code),l.metrics_search_match_exact_count+=+!!(xt(c)&&c.matchExact),l.metrics_query_count+=+(c.metricQueryType===h.$5.Query),l.metrics_query_builder_count+=+(c.metricQueryType===h.$5.Query&&c.metricEditorMode===h.MQ.Builder),l.metrics_query_code_count+=+(c.metricQueryType===h.$5.Query&&c.metricEditorMode===h.MQ.Code),l.metrics_queries_with_account_count+=+!!(me.config.featureToggles.cloudWatchCrossAccountQuerying&&xt(c)&&c.accountId);(0,go.ff)("grafana_ds_cloudwatch_dashboard_loaded",l)}catch(a){console.error("error in cloudwatch tracking handler",a)}},xt=t=>t.metricQueryType===h.$5.Search&&t.metricEditorMode===h.MQ.Builder,yo=new w.hf(Lr).setQueryEditorHelp(mo).setConfigEditor(Wa).setQueryEditor(Xn).setMetadataInspector(po);(0,v.N$)().subscribe(T.Pl,ho)},26623:(ce,Q,m)=>{"use strict";m.d(Q,{Z:()=>D});var w=m(27702),T=function(X){return X!==Object(X)},v=function(X,j,ue){var _=(0,w.useRef)(void 0);(!_.current||!ue(j,_.current))&&(_.current=j),(0,w.useEffect)(X,_.current)};const s=v;var K=m(7922),k=m.n(K);const O=k();var G=function(X){return X!==Object(X)},F=function(X,j){s(X,j,O)};const D=F},7922:ce=>{"use strict";ce.exports=function Q(m,w){if(m===w)return!0;if(m&&w&&typeof m=="object"&&typeof w=="object"){if(m.constructor!==w.constructor)return!1;var T,v,s;if(Array.isArray(m)){if(T=m.length,T!=w.length)return!1;for(v=T;v--!==0;)if(!Q(m[v],w[v]))return!1;return!0}if(m.constructor===RegExp)return m.source===w.source&&m.flags===w.flags;if(m.valueOf!==Object.prototype.valueOf)return m.valueOf()===w.valueOf();if(m.toString!==Object.prototype.toString)return m.toString()===w.toString();if(s=Object.keys(m),T=s.length,T!==Object.keys(w).length)return!1;for(v=T;v--!==0;)if(!Object.prototype.hasOwnProperty.call(w,s[v]))return!1;for(v=T;v--!==0;){var K=s[v];if(!(K==="_owner"&&m.$$typeof)&&!Q(m[K],w[K]))return!1}return!0}return m!==m&&w!==w}},39955:(ce,Q,m)=>{ce.exports=m(14239)},14239:(ce,Q)=>{(function(m){"use strict";m.stringify=function T(v){function s(F){return/[^\w-.]/.test(F)?F.replace(/[^\w-.]/g,function(D){return D==="$"?"!":(D=D.charCodeAt(0),D<256?"*"+("00"+D.toString(16)).slice(-2):"**"+("0000"+D.toString(16)).slice(-4))}):F}var K;switch(typeof v){case"number":return isFinite(v)?"~"+v:"~null";case"boolean":return"~"+v;case"string":return"~'"+s(v);case"object":if(!v)return"~null";if(K=[],Array.isArray(v)){for(var k=0;k<v.length;k++)K[k]=T(v[k])||"~null";return"~("+(K.join("")||"~")+")"}else{for(var O in v)if(v.hasOwnProperty(O)){var G=T(v[O]);G&&K.push(s(O)+G)}return"~("+K.join("~")+")"}default:return}};var w={true:!0,false:!1,null:null};m.parse=function(T){if(!T)return T;T=T.replace(/%(25)*27/g,"'");var v=0,s=T.length;function K(O){if(T.charAt(v)!==O)throw new Error("bad JSURL syntax: expected "+O+", got "+(T&&T.charAt(v)));v++}function k(){for(var O=v,G,F="";v<s&&(G=T.charAt(v))!=="~"&&G!==")";)switch(G){case"*":O<v&&(F+=T.substring(O,v)),T.charAt(v+1)==="*"?(F+=String.fromCharCode(parseInt(T.substring(v+2,v+6),16)),O=v+=6):(F+=String.fromCharCode(parseInt(T.substring(v+1,v+3),16)),O=v+=3);break;case"!":O<v&&(F+=T.substring(O,v)),F+="$",O=++v;break;default:v++}return F+T.substring(O,v)}return function O(){var G,F,D;switch(K("~"),F=T.charAt(v)){case"(":if(v++,T.charAt(v)==="~")if(G=[],T.charAt(v+1)===")")v++;else do G.push(O());while(T.charAt(v)==="~");else if(G={},T.charAt(v)!==")")do{var X=k();G[X]=O()}while(T.charAt(v)==="~"&&++v);K(")");break;case"'":v++,G=k();break;default:for(D=v++;v<s&&/[^)~]/.test(T.charAt(v));)v++;var j=T.substring(D,v);if(/[\d\-]/.test(F))G=parseFloat(j);else if(G=w[j],typeof G>"u")throw new Error("bad value keyword: "+j)}return G}()},m.tryParse=function(T,v){try{return m.parse(T)}catch{return v}}})(Q)}}]); //# sourceMappingURL=7357.79fae884930b4650375f.js.map