D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
usr
/
share
/
grafana
/
public
/
build
/
Filename :
7963.d9aa8993d3da7a2655a9.js
back
Copy
"use strict";(self.webpackChunkgrafana=self.webpackChunkgrafana||[]).push([[7963],{5562:(oe,W,i)=>{i.d(W,{i:()=>r});var y=i(42844),h=i(27702),L=i(66310);const r=({hideLine:T=!1})=>{const P=(0,L.wW)(M);return T?h.createElement("hr",{className:P.dividerHideLine}):h.createElement("hr",{className:P.divider})},M=T=>({divider:(0,y.css)` margin: ${T.spacing(4,0)}; `,dividerHideLine:(0,y.css)` border: none; margin: ${T.spacing(3,0)}; `})},29126:(oe,W,i)=>{i.d(W,{I:()=>x});var y=i(42844),h=i(27702),L=i(17312),r=i(78102),M=i(66310),T=i(71107),P=i(48024),v=i(42074),$=i(47449);function R({options:f,onOptionsChange:C}){const B=(0,M.wW)(p);return h.createElement("div",{className:B.container},h.createElement(T.Z,{className:B.row},h.createElement(P._,{tooltip:"Displays the node graph above the trace view. Default: disabled",label:"Enable node graph",labelWidth:26},h.createElement(v.x,{id:"enableNodeGraph",value:f.jsonData.nodeGraph?.enabled,onChange:w=>(0,L.tp)({onOptionsChange:C,options:f},"nodeGraph",{...f.jsonData.nodeGraph,enabled:w.currentTarget.checked})}))))}const x=({options:f,onOptionsChange:C})=>h.createElement(r._,{title:"Node graph",description:h.createElement($.W,{description:"Show or hide the node graph visualization.",suffix:`${f.type}/#node-graph`,feature:"the node graph"})},h.createElement(R,{options:f,onOptionsChange:C})),p=f=>({infoText:(0,y.css)` label: infoText; padding-bottom: ${f.spacing(2)}; color: ${f.colors.text.secondary}; `,container:(0,y.css)` label: container; width: 100%; `,row:(0,y.css)` label: row; align-items: baseline; `})},35977:(oe,W,i)=>{i.d(W,{Y:()=>w});var y=i(42844),h=i(27702),L=i(17312),r=i(19010),M=i(66310),T=i(71107),P=i(48024),v=i(66670),$=i(1128),R=i(53229),x=i(47449),p=i(71654),f=i(19059),C=i(51778);function B({options:E,onOptionsChange:Q}){const le=(0,M.wW)(Z);return h.createElement("div",{className:(0,y.css)({width:"100%"})},h.createElement(T.Z,{className:le.row},h.createElement(P._,{tooltip:"The Prometheus data source the trace is going to navigate to",label:"Data source",labelWidth:26},h.createElement(R.q,{inputId:"trace-to-metrics-data-source-picker",pluginId:"prometheus",current:E.jsonData.tracesToMetrics?.datasourceUid,noDefault:!0,width:40,onChange:A=>(0,L.tp)({onOptionsChange:Q,options:E},"tracesToMetrics",{...E.jsonData.tracesToMetrics,datasourceUid:A.uid})})),E.jsonData.tracesToMetrics?.datasourceUid?h.createElement(v.zx,{type:"button",variant:"secondary",size:"sm",fill:"text",onClick:()=>{(0,L.tp)({onOptionsChange:Q,options:E},"tracesToMetrics",{...E.jsonData.tracesToMetrics,datasourceUid:void 0})}},"Clear"):null),h.createElement(T.Z,null,h.createElement(p.w,{label:(0,C.mH)("start"),tooltip:(0,C.rr)("start"),value:E.jsonData.tracesToMetrics?.spanStartTimeShift||"",onChange:A=>{(0,L.tp)({onOptionsChange:Q,options:E},"tracesToMetrics",{...E.jsonData.tracesToMetrics,spanStartTimeShift:A})},isInvalidError:C.Ny})),h.createElement(T.Z,null,h.createElement(p.w,{label:(0,C.mH)("end"),tooltip:(0,C.rr)("end"),value:E.jsonData.tracesToMetrics?.spanEndTimeShift||"",onChange:A=>{(0,L.tp)({onOptionsChange:Q,options:E},"tracesToMetrics",{...E.jsonData.tracesToMetrics,spanEndTimeShift:A})},isInvalidError:C.Ny})),h.createElement(T.Z,null,h.createElement(P._,{tooltip:"Tags that will be used in the metrics query",label:"Tags",labelWidth:26},h.createElement(f.a,{values:E.jsonData.tracesToMetrics?.tags??[],onChange:A=>(0,L.tp)({onOptionsChange:Q,options:E},"tracesToMetrics",{...E.jsonData.tracesToMetrics,tags:A})}))),E.jsonData.tracesToMetrics?.queries?.map((A,z)=>h.createElement("div",{key:z,className:le.queryRow},h.createElement(P._,{label:"Link Label",labelWidth:26,tooltip:"Descriptive label for the linked query"},h.createElement($.I,{label:"Link Label",type:"text",allowFullScreen:!0,value:A.name,width:40,onChange:ee=>{let te=E.jsonData.tracesToMetrics?.queries.slice()??[];te[z].name=ee.currentTarget.value,(0,L.tp)({onOptionsChange:Q,options:E},"tracesToMetrics",{...E.jsonData.tracesToMetrics,queries:te})}})),h.createElement(P._,{label:"Query",labelWidth:10,tooltip:"The Prometheus query that will run when navigating from a trace to metrics. Interpolate tags using the `$__tags` keyword",grow:!0},h.createElement($.I,{label:"Query",type:"text",allowFullScreen:!0,value:A.query,onChange:ee=>{let te=E.jsonData.tracesToMetrics?.queries.slice()??[];te[z].query=ee.currentTarget.value,(0,L.tp)({onOptionsChange:Q,options:E},"tracesToMetrics",{...E.jsonData.tracesToMetrics,queries:te})}})),h.createElement(v.zx,{variant:"destructive",title:"Remove query",icon:"times",type:"button",onClick:()=>{let ee=E.jsonData.tracesToMetrics?.queries.slice();ee?.splice(z,1),(0,L.tp)({onOptionsChange:Q,options:E},"tracesToMetrics",{...E.jsonData.tracesToMetrics,queries:ee})}}))),h.createElement(v.zx,{variant:"secondary",title:"Add query",icon:"plus",type:"button",onClick:()=>{(0,L.tp)({onOptionsChange:Q,options:E},"tracesToMetrics",{...E.jsonData.tracesToMetrics,queries:[...E.jsonData.tracesToMetrics?.queries??[],{query:""}]})}},"Add query"))}const w=({options:E,onOptionsChange:Q})=>h.createElement(r.K,{title:"Trace to metrics",description:h.createElement(x.W,{description:"Navigate from a trace span to the selected data source's metrics.",suffix:`${E.type}/#trace-to-metrics`,feature:"trace to metrics"}),isCollapsible:!0,isInitiallyOpen:!0},h.createElement(B,{options:E,onOptionsChange:Q})),Z=E=>({infoText:(0,y.css)` padding-bottom: ${E.spacing(2)}; color: ${E.colors.text.secondary}; `,row:(0,y.css)` label: row; align-items: baseline; `,queryRow:(0,y.css)` label: queryRow; display: flex; flex-flow: wrap; `})},83392:(oe,W,i)=>{i.d(W,{n:()=>T});var y=i(27702),h=i(64826);const L=y.lazy(()=>Promise.all([i.e(3565),i.e(7142)]).then(i.bind(i,11742))),r=P=>y.createElement(y.Suspense,{fallback:null},y.createElement(L,{...P})),M=P=>{const v=(0,y.useRef)(null),{onRunQuery:$,onChange:R,...x}=P,p=C=>{v.current=C,R(C),$()},f=C=>{R(C)};return y.createElement(r,{onRunQuery:p,onBlur:f,...x})};class T extends y.PureComponent{constructor(v){super(v),this._isMounted=!1,this.onChangeQuery=($,R)=>{const{query:x,onChange:p,onRunQuery:f}=this.props;if(p){const C={...x,expr:$};p(C),R&&f&&f()}},this.state={labelsLoaded:!1}}async componentDidMount(){this._isMounted=!0,await this.props.datasource.languageProvider.start(),this._isMounted&&this.setState({labelsLoaded:!0})}componentWillUnmount(){this._isMounted=!1}componentDidUpdate(v){const{range:$,datasource:{languageProvider:R}}=this.props;(0,h.rf)($,v.range)&&R.fetchLabels()}render(){const{ExtraFieldElement:v,query:$,datasource:R,history:x,onRunQuery:p,onQueryType:f}=this.props,C=this.props.placeholder??"Enter a Loki query (run with Shift+Enter)";return y.createElement(y.Fragment,null,y.createElement("div",{className:"gf-form-inline gf-form-inline--xs-view-flex-column flex-grow-1","data-testid":this.props["data-testid"]},y.createElement("div",{className:"gf-form--grow flex-shrink-1 min-width-15"},y.createElement(M,{datasource:R,history:x??[],onChange:this.onChangeQuery,onRunQuery:p,initialValue:$.expr??"",placeholder:C,onQueryType:f}))),v)}}},64826:(oe,W,i)=>{i.d(W,{Hk:()=>$,U9:()=>T,_z:()=>R,aC:()=>x,iS:()=>P,rf:()=>L,tU:()=>v});function y(p){return h(p/1e3)}function h(p){return Math.floor(p/60)}function L(p,f){if(p&&f){const C=y(p.from.valueOf())===y(f.from.valueOf()),B=y(p.to.valueOf())===y(f.to.valueOf());return!(C&&B)}return!1}const r=/[*+?()|\\.\[\]{}^$]/g;function M(p){return p.replace(r,"\\$&")}function T(p){return p.replace(/\\/g,"\\\\").replace(/\n/g,"\\n").replace(/"/g,'\\"')}function P(p){return p.replace(/\\n/g,` `).replace(/\\"/g,'"').replace(/\\\\/g,"\\")}function v(p){return T(M(p))}function $(p,f){return R(f)?v(p):T(p)}function R(p){return!!(p&&(p.includes("=~")||p.includes("!~")))}function x(p){const f=["b","kib","Kib","kb","KB","mib","Mib","mb","MB","gib","Gib","gb","GB","tib","Tib","tb","TB","pib","Pib","pb","PB","eib","Eib","eb","EB"],C=new RegExp(`^(?:-?\\d+(?:\\.\\d+)?)(?:${f.join("|")})$`);return!!p.match(C)}},85187:(oe,W,i)=>{i.d(W,{d:()=>x});var y=i(42844),h=i(27702),L=i(73195),r=i(21609),M=i(23852),T=i(34667),P=i(66310),v=i(41640),$=i(80011),R=i(73453);function x({title:f,children:C,collapsedInfo:B,queryStats:w}){const[Z,E]=(0,L.Z)(!1),Q=(0,P.wW)(p),le=()=>{const{text:A,suffix:z}=(0,r.Cf)("bytes")(w.bytes,1);return A+z};return h.createElement("div",{className:Q.wrapper},h.createElement(v.U,{className:Q.collapse,collapsible:!0,isOpen:Z,onToggle:E,label:h.createElement(M.K,{gap:0,wrap:!1},h.createElement("h6",{className:Q.title},f),!Z&&h.createElement("div",{className:Q.description},B.map((A,z)=>h.createElement("span",{key:z},A))))},h.createElement("div",{className:Q.body},C)),w&&T.config.featureToggles.lokiQuerySplitting&&h.createElement($.u,{content:"Note: the query will be split into multiple parts and executed in sequence. Query limits will only apply each individual part."},h.createElement(R.J,{tabIndex:0,name:"info-circle",className:Q.tooltip,size:"sm"})),w&&h.createElement("p",{className:Q.stats},"This query will process approximately ",le(),"."))}const p=f=>({collapse:(0,y.css)({backgroundColor:"unset",border:"unset",marginBottom:0,["> button"]:{padding:f.spacing(0,1)}}),wrapper:(0,y.css)({width:"100%",display:"flex",justifyContent:"space-between",alignItems:"baseline"}),title:(0,y.css)({flexGrow:1,overflow:"hidden",fontSize:f.typography.bodySmall.fontSize,fontWeight:f.typography.fontWeightMedium,margin:0}),description:(0,y.css)({color:f.colors.text.secondary,fontSize:f.typography.bodySmall.fontSize,fontWeight:f.typography.bodySmall.fontWeight,paddingLeft:f.spacing(2),gap:f.spacing(2),display:"flex"}),body:(0,y.css)({display:"flex",gap:f.spacing(2),flexWrap:"wrap"}),stats:(0,y.css)({margin:"0px",color:f.colors.text.secondary,fontSize:f.typography.bodySmall.fontSize}),tooltip:(0,y.css)({marginRight:f.spacing(.25)})})},7963:(oe,W,i)=>{i.r(W),i.d(W,{plugin:()=>yr});var y=i(68246),h=i(84714),L=i(32713),r=i(27702),M=i(86312),T=i(34667);function P(){return(0,M.ff)("grafana_traces_cheatsheet_clicked",{datasourceType:"tempo",grafana_version:T.config.buildInfo.version}),r.createElement("div",null,r.createElement("h2",{id:"tempo-cheat-sheet"},"Tempo Cheat Sheet"),r.createElement("p",null,"Tempo is a trace id lookup store. Enter a trace id in the above field and hit \u201CRun Query\u201D to retrieve your trace. Tempo is generally paired with other datasources such as Loki or Prometheus to find traces."),r.createElement("p",null,"Here are some"," ",r.createElement("a",{href:"https://grafana.com/docs/tempo/latest/guides/instrumentation/",target:"blank"},"instrumentation examples")," ","to get you started with trace discovery through logs and metrics (exemplars)."))}var v=i(42844),$=i(13741),R=i(79399),x=i(71107),p=i(48024),f=i(64022),C=i(40705),B=i(66670),w=i(66310),Z=i(80601),E=i(53901),Q=i(83392),le=i(10864);const A=(t,e)=>{const a=t?` (${t})`:"";return`${e||"Error"}${a}. Please check the server logs for more details.`};async function z(t){if(!t)return;const e=(0,le.F)();try{return await e.get(t)}catch(a){console.error("Failed to load data source",a);return}}function ee({logsDatasourceUid:t,onChange:e,onRunQuery:a,query:n}){const s=(0,Z.Z)(()=>z(t),[t]);if(s.loading)return null;const o=s.value;return o?r.createElement(r.Fragment,null,r.createElement(E.W,null,"Tempo uses ",o.name," to find traces."),r.createElement(Q.n,{datasource:o,onChange:e,onRunQuery:a,query:n.linkedQuery??{refId:"linked"},history:[]})):t?t&&!o?r.createElement("div",{className:"text-warning"},"Loki search datasource is configured but the data source no longer exists. Please configure existing data source to use the search."):null:r.createElement("div",{className:"text-warning"},"Please set up a Loki search datasource in the datasource settings.")}var te=i(81078),Ie=i(32082),pe=i(73289),ve=i(39317),Pt=i(37221),ye=i(63439),ce=i(28580),Ee=i(1128),qe=i(33877),ae=i(73807),re=i(84749),k=i(89949),j=i(45383),Xe=i(91053),Lt=i(91826),et=i(6857),tt=i(42420),at=i(78209),Ce=i(22479),q=i(39343),Me=i(56469),rt=i(9045),_e=i(28037),Y=i(53933),st=i(76305),Ne=i(99633),wt=i(62247),ue=i(29241),At=i(42751),Te=i(64167),Ot=i(26631),Pe=i(5926);const Er={filters:[]};var Se=(t=>(t.Done="done",t.Error="error",t.Pending="pending",t.Streaming="streaming",t))(Se||{}),G=(t=>(t.Resource="resource",t.Span="span",t.Unscoped="unscoped",t))(G||{});const Rt={wordPattern:/(-?\d*\.\d\w*)|([^`~!#%^&*()\-=+\[{\]}\\|;:'",.<>\/?\s]+)/g,brackets:[["{","}"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{}},nt=["=","!=",">","<",">=","<=","=~"],Qt=["=","!=","=~"],$t=["=","!=",">","<",">=","<="],Le=["duration","kind","name","status"],We=["resource","span"],_t={ignoreCase:!1,defaultToken:"",tokenPostfix:".traceql",keywords:Le.concat(We),operators:nt,statusValues:["ok","unset","error","false","true"],symbols:/[=><!~?:&|+\-*\/^%]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,digits:/\d+(_+\d+)*/,octaldigits:/[0-7]+(_+[0-7]+)*/,binarydigits:/[0-1]+(_+[0-1]+)*/,tokenizer:{root:[[/[a-z_.][\w./_-]*(?=\s*(=|!=|>|<|>=|<=|=~|!~))/,"tag"],[/[a-z_.][\w./_-]*/,"tag"],[/[0-9.]+(s|ms|ns|m)/,"number"],[/^\s*[0-9A-Fa-f]+\s*$/,"tag"],[/[a-zA-Z_.]\w*/,{cases:{"@keywords":"type","@statusValues":"type.identifier","@default":"identifier"}}],[/"([^"\\]|\\.)*$/,"string.invalid"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string_double"],[/'/,"string","@string_single"],{include:"@whitespace"},[/[{}()\[\]]/,"@brackets"],[/[<>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/(@digits)[eE]([\-+]?(@digits))?[fFdD]?/,"number.float"],[/(@digits)\.(@digits)([eE][\-+]?(@digits))?[fFdD]?/,"number.float"],[/0(@octaldigits)[Ll]?/,"number.octal"],[/0[bB](@binarydigits)[Ll]?/,"number.binary"],[/(@digits)[fFdD]/,"number.float"],[/(@digits)[lL]?/,"number"]],string_double:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]],string_single:[[/[^\\']+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/'/,"string","@pop"]],clauses:[[/[^(,)]/,"tag"],[/\)/,"identifier","@pop"]],whitespace:[[/[ \t\r\n]+/,"white"]]}},Wt={id:"traceql",extensions:[".traceql"],aliases:["tempo","traceql"],mimetypes:[],def:{language:_t,languageConfiguration:Rt}},Ut={comment:{pattern:/#.*/},"span-set":{pattern:/\{[^}]*}/,inside:{filter:{pattern:/([\w.\/-]+)?(\s*)(([!=+\-<>~]+)\s*("([^"\n&]+)?"?|([^"\n\s&|}]+))?)/g,inside:{comment:{pattern:/#.*/},"label-key":{pattern:/[a-z_.][\w./_-]*(?=\s*(=|!=|>|<|>=|<=|=~|!~))/,alias:"attr-name"},"label-value":{pattern:/("(?:\\.|[^\\"])*")|(\w+)/,alias:"attr-value"}}},punctuation:/[}{&|]/}},number:/\b-?\d+((\.\d*)?([eE][+-]?\d+)?)?\b/,operator:new RegExp("/[-+*/=%^~]|&&?|\\|?\\||!=?|<(?:=>?|<|>)?|>[>=]?|","i"),punctuation:/[{};()`,.]/},it=t=>`{${t.filter(e=>e.tag&&e.operator&&e.value?.length).map(e=>`${ot(e)}${e.tag}${e.operator}${Vt(e)}`).join(" && ")}}`,Vt=t=>Array.isArray(t.value)&&t.value.length>1?`"${t.value.join("|")}"`:t.valueType==="string"?`"${t.value}"`:t.value,ot=t=>Le.find(e=>e===t.tag)?"":(t.scope===G.Resource||t.scope===G.Span?t.scope?.toLowerCase():"")+".",Ue=t=>ot(t)+t.tag,Ft=t=>t.tag==="name"?"Span Name":(0,k.startCase)(Ue(t)),Bt=(t,e)=>[...Le,...t].filter(a=>!e.includes(a)),Ve=t=>(0,k.uniq)(t.map(e=>e.name&&e.name!=="intrinsic"&&e.tags?e.tags:[]).flat()),jt=t=>(0,k.uniq)(t.map(e=>e.tags?e.tags:[]).flat()),lt=(t,e)=>(0,k.uniq)(t.map(a=>a.name&&a.name===e&&a.tags?a.tags:[]).flat());function ct(t,e,a){const n=t.slice(0);return n[e]=a,n}const ut=t=>{const e={label:t,value:t};switch(t){case"=":e.description="Equals";break;case"!=":e.description="Not equals";break;case">":e.description="Greater";break;case">=":e.description="Greater or Equal";break;case"<":e.description="Less";break;case"<=":e.description="Less or Equal";break;case"=~":e.description="Matches regex";break;case"!~":e.description="Does not match regex";break}return e};var V=i(84160);class Fe extends y.iL{constructor(e,a){super(),this.request=async(n,s={})=>(await this.datasource.metadataRequest(n,s))?.data,this.start=async()=>(this.startTask||(this.startTask=this.fetchTags().then(()=>[])),this.startTask),this.setV1Tags=n=>{this.tagsV1=n},this.setV2Tags=n=>{this.tagsV2=n},this.getTags=n=>this.tagsV2&&n?n===G.Unscoped?Ve(this.tagsV2):lt(this.tagsV2,n):this.tagsV1?(this.tagsV1.find(s=>s==="status")||this.tagsV1.push("status"),this.tagsV1):[],this.getTraceqlAutocompleteTags=n=>{if(this.tagsV2){if(n){if(n===G.Unscoped)return Ve(this.tagsV2)}else return Ve(this.tagsV2);return lt(this.tagsV2,n)}else if(this.tagsV1)return this.tagsV1.find(s=>s==="status")||this.tagsV1.push("status"),this.tagsV1;return[]},this.getAutocompleteTags=()=>this.tagsV2?jt(this.tagsV2):this.tagsV1?(this.tagsV1.find(n=>n==="status.code")||this.tagsV1.push("status.code"),this.tagsV1):[],this.datasource=e,Object.assign(this,a)}async fetchTags(){let e,a;try{a=await this.request("/api/v2/search/tags",[])}catch{e=await this.request("/api/search/tags",[])}a&&a.scopes?this.setV2Tags(a.scopes):e&&this.setV1Tags(e.tagNames)}async getOptionsV1(e){const a=await this.request(`/api/search/tag/${e}/values`);let n=[];return a&&a.tagValues&&(n=a.tagValues.map(s=>({value:s,label:s}))),n}async getOptionsV2(e){const a=await this.request(`/api/v2/search/tag/${e}/values`);let n=[];return a&&a.tagValues&&(n=a.tagValues.map(s=>({type:s.type,value:s.value,label:s.value}))),n}}var de=i(71523),kt=i(63384),dt=i(66117),Kt=i(81087),zt=i(5168),Gt=i(43685);async function Ht(){return(0,dt.Z)()}function Zt(t,e,a,n){const s=a.range;let o,l=Y.Gu.NotStarted;return(0,kt.P)(()=>Ht()).pipe((0,Ce.z)(c=>{const d=performance.now();return(0,Gt.gj)().getStream({scope:Kt.z.DataSource,namespace:e.uid,path:`search/${c}`,data:{...t,timeRange:{from:s.from.toISOString(),to:s.to.toISOString()}}}).pipe((0,q.U)(u=>{if("message"in u&&u?.message){const g=performance.now()-d,S=u.message.data.values[0][0],I=u.message.data.values[1][0],_=u.message.data.values[2][0],b=u.message.data.values[3][0];switch(_){case Se.Done:l=Y.Gu.Done;break;case Se.Streaming:l=Y.Gu.Streaming;break;case Se.Error:throw new Error(b)}o=[Yt(I,_,g),...(0,de.xA)(S,n)]}return{data:o||[],state:l}}))}))}function Yt(t,e,a){const n={steps:[{color:"blue",value:-1/0},{color:"green",value:75}],mode:zt.H.Absolute};return{refId:"streaming-progress",name:"Streaming Progress",length:1,fields:[{name:"state",type:ue.fS.string,values:[(0,k.capitalize)(e.toString())],config:{displayNameFromDS:"State"}},{name:"elapsedTime",type:ue.fS.number,values:[a],config:{unit:"ms",displayNameFromDS:"Elapsed Time"}},{name:"totalBlocks",type:ue.fS.number,values:[t.totalBlocks],config:{displayNameFromDS:"Total Blocks"}},{name:"completedJobs",type:ue.fS.number,values:[t.completedJobs],config:{displayNameFromDS:"Completed Jobs"}},{name:"totalJobs",type:ue.fS.number,values:[t.totalJobs],config:{displayNameFromDS:"Total Jobs"}},{name:"progress",type:ue.fS.number,values:[e===Se.Done?100:(t.completedJobs||0)/(t.totalJobs||1)*100],config:{displayNameFromDS:"Progress",unit:"percent",min:0,max:100,custom:{cellOptions:{type:"gauge",mode:"gradient"}},thresholds:n}}],meta:{preferredVisualisationType:"table"}}}const me=20;class Jt extends At.CK{constructor(e,a=(0,ve.J)()){super(e),this.instanceSettings=e,this.templateSrv=a,this.uploadedJson=null,this.getLokiSearchDS=()=>{const n=this.tracesToLogs?.lokiSearch!==!1&&this.lokiSearch===void 0?this.tracesToLogs?.datasourceUid:void 0;return this.lokiSearch?.datasourceUid??n},this.tracesToLogs=e.jsonData.tracesToLogs,this.serviceMap=e.jsonData.serviceMap,this.search=e.jsonData.search,this.nodeGraph=e.jsonData.nodeGraph,this.lokiSearch=e.jsonData.lokiSearch,this.traceQuery=e.jsonData.traceQuery,this.languageProvider=new Fe(this),this.search?.filters||(this.search={...this.search,filters:[{id:"service-name",tag:"service.name",operator:"=",scope:G.Resource},{id:"span-name",tag:"name",operator:"=",scope:G.Span}]})}query(e){const a=[],n=e.targets.filter(l=>!l.hide),s=(0,k.groupBy)(n,l=>l.queryType||"traceql");if(s.clear)return(0,j.of)({data:[],state:Y.Gu.Done});const o=this.getLokiSearchDS();if(o&&s.search?.length>0){(0,M.ff)("grafana_traces_loki_search_queried",{datasourceType:"tempo",app:e.app??"",grafana_version:T.config.buildInfo.version,hasLinkedQueryExpr:!!(s.search[0].linkedQuery?.expr&&s.search[0].linkedQuery?.expr!=="")});const l=(0,Pe.ak)();a.push((0,Xe.D)(l.get(o)).pipe((0,Ce.z)(c=>{const d={...e,targets:s.search.map(g=>g.linkedQuery)},m=c.instanceSettings.jsonData.derivedFields?.filter(g=>g.datasourceUid===this.uid&&g.matcherRegex).map(g=>g.matcherRegex)||[];return!m||m.length===0?(0,Lt._)(()=>new Error("No Loki datasource configured for search. Set up Derived Fields for traces in a Loki datasource settings and link it to this Tempo datasource.")):c.query(d).pipe((0,q.U)(g=>g.error?g:(0,de.RY)(g,this.uid,this.name,m)))})))}if(s.nativeSearch?.length)try{(0,M.ff)("grafana_traces_search_queried",{datasourceType:"tempo",app:e.app??"",grafana_version:T.config.buildInfo.version,hasServiceName:!!s.nativeSearch[0].serviceName,hasSpanName:!!s.nativeSearch[0].spanName,resultLimit:s.nativeSearch[0].limit??"",hasSearch:!!s.nativeSearch[0].search,minDuration:s.nativeSearch[0].minDuration??"",maxDuration:s.nativeSearch[0].maxDuration??""});const l={startTime:e.range.from.unix(),endTime:e.range.to.unix()},c=this.applyVariables(s.nativeSearch[0],e.scopedVars),d=this.buildSearchQuery(c,l);a.push(this._request("/api/search",d).pipe((0,q.U)(u=>({data:[(0,de.n4)(u.data.traces,this.instanceSettings)]})),(0,Me.K)(u=>(0,j.of)({error:{message:A(u.data.message)},data:[]}))))}catch(l){return(0,j.of)({error:{message:l instanceof Error?l.message:"Unknown error occurred"},data:[]})}if(s.traceql?.length)try{const c=this.applyVariables(s.traceql[0],e.scopedVars)?.query||"",d=/^[0-9A-Fa-f]*$/;c.trim().match(d)?((0,M.ff)("grafana_traces_traceID_queried",{datasourceType:"tempo",app:e.app??"",grafana_version:T.config.buildInfo.version,hasQuery:c!==""}),a.push(this.handleTraceIdQuery(e,s.traceql))):((0,M.ff)("grafana_traces_traceql_queried",{datasourceType:"tempo",app:e.app??"",grafana_version:T.config.buildInfo.version,query:c??"",streaming:T.config.featureToggles.traceQLStreaming}),T.config.featureToggles.traceQLStreaming?a.push(this.handleStreamingSearch(e,s.traceql)):a.push(this._request("/api/search",{q:c,limit:e.targets[0].limit??me,start:e.range.from.unix(),end:e.range.to.unix()}).pipe((0,q.U)(u=>({data:(0,de.xA)(u.data.traces,this.instanceSettings)})),(0,Me.K)(u=>(0,j.of)({error:{message:A(u.data.message)},data:[]})))))}catch(l){return(0,j.of)({error:{message:l instanceof Error?l.message:"Unknown error occurred"},data:[]})}if(s.traceqlSearch?.length)try{const l=it(s.traceqlSearch[0].filters);(0,M.ff)("grafana_traces_traceql_search_queried",{datasourceType:"tempo",app:e.app??"",grafana_version:T.config.buildInfo.version,query:l??"",streaming:T.config.featureToggles.traceQLStreaming}),T.config.featureToggles.traceQLStreaming?a.push(this.handleStreamingSearch(e,s.traceqlSearch,l)):a.push(this._request("/api/search",{q:l,limit:e.targets[0].limit??me,start:e.range.from.unix(),end:e.range.to.unix()}).pipe((0,q.U)(c=>({data:(0,de.xA)(c.data.traces,this.instanceSettings)})),(0,Me.K)(c=>(0,j.of)({error:{message:A(c.data.message)},data:[]}))))}catch(l){return(0,j.of)({error:{message:l instanceof Error?l.message:"Unknown error occurred"},data:[]})}if(s.upload?.length)if(this.uploadedJson){(0,M.ff)("grafana_traces_json_file_uploaded",{datasourceType:"tempo",app:e.app??"",grafana_version:T.config.buildInfo.version});const l=JSON.parse(this.uploadedJson),c=l.batches,d=Array.isArray(l)&&l.some(u=>u?.meta?.preferredVisualisationType==="nodeGraph");c?a.push((0,j.of)((0,de.IM)(l.batches,this.nodeGraph?.enabled))):d?a.push((0,j.of)({data:l,state:Y.Gu.Done})):a.push((0,j.of)({error:{message:"Unable to parse uploaded data."},data:[]}))}else a.push((0,j.of)({data:[],state:Y.Gu.Done}));if(this.serviceMap?.datasourceUid&&s.serviceMap?.length>0){(0,M.ff)("grafana_traces_service_graph_queried",{datasourceType:"tempo",app:e.app??"",grafana_version:T.config.buildInfo.version,hasServiceMapQuery:!!s.serviceMap[0].serviceMapQuery});const l=this.serviceMap.datasourceUid,c=this.uid;a.push(qt(e,l,c).pipe((0,rt.b)(d=>Xt(e,d,l).pipe((0,rt.b)(u=>ea(e,u,l,c))))))}return(0,et.T)(...a)}applyTemplateVariables(e,a){return this.applyVariables(e,a)}interpolateVariablesInQueries(e,a){return!e||e.length===0?[]:e.map(n=>({...n,datasource:this.getRef(),...this.applyVariables(n,a)}))}applyVariables(e,a){const n={...e};return e.linkedQuery&&(n.linkedQuery={...e.linkedQuery,expr:this.templateSrv.replace(e.linkedQuery?.expr??"",a)}),{...n,query:this.templateSrv.replace(e.query??"",a,Te.b8.Pipe),serviceName:this.templateSrv.replace(e.serviceName??"",a),spanName:this.templateSrv.replace(e.spanName??"",a),search:this.templateSrv.replace(e.search??"",a),minDuration:this.templateSrv.replace(e.minDuration??"",a),maxDuration:this.templateSrv.replace(e.maxDuration??"",a)}}handleTraceIdQuery(e,a){const n=a.filter(o=>o.query).map(o=>({...o,query:o.query.trim(),queryType:"traceId"}));if(!n.length)return tt.E;const s=this.traceIdQueryRequest(e,n);return super.query(s).pipe((0,q.U)(o=>o.error?o:(0,de.Jk)(o,this.nodeGraph?.enabled)))}traceIdQueryRequest(e,a){const n={...e,targets:a};return this.traceQuery?.timeShiftEnabled?n.range=e.range&&{...e.range,from:e.range.from.subtract(st.intervalToMs(this.traceQuery?.spanStartTimeShift||"30m"),"milliseconds"),to:e.range.to.add(st.intervalToMs(this.traceQuery?.spanEndTimeShift||"30m"),"milliseconds")}:n.range={from:(0,Ne.CQ)(0),to:(0,Ne.CQ)(0),raw:{from:(0,Ne.CQ)(0),to:(0,Ne.CQ)(0)}},n}handleStreamingSearch(e,a,n){const s=a.filter(o=>o.query||n).map(o=>({...o,query:n||o.query.trim()}));return s.length?(0,et.T)(...s.map(o=>Zt(o,this,e,this.instanceSettings))):tt.E}async metadataRequest(e,a={}){return await(0,at.n)(this._request(e,a,{method:"GET",hideFromInspector:!0}))}_request(e,a,n){const s=a?(0,Ot.tW)(a):"",o=`${this.instanceSettings.url}${e}${s.length?`?${s}`:""}`,l={...n,url:o};return(0,pe.i)().fetch(l)}async testDatasource(){const e={headers:{},method:"GET",url:`${this.instanceSettings.url}/api/echo`};return await(0,at.n)((0,pe.i)().fetch(e).pipe((0,Ce.z)(()=>(0,j.of)({status:"success",message:"Data source successfully connected."})),(0,Me.K)(a=>(0,j.of)({status:"error",message:A(a.data.message,"Unable to connect with Tempo")}))))}getQueryDisplayText(e){if(e.queryType==="nativeSearch"){let a=[];for(const n of["serviceName","spanName","search","minDuration","maxDuration","limit"])e.hasOwnProperty(n)&&e[n]&&a.push(`${(0,k.startCase)(n)}: ${e[n]}`);return a.join(", ")}return e.query}buildSearchQuery(e,a){let n=e.search??"",s=(0,k.pick)(e,["minDuration","maxDuration","limit"]);if(s=(0,k.pickBy)(s,k.identity),e.serviceName&&(n+=` service.name="${e.serviceName}"`),e.spanName&&(n+=` name="${e.spanName}"`),s.limit||(s.limit=me),s.minDuration){if(s.minDuration=this.templateSrv.replace(s.minDuration??""),!(0,Ie.IA)(s.minDuration))throw new Error("Please enter a valid min duration.");s.minDuration=s.minDuration.replace(/\s/g,"")}if(s.maxDuration){if(s.maxDuration=this.templateSrv.replace(s.maxDuration??""),!(0,Ie.IA)(s.maxDuration))throw new Error("Please enter a valid max duration.");s.maxDuration=s.maxDuration.replace(/\s/g,"")}if(!Number.isInteger(s.limit)||s.limit<=0)throw new Error("Please enter a valid limit.");let o={tags:n,...s};return a&&(o.start=a.startTime,o.end=a.endTime),o}}function Be(t,e){return(0,Xe.D)((0,Pe.ak)().get(e)).pipe((0,Ce.z)(a=>a.query(t)))}function qt(t,e,a){const n=je(t);return Be(n,e).pipe((0,_e.q)(),(0,q.U)(s=>{const o=s.find(m=>!!m.error);if(o)throw new Error(A(o.error?.message));const{nodes:l,edges:c}=(0,V.BC)(s,t.range);if(l.fields.length>0&&c.fields.length>0){const m=l.fields[0].values.length,g=c.fields[0].values.length;(0,M.ff)("grafana_traces_service_graph_size",{datasourceType:"tempo",grafana_version:T.config.buildInfo.version,nodeLength:m,edgeLength:g})}const{serviceMapIncludeNamespace:d,refId:u}=t.targets[0];return l.refId=u,c.refId=u,d?(l.fields[0].config=we(e,a,"__data.fields.title","__data.fields[0]",void 0,{targetNamespace:"__data.fields.subtitle"}),c.fields[0].config=we(e,a,"__data.fields.targetName","__data.fields.target","__data.fields.sourceName",{targetNamespace:"__data.fields.targetNamespace",sourceNamespace:"__data.fields.sourceNamespace"})):(l.fields[0].config=we(e,a,"__data.fields.id","__data.fields[0]"),c.fields[0].config=we(e,a,"__data.fields.target","__data.fields.target","__data.fields.source")),{data:[l,c],state:Y.Gu.Done}}))}function Xt(t,e,a){const n=je(t);return n.targets=pt([ge(V.rB,V.T1,t)]),Be(n,a).pipe((0,_e.q)(),(0,q.U)(s=>{const o=s.find(l=>!!l.error);if(o)throw new Error(A(o.error?.message));return{data:[s[0]?.data??[],e.data[0],e.data[1]],state:Y.Gu.Done}}))}function ea(t,e,a,n){let s=[],o="",l=[],c=[];if(e.data[0][0]&&t.app===wt.zj.Explore){const m=e.data[0][0].fields.find(g=>g.name==="span_name");m&&m.values&&(c=m.values)}else e.data[0]&&e.data[0].map(m=>{const g=m.fields.find(S=>S.labels?.span_name);g&&c.push(g.labels?.span_name)});const d=ta(c);d.length>0&&(o=ge(V.$C,'span_name=~"'+d.join("|")+'"',t),s.push(o),d.map(m=>{const g=ge(V.vO,'span_name=~"'+m+'"',t);l.push(g),s.push(g)}));const u=je(t);return u.targets=pt(s),Be(u,a).pipe((0,_e.q)(),(0,q.U)(m=>{const g=m.find(I=>!!I.error);if(g)throw new Error(A(g.error?.message));const S=aa(t,e,m[0],o,l,a,n);return S.fields.length===0?{data:[e.data[1],e.data[2]],state:Y.Gu.Done}:{data:[S,e.data[1],e.data[2]],state:Y.Gu.Done}}))}function he(t,e,a,n){return{url:"",title:t,internal:{query:{expr:e,range:!n,exemplar:!n,instant:n},datasourceUid:a,datasourceName:(0,Pe.ak)().getDataSourceSettingsByUid(a)?.name??""}}}function ta(t){return t.map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\\\$&"))}function we(t,e,a,n,s,o){let l=s?`client="\${${s}}",`:"",c=`server="\${${a}}"`,d="server";if(o!==void 0){const{targetNamespace:u}=o;if(c+=`,server_service_namespace="\${${u}}"`,d+=", server_service_namespace",l){const{sourceNamespace:m}=o;l+=`client_service_namespace="\${${m}}",`,d+=", client_service_namespace"}}return{links:[he("Request rate",`sum by (client, ${d})(rate(${V.Yt}{${l}${c}}[$__rate_interval]))`,t,!1),he("Request histogram",`histogram_quantile(0.9, sum(rate(${V.NZ}{${l}${c}}[$__rate_interval])) by (le, client, ${d}))`,t,!1),he("Failed request rate",`sum by (client, ${d})(rate(${V.yf}{${l}${c}}[$__rate_interval]))`,t,!1),mt("View traces",`\${${n}}`,"",e)]}}function mt(t,e,a,n){let s={queryType:"nativeSearch"};return e!==""&&(s.serviceName=e),a!==""&&(s.spanName=a),{url:"",title:t,internal:{query:s,datasourceUid:n,datasourceName:(0,Pe.ak)().getDataSourceSettingsByUid(n)?.name??""}}}function je(t){return{...t,targets:V.t3.map(e=>{const{serviceMapQuery:a,serviceMapIncludeNamespace:n}=t.targets[0];return{format:"table",refId:e,expr:`sum by (client, server${n?", client_service_namespace, server_service_namespace":""}) (rate(${e}${a||""}[$__range]))`,instant:!0}})}}function aa(t,e,a,n,s,o,l){let c={fields:[]};const d=e.data[0]?.filter(g=>g.refId===ge(V.rB,V.T1,t)),u=a.data.filter(g=>g.refId===n),m=a.data.filter(g=>s.includes(g.refId));if(d.length>0&&d[0].fields?.length>2&&(c.fields.push({...d[0].fields[1],name:"Name",config:{filterable:!1}}),c.fields.push({...d[0].fields[2],name:"Rate",config:{links:[he("Rate",ke(ge(V.rB,'span_name="${__data.fields[0]}"',t)),o,!1)],decimals:2}}),c.fields.push({...d[0].fields[2],name:" ",labels:null,config:{color:{mode:"continuous-BlPu"},custom:{cellOptions:{mode:Te.QH.Lcd,type:Te.h2.Gauge}},decimals:3}})),u.length>0&&u[0].fields?.length>2){const g=u[0].fields[1]?.values??[],S=u[0].fields[2]?.values??[];let I={};g.map((b,O)=>{I[b]={value:S[O]}});const _=gt({...d},I);c.fields.push({...u[0].fields[2],name:"Error Rate",values:_,config:{links:[he("Error Rate",ke(ge(V.$C,'span_name="${__data.fields[0]}"',t)),o,!1)],decimals:2}}),c.fields.push({...u[0].fields[2],name:" ",values:_,labels:null,config:{color:{mode:"continuous-RdYlGr"},custom:{cellOptions:{mode:Te.QH.Lcd,type:Te.h2.Gauge}},decimals:3}})}if(m.length>0&&m[0].fields?.length>1){let g={};m.map(S=>{const I=S.refId?.includes('span_name=~"')?'span_name=~"':'span_name="',_=S.refId?.split(I)[1].split('"}')[0];g[_]={value:S.fields[1].values[0]}}),c.fields.push({...m[0].fields[1],name:"Duration (p90)",values:gt({...d},g),config:{links:[he("Duration",ke(ge(V.vO,'span_name="${__data.fields[0]}"',t)),o,!1)],unit:"s"}})}return c.fields.length>0&&c.fields[0].values&&c.fields.push({name:"Links",type:ue.fS.string,values:c.fields[0].values.map(()=>"Tempo"),config:{links:[mt("Tempo","","${__data.fields[0]}",l)]}}),c}function ge(t,e,a){let n=a.targets[0]?.serviceMapQuery??"";const s=n.match(/^{(.*)}$/);s?.length&&(n=s[1]),n=n.replace("client","service").replace("server","service");const o=n.includes("span_name")?t.params.concat(n):t.params.concat(n).concat(e).filter(l=>l);return t.expr.replace("{}","{"+o.join(",")+"}")}function ke(t){return t=t.replace("topk(5, ","").replace(" by (span_name))",""),t.replace("__range","__rate_interval")}function gt(t,e){const a=t[0]?.fields[1]?.values??[];let n=[];for(let s=0;s<a.length;s++)Object.keys(e).includes(a[s])?n.push(e[a[s]].value):n.push("0");return n}function pt(t){return t.map(e=>({refId:e,expr:e,instant:!0}))}var ht=i(11649),fe=i(4021);class ra{constructor(e){this.triggerCharacters=["="," "],this.cachedValues={},this.languageProvider=e.languageProvider}provideCompletionItems(e,a){if(!(this.monaco&&this.editor))throw new Error("provideCompletionItems called before CompletionProvider was initialized");if(this.editor.getModel()?.id!==e.id)return{suggestions:[]};const{range:n,offset:s}=na(this.monaco,e,a),o=this.getSituation(e.getValue(),s);return this.getCompletions(o).then(c=>{const d=c.length.toString().length;return{suggestions:c.map((m,g)=>({kind:sa(m.type,this.monaco),label:m.label,insertText:m.insertText,sortText:g.toString().padStart(d,"0"),range:n}))}})}async getTagValues(e){let a;return this.cachedValues.hasOwnProperty(e)?a=this.cachedValues[e]:(a=await this.languageProvider.getOptionsV1(e),this.cachedValues[e]=a),a}async getCompletions(e){switch(e.type){case"UNKNOWN":return[];case"EMPTY":return this.getTagsCompletions();case"IN_NAME":return this.getTagsCompletions();case"IN_VALUE":const a=await this.getTagValues(e.tagName),n=[],s=o=>`"${o.label}"`;return a.forEach(o=>{o?.label&&n.push({label:o.label,insertText:s(o),type:"TAG_VALUE"})}),n;default:throw new Error(`Unexpected situation ${e}`)}}getTagsCompletions(){return this.languageProvider.getAutocompleteTags().sort((a,n)=>a.localeCompare(n,void 0,{sensitivity:"accent"})).map(a=>({label:a,insertText:a,type:"TAG_NAME"}))}getSituation(e,a){if(e===""||a===0||e[e.length-1]===" ")return{type:"EMPTY"};const n=e.substring(0,a),s=/(?<key>[^= ]+)(?<equals>=)?(?<value>([^ "]+)|"([^"]*)")?/,o=n.match(new RegExp(s,"g"));if(o?.length){const c=o[o.length-1].match(s);if(c){const d=c.groups?.key,u=c.groups?.equals;return d?u?{type:"IN_VALUE",tagName:d}:{type:"IN_NAME"}:{type:"EMPTY"}}}return{type:"EMPTY"}}}function sa(t,e){switch(t){case"TAG_NAME":return e.languages.CompletionItemKind.Enum;case"KEYWORD":return e.languages.CompletionItemKind.Keyword;case"OPERATOR":return e.languages.CompletionItemKind.Operator;case"TAG_VALUE":return e.languages.CompletionItemKind.EnumMember;case"SCOPE":return e.languages.CompletionItemKind.Class;default:throw new Error(`Unexpected CompletionType: ${t}`)}}function na(t,e,a){const n=e.getWordAtPosition(a),s=n!=null?t.Range.lift({startLineNumber:a.lineNumber,endLineNumber:a.lineNumber,startColumn:n.startColumn,endColumn:n.endColumn}):t.Range.fromPositions(a),o={column:a.column,lineNumber:a.lineNumber};return{offset:e.getOffsetAt(o),range:s}}const ia={id:"tagsfield",extensions:[".tagsfield"],aliases:["tagsfield"],mimetypes:[],def:{language:{ignoreCase:!1,defaultToken:"",tokenPostfix:".tagsfield",operators:["="],symbols:/[=><!~?:&|+\-*\/^%]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,digits:/\d+(_+\d+)*/,octaldigits:/[0-7]+(_+[0-7]+)*/,binarydigits:/[0-1]+(_+[0-1]+)*/,hexdigits:/[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/,integersuffix:/(ll|LL|u|U|l|L)?(ll|LL|u|U|l|L)?/,floatsuffix:/[fFlL]?/,tokenizer:{root:[[/[a-z_.][\w./_-]*(?=\s*(=|!=|>|<|>=|<=|=~|!~))/,"tag"],[/[a-zA-Z_.]\w*/,{cases:{"@default":"identifier"}}],[/"([^"\\]|\\.)*$/,"string.invalid"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string_double"],[/'/,"string","@string_single"],{include:"@whitespace"},[/[{}()\[\]]/,"@brackets"],[/[<>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/\d+/,"number"],[/\d*\d+[eE]([\-+]?\d+)?(@floatsuffix)/,"number.float"],[/\d*\.\d+([eE][\-+]?\d+)?(@floatsuffix)/,"number.float"],[/0[xX][0-9a-fA-F']*[0-9a-fA-F](@integersuffix)/,"number.hex"],[/0[0-7']*[0-7](@integersuffix)/,"number.octal"],[/0[bB][0-1']*[0-1](@integersuffix)/,"number.binary"],[/\d[\d']*\d(@integersuffix)/,"number"],[/\d(@integersuffix)/,"number"]],string_double:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]],string_single:[[/[^\\']+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/'/,"string","@pop"]],clauses:[[/[^(,)]/,"tag"],[/\)/,"identifier","@pop"]],whitespace:[[/[ \t\r\n]+/,"white"]]}},languageConfiguration:{wordPattern:/(-?\d*\.\d\w*)|([^`~!#%^&*()\-=+\[{\]}\\|;:'",.<>\/?\s]+)/g,brackets:[["{","}"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{}}}};function oa(t){const{onChange:e,onBlur:a,placeholder:n}=t,s=ua(t.datasource),o=(0,w.l4)(),l=ma(o,n);return r.createElement(ht.p,{value:t.value,language:be,onBlur:a,onChange:e,containerStyles:l.queryField,monacoOptions:{folding:!1,fontSize:14,lineNumbers:"off",overviewRulerLanes:0,renderLineHighlight:"none",scrollbar:{vertical:"hidden",verticalScrollbarSize:8,horizontal:"hidden",horizontalScrollbarSize:0},scrollBeyondLastLine:!1,wordWrap:"on"},onBeforeEditorMount:da,onEditorDidMount:(c,d)=>{s(c,d),la(c,d,l),ca(c)}})}function la(t,e,a){const n=[{range:new e.Range(1,1,1,1),options:{className:a.placeholder,isWholeLine:!0}}];let s=[];const o=()=>{const l=t.getModel();if(!l)return;const c=l.getValueLength()===0?n:[];s=l.deltaDecorations(s,c)};o(),t.onDidChangeModelContent(o)}function ca(t){const e=t.getDomNode(),a=()=>{if(e){const n=Math.min(1e3,t.getContentHeight()),s=parseInt(e.style.width,10);e.style.width=`${s}px`,e.style.height=`${n}px`,t.layout({width:s,height:n})}};t.onDidContentSizeChange(a),a()}function ua(t){const e=(0,r.useRef)(new ra({languageProvider:t.languageProvider}));(0,r.useEffect)(()=>{(async()=>{try{await t.languageProvider.start()}catch(s){s instanceof Error&&(0,re.WI)((0,fe.$l)((0,ae.t_)("Error",s)))}})()},[t]);const a=(0,r.useRef)(null);return(0,r.useEffect)(()=>()=>{a.current?.()},[]),(n,s)=>{e.current.editor=n,e.current.monaco=s;const{dispose:o}=s.languages.registerCompletionItemProvider(be,e.current);a.current=o}}let ft=!1;const be="tagsfield";function da(t){if(!ft){ft=!0;const{aliases:e,extensions:a,mimetypes:n,def:s}=ia;t.languages.register({id:be,aliases:e,extensions:a,mimetypes:n}),t.languages.setMonarchTokensProvider(be,s.language),t.languages.setLanguageConfiguration(be,s.languageConfiguration)}}const ma=(t,e)=>({queryField:(0,v.css)` border-radius: ${t.shape.borderRadius()}; border: 1px solid ${t.components.input.borderColor}; flex: 1; `,placeholder:(0,v.css)` ::after { content: '${e}'; font-family: ${t.typography.fontFamilyMonospace}; opacity: 0.3; } `}),vt="e.g. 1.2s, 100ms",ga=({datasource:t,query:e,onChange:a,onBlur:n,onRunQuery:s})=>{const o=(0,w.wW)(pa),l=(0,r.useMemo)(()=>new Fe(t),[t]),[c,d]=(0,r.useState)(),[u,m]=(0,r.useState)(),[g,S]=(0,r.useState)(null),[I,_]=(0,r.useState)({}),[b,O]=(0,r.useState)({serviceName:!1,spanName:!1}),J=(0,r.useCallback)(async(D,U="")=>{const ie=D==="serviceName"?"service.name":"name";O(F=>({...F,[D]:!0}));try{return(await l.getOptionsV1(ie)).filter($e=>$e.value?(0,Pt.C)($e.value,U).found:!1)}catch(F){return(0,pe.kW)(F)&&F?.status===404?S(F):F instanceof Error&&(0,re.WI)((0,qe.$l)((0,ae.t_)("Error",F))),[]}finally{O(F=>({...F,[D]:!1}))}},[l]);(0,r.useEffect)(()=>{(async()=>{try{const[U,ie]=await Promise.all([J("serviceName"),J("spanName")]);e.serviceName&&(0,ve.J)().containsTemplate(e.serviceName)&&U.push((0,te.E)(e.serviceName)),d(U),e.spanName&&(0,ve.J)().containsTemplate(e.spanName)&&ie.push((0,te.E)(e.spanName)),m(ie)}catch(U){(0,pe.kW)(U)&&U?.status===404?S(U):U instanceof Error&&(0,re.WI)((0,qe.$l)((0,ae.t_)("Error",U)))}})()},[l,J,e.serviceName,e.spanName]);const X=D=>{D.key==="Enter"&&(D.shiftKey||D.ctrlKey)&&s()},Je=(0,r.useCallback)(D=>{a({...e,search:D})},[a,e]),ne=(0,ve.J)();return r.createElement(r.Fragment,null,r.createElement("div",{className:o.container},r.createElement(ye.b,{title:"Deprecated query type",severity:"warning"},"This query type has been deprecated and will be removed in Grafana v10.3. Please migrate to another Tempo query type."),r.createElement(x.Z,null,r.createElement(p._,{label:"Service Name",labelWidth:14,grow:!0},r.createElement(ce.Ph,{inputId:"service",options:c,onOpenMenu:()=>{J("serviceName")},isLoading:b.serviceName,value:c?.find(D=>D?.value===e.serviceName)||e.serviceName,onChange:D=>{a({...e,serviceName:D?.value})},placeholder:"Select a service",isClearable:!0,onKeyDown:X,"aria-label":"select-service-name",allowCustomValue:!0}))),r.createElement(x.Z,null,r.createElement(p._,{label:"Span Name",labelWidth:14,grow:!0},r.createElement(ce.Ph,{inputId:"spanName",options:u,onOpenMenu:()=>{J("spanName")},isLoading:b.spanName,value:u?.find(D=>D?.value===e.spanName)||e.spanName,onChange:D=>{a({...e,spanName:D?.value})},placeholder:"Select a span",isClearable:!0,onKeyDown:X,"aria-label":"select-span-name",allowCustomValue:!0}))),r.createElement(x.Z,null,r.createElement(p._,{label:"Tags",labelWidth:14,grow:!0,tooltip:"Values should be in logfmt."},r.createElement(oa,{placeholder:"http.status_code=200 error=true",value:e.search||"",onChange:Je,onBlur:n,datasource:t}))),r.createElement(x.Z,null,r.createElement(p._,{label:"Min Duration",invalid:!!I.minDuration,labelWidth:14,grow:!0},r.createElement(Ee.I,{id:"minDuration",value:e.minDuration||"",placeholder:vt,onBlur:()=>{const D=ne.replace(e.minDuration??"");e.minDuration&&!(0,Ie.IA)(D)?_({...I,minDuration:!0}):_({...I,minDuration:!1})},onChange:D=>a({...e,minDuration:D.currentTarget.value}),onKeyDown:X}))),r.createElement(x.Z,null,r.createElement(p._,{label:"Max Duration",invalid:!!I.maxDuration,labelWidth:14,grow:!0},r.createElement(Ee.I,{id:"maxDuration",value:e.maxDuration||"",placeholder:vt,onBlur:()=>{const D=ne.replace(e.maxDuration??"");e.maxDuration&&!(0,Ie.IA)(D)?_({...I,maxDuration:!0}):_({...I,maxDuration:!1})},onChange:D=>a({...e,maxDuration:D.currentTarget.value}),onKeyDown:X}))),r.createElement(x.Z,null,r.createElement(p._,{label:"Limit",invalid:!!I.limit,labelWidth:14,grow:!0,tooltip:"Maximum number of returned results"},r.createElement(Ee.I,{id:"limit",value:e.limit||"",placeholder:`Default: ${me}`,type:"number",onChange:D=>{let U=D.currentTarget.value?parseInt(D.currentTarget.value,10):void 0;U&&(!Number.isInteger(U)||U<=0)?_({...I,limit:!0}):_({...I,limit:!1}),a({...e,limit:D.currentTarget.value?parseInt(D.currentTarget.value,10):void 0})},onKeyDown:X})))),g?r.createElement(ye.b,{title:"Unable to connect to Tempo search",severity:"info",className:o.alert},"Please ensure that Tempo is configured with search enabled. If you would like to hide this tab, you can configure it in the ",r.createElement("a",{href:`/datasources/edit/${t.uid}`},"datasource settings"),"."):null)},pa=t=>({container:(0,v.css)` max-width: 500px; `,alert:(0,v.css)` max-width: 75ch; margin-top: ${t.spacing(2)}; `});var yt=i(57942),ha=i(86383),fa=i(81924),va=i(31465),ya=i(85187);const Ke=r.memo(({onChange:t,query:e})=>{e.hasOwnProperty("limit")||(e.limit=me);const a=s=>{t({...e,limit:parseInt(s.currentTarget.value,10)})},n=[`Limit: ${e.limit||me}`];return r.createElement(r.Fragment,null,r.createElement(yt.p,null,r.createElement(ya.d,{title:"Options",collapsedInfo:n},r.createElement(fa.S,{label:"Limit",tooltip:"Maximum number of traces to return."},r.createElement(va.H,{className:"width-4",placeholder:"auto",type:"number",min:1,defaultValue:e.limit||me,onCommitChange:a,value:e.limit})))))});Ke.displayName="TempoQueryBuilderOptions";const Ea=/^\d+(?:\.\d)?\d*(?:us|µs|ns|ms|s|m|h)$/,Ta=()=>({noBoxShadow:(0,v.css)` box-shadow: none; *:focus { box-shadow: none; } `}),Et=({filter:t,operators:e,updateFilter:a})=>{const n=(0,w.wW)(Ta);let s=!1;return typeof t.value=="string"&&(s=t.value?!Ea.test(t.value.concat("")):!1),r.createElement(f.Lh,{spacing:"none"},r.createElement(ce.Ph,{className:n.noBoxShadow,inputId:`${t.id}-operator`,options:e.map(ut),value:t.operator,onChange:o=>{a({...t,operator:o?.value})},isClearable:!1,"aria-label":`select ${t.id} operator`,allowCustomValue:!0,width:8}),r.createElement(Ee.I,{className:n.noBoxShadow,value:t.value,onChange:o=>{a({...t,value:o.currentTarget.value})},placeholder:"e.g. 100ms, 1.2s","aria-label":`select ${t.id} value`,invalid:s,width:18}))},ze=({label:t,tooltip:e,children:a})=>r.createElement(x.Z,null,r.createElement(p._,{label:t,labelWidth:28,grow:!0,tooltip:e},a));var Tt=i(76715);const Sa=()=>({dropdown:(0,v.css)` box-shadow: none; `}),St=({filter:t,datasource:e,updateFilter:a,deleteFilter:n,isTagsLoading:s,tags:o,setError:l,hideScope:c,hideTag:d,hideValue:u,allowDelete:m})=>{const g=(0,w.wW)(Sa),S=(0,r.useMemo)(()=>new Fe(e),[e]),I=(0,r.useMemo)(()=>Ue(t),[t]),[_,b]=(0,r.useState)(t.operator),[O,J]=(0,r.useState)(t.value),X=async()=>{try{return await S.getOptionsV2(I)}catch(N){(0,pe.kW)(N)&&N?.status===404?l(N):N instanceof Error&&(0,re.WI)((0,fe.$l)((0,ae.t_)("Error",N)))}return[]},{loading:Je,value:ne}=(0,Z.Z)(X,[I,S,l]);(0,r.useEffect)(()=>{Array.isArray(t.value)&&t.value.length>1&&t.operator!=="=~"&&(b(t.operator),a({...t,operator:"=~"})),Array.isArray(t.value)&&t.value.length<=1&&(O?.length||0)>1&&a({...t,operator:_,value:t.value[0]})},[O,_,a,t]),(0,r.useEffect)(()=>{J(t.value)},[t.value]);const D=Object.values(G).map(N=>({label:N,value:N})),U=ne?.filter(N=>N.type===ne[0]?.type),ie=ne?.length===U?.length?ne?.[0]?.type:void 0;let F=nt;switch(ie){case"string":F=Qt;break;case"int":case"float":F=$t}return r.createElement(f.Lh,{spacing:"none",width:"auto"},!c&&r.createElement(ce.Ph,{className:g.dropdown,inputId:`${t.id}-scope`,options:D,value:t.scope,onChange:N=>{a({...t,scope:N?.value})},placeholder:"Select scope","aria-label":`select ${t.id} scope`}),!d&&r.createElement(ce.Ph,{className:g.dropdown,inputId:`${t.id}-tag`,isLoading:s,options:(t.tag!==void 0?(0,k.uniq)([t.tag,...o]):o).map(N=>({label:N,value:N})),value:t.tag,onChange:N=>{a({...t,tag:N?.value})},placeholder:"Select tag",isClearable:!0,"aria-label":`select ${t.id} tag`,allowCustomValue:!0}),r.createElement(ce.Ph,{className:g.dropdown,inputId:`${t.id}-operator`,options:F.map(ut),value:t.operator,onChange:N=>{a({...t,operator:N?.value})},isClearable:!1,"aria-label":`select ${t.id} operator`,allowCustomValue:!0,width:8}),!u&&r.createElement(ce.Ph,{className:g.dropdown,inputId:`${t.id}-value`,isLoading:Je,options:ne,value:t.value,onChange:N=>{Array.isArray(N)?a({...t,value:N.map($e=>$e.value),valueType:N[0]?.type||ie}):a({...t,value:N?.value,valueType:N?.type||ie})},placeholder:"Select value",isClearable:!1,"aria-label":`select ${t.id} value`,allowCustomValue:!0,isMulti:!0,allowCreateWhileLoading:!0}),m&&r.createElement(Tt._,{variant:"secondary",icon:"times",onClick:()=>n?.(t),tooltip:"Remove tag","aria-label":`remove tag with ID ${t.id}`}))},ba=()=>({vertical:(0,v.css)` display: flex; flex-direction: column; gap: 0.25rem; `,horizontal:(0,v.css)` display: flex; flex-direction: row; gap: 1rem; `}),bt=({updateFilter:t,deleteFilter:e,filters:a,datasource:n,setError:s,staticTags:o,isTagsLoading:l,hideValues:c})=>{const d=(0,w.wW)(ba),u=()=>(0,dt.Z)().slice(0,8),m=(0,r.useCallback)(()=>t({id:u(),operator:"=",scope:G.Span}),[t]);(0,r.useEffect)(()=>{a?.length||m()},[a,m]);const g=S=>{const I=n.languageProvider.getTags(S.scope);return Bt(I,o)};return r.createElement("div",{className:d.vertical},a?.map((S,I)=>r.createElement("div",{className:d.horizontal,key:S.id},r.createElement(St,{filter:S,datasource:n,setError:s,updateFilter:t,tags:g(S),isTagsLoading:l,deleteFilter:e,allowDelete:!0,hideValue:c}),I===a.length-1&&r.createElement(Tt._,{variant:"secondary",icon:"plus",onClick:m,title:"Add tag"}))))},Da=({datasource:t,query:e,onChange:a})=>{const n=(0,w.wW)(xa),[s,o]=(0,r.useState)(null),[l,c]=(0,r.useState)(!0),[d,u]=(0,r.useState)(""),m=(0,r.useCallback)(b=>{const O={...e};O.filters||=[];const J=O.filters.findIndex(X=>X.id===b.id);J>=0?O.filters=ct(O.filters,J,b):O.filters.push(b),a(O)},[a,e]),g=b=>{a({...e,filters:e.filters.filter(O=>O.id!==b.id)})};(0,r.useEffect)(()=>{u(it(e.filters||[]))},[e]);const S=(0,r.useCallback)(b=>e.filters?.find(O=>O.id===b),[e.filters]);(0,r.useEffect)(()=>{(async()=>{try{await t.languageProvider.start(),c(!1)}catch(O){O instanceof Error&&(0,re.WI)((0,fe.$l)((0,ae.t_)("Error",O)))}})()},[t]),(0,r.useEffect)(()=>{t.search?.filters?.filter(b=>b.value).forEach(b=>{S(b.id)||m(b)})},[t.search?.filters,S,m]);const I=t.search?.filters?.map(b=>b.tag)||[];I.push("duration");const _=(e.filters||[]).filter(b=>b.tag!=="duration"&&(t.search?.filters?.findIndex(O=>O.id===b.id)||0)===-1);return r.createElement(r.Fragment,null,r.createElement("div",{className:n.container},r.createElement("div",null,t.search?.filters?.map(b=>r.createElement(ze,{key:b.id,label:Ft(b),tooltip:`Filter your search by ${Ue(b)}. To modify the default filters shown for search visit the Tempo datasource configuration page.`},r.createElement(St,{filter:S(b.id)||b,datasource:t,setError:o,updateFilter:m,tags:[],hideScope:!0,hideTag:!0}))),r.createElement(ze,{label:"Duration",tooltip:"The span duration, i.e. end - start time of the span. Accepted units are ns, ms, s, m, h"},r.createElement(f.Lh,{spacing:"sm"},r.createElement(Et,{filter:S("min-duration")||{id:"min-duration",tag:"duration",operator:">",valueType:"duration"},operators:[">",">="],updateFilter:m}),r.createElement(Et,{filter:S("max-duration")||{id:"max-duration",tag:"duration",operator:"<",valueType:"duration"},operators:["<","<="],updateFilter:m}))),r.createElement(ze,{label:"Tags"},r.createElement(bt,{filters:_,datasource:t,setError:o,updateFilter:m,deleteFilter:g,staticTags:I,isTagsLoading:l}))),r.createElement(yt.p,null,r.createElement(ha.U,{query:d,lang:{grammar:Ut,name:"traceql"}})),r.createElement(Ke,{onChange:a,query:e})),s?r.createElement(ye.b,{title:"Unable to connect to Tempo search",severity:"info",className:n.alert},"Please ensure that Tempo is configured with search enabled. If you would like to hide this tab, you can configure it in the ",r.createElement("a",{href:`/datasources/edit/${t.uid}`},"datasource settings"),"."):null)},xa=t=>({alert:(0,v.css)` max-width: 75ch; margin-top: ${t.spacing(2)}; `,container:(0,v.css)` display: flex; gap: 4px; flex-wrap: wrap; flex-direction: column; `});var Ia=i(80280);function Ca({graphDatasourceUid:t,query:e,onChange:a}){const n=(0,w.wW)(Na),s=(0,Z.Z)(()=>z(t),[t]),[o,l]=(0,r.useState)(void 0);if((0,r.useEffect)(()=>{async function u(m){const g=await m.getTagKeys({series:["traces_service_graph_request_server_seconds_sum","traces_service_graph_request_total","traces_service_graph_request_failed_total"]});l(!!g.length)}!s.loading&&s.value&&u(s.value)},[s]),s.loading)return null;const c=s.value;if(!t)return r.createElement("div",{className:"text-warning"},"Please set up a service graph datasource in the datasource settings.");if(t&&!c)return r.createElement("div",{className:"text-warning"},"Service graph datasource is configured but the data source no longer exists. Please configure existing data source to use the service graph functionality.");const d=Ma(e.serviceMapQuery||"");return r.createElement("div",null,r.createElement(x.Z,null,r.createElement(p._,{label:"Filter",labelWidth:14,grow:!0},r.createElement(Ia.F,{datasource:{uid:t},filters:d,getTagKeysOptions:{series:["traces_service_graph_request_total","traces_spanmetrics_calls_total"]},addFilter:u=>{a({...e,serviceMapQuery:Ge([...d,u])})},removeFilter:u=>{const m=[...d];m.splice(u,1),a({...e,serviceMapQuery:Ge(m)})},changeFilter:(u,m)=>{const g=[...d];g.splice(u,1,m),a({...e,serviceMapQuery:Ge(g)})}}))),o===!1?r.createElement(ye.b,{title:"No service graph data found",severity:"info",className:n.alert},"Please ensure that service graph metrics are set up correctly according to the"," ",r.createElement("a",{target:"_blank",rel:"noreferrer noopener",href:"https://grafana.com/docs/grafana/latest/datasources/tempo/#service-graph",className:n.link},"Tempo documentation"),"."):null)}function Ma(t){let e,a=[];const n=/([\w_]+)(=|!=|<|>|=~|!~)"(.*?)"/g;for(;(e=n.exec(t))!==null;)a.push({key:e[1],operator:e[2],value:e[3],condition:""});return a}function Ge(t){return`{${t.map(e=>`${e.key}${e.operator}"${e.value}"`).join(",")}}`}const Na=t=>({alert:(0,v.css)` max-width: 75ch; margin-top: ${t.spacing(2)}; `,link:(0,v.css)` color: ${t.colors.text.link}; text-decoration: underline; `}),Pa={};var La=(t=>(t[t.UNSPECIFIED=0]="UNSPECIFIED",t[t.INTERNAL=1]="INTERNAL",t[t.SERVER=2]="SERVER",t[t.CLIENT=3]="CLIENT",t[t.PRODUCER=4]="PRODUCER",t[t.CONSUMER=5]="CONSUMER",t))(La||{});const He=class{constructor(t){this.triggerCharacters=["{",".","[","(","=","~"," ",'"'],this.cachedValues={},this.languageProvider=t.languageProvider,this.registerInteractionCommandId=null}provideCompletionItems(t,e){if(!(this.monaco&&this.editor))throw new Error("provideCompletionItems called before CompletionProvider was initialized");if(this.editor.getModel()?.id!==t.id)return{suggestions:[]};const{range:a,offset:n}=Aa(this.monaco,t,e),s=this.getSituation(t.getValue(),n);return this.getCompletions(s).then(l=>{const c=l.length.toString().length;return{suggestions:l.map((u,m)=>{const g={kind:wa(u.type,this.monaco),label:u.label,insertText:u.insertText,sortText:m.toString().padStart(c,"0"),range:a,command:{id:this.registerInteractionCommandId||"noOp",title:"Report Interaction",arguments:[u.label,u.type]}};return Oa(g,u.type,t,n),g})}})}setRegisterInteractionCommandId(t){this.registerInteractionCommandId=t}async getTagValues(t){let e;return this.cachedValues.hasOwnProperty(t)?e=this.cachedValues[t]:(e=await this.languageProvider.getOptionsV2(t),this.cachedValues[t]=e),e}async getCompletions(t){switch(t.type){case"UNKNOWN":return[];case"EMPTY":return this.getScopesCompletions("{ ").concat(this.getIntrinsicsCompletions("{ ")).concat(this.getTagsCompletions("{ ."));case"SPANSET_EMPTY":return this.getScopesCompletions().concat(this.getIntrinsicsCompletions()).concat(this.getTagsCompletions("."));case"SPANSET_ONLY_DOT":return this.getTagsCompletions();case"SPANSET_IN_NAME":return this.getScopesCompletions().concat(this.getIntrinsicsCompletions()).concat(this.getTagsCompletions());case"SPANSET_IN_NAME_SCOPE":return this.getTagsCompletions(void 0,t.scope);case"SPANSET_AFTER_NAME":return He.operators.map(s=>({label:s,insertText:s,type:"OPERATOR"}));case"SPANSET_IN_VALUE":let e;try{e=await this.getTagValues(t.tagName)}catch(s){(0,pe.kW)(s)?(0,re.WI)((0,fe.$l)((0,ae.t_)(s.data.error,new Error(s.data.message)))):s instanceof Error&&(0,re.WI)((0,fe.$l)((0,ae.t_)("Error",s)))}const a=[],n=s=>t.betweenQuotes?s.label:s.type==="string"?`"${s.label}"`:s.label;return e?.forEach(s=>{s?.label&&a.push({label:s.label,insertText:n(s),type:"TAG_VALUE"})}),a;case"SPANSET_AFTER_VALUE":return He.logicalOps.concat("}").map(s=>({label:s,insertText:s,type:"OPERATOR"}));default:throw new Error(`Unexpected situation ${t}`)}}getTagsCompletions(t,e){return this.languageProvider.getTraceqlAutocompleteTags(e).sort((n,s)=>n.localeCompare(s,void 0,{sensitivity:"accent"})).map(n=>({label:n,insertText:(t||"")+n,type:"TAG_NAME"}))}getIntrinsicsCompletions(t){return Le.map(e=>({label:e,insertText:(t||"")+e,type:"KEYWORD"}))}getScopesCompletions(t){return We.map(e=>({label:e,insertText:(t||"")+e,type:"SCOPE"}))}getSituationInSpanSet(t){const e=/(?<name>[\w./-]+)?/,a=/(?<op>[!=+\-<>]+)/,n=/(?<value>(?<open_quote>")([^"\n&|]+)?(?<close_quote>")?|([^"\n\s&|]+))?/,s=new RegExp("([\\s{])("+e.source+"(?<space1>\\s*)("+a.source+"(?<space2>\\s*)"+n.source+")?)(?<space3>\\s*)$"),o=t.match(s);if(o){const l=o.groups?.name,c=o.groups?.op;if(!l)return{type:"SPANSET_EMPTY"};if(l===".")return{type:"SPANSET_ONLY_DOT"};const d=l.match(/^(?<pre_dot>\.)?(?<word>\w[\w./-]*\w)(?<post_dot>\.)?$/);return c?o.groups?.space3&&o.groups.open_quote===o.groups.close_quote?{type:"SPANSET_AFTER_VALUE"}:{type:"SPANSET_IN_VALUE",tagName:l,betweenQuotes:!!o.groups?.open_quote}:We.filter(u=>u===d?.groups?.word)&&d?.groups?.post_dot?{type:"SPANSET_IN_NAME_SCOPE",scope:d?.groups?.word||""}:{type:o.groups?.space1?"SPANSET_AFTER_NAME":"SPANSET_IN_NAME"}}return{type:"EMPTY"}}getSituation(t,e){if(t===""||e===0)return{type:"EMPTY"};const a=t.substring(0,e);return a.lastIndexOf("{")>a.lastIndexOf("}")?this.getSituationInSpanSet(a):{type:"UNKNOWN"}}};let Ze=He;Ze.operators=["=","-","+","<",">",">=","<=","=~"],Ze.logicalOps=["&&","||"];function wa(t,e){switch(t){case"TAG_NAME":return e.languages.CompletionItemKind.Enum;case"KEYWORD":return e.languages.CompletionItemKind.Keyword;case"OPERATOR":return e.languages.CompletionItemKind.Operator;case"TAG_VALUE":return e.languages.CompletionItemKind.EnumMember;case"SCOPE":return e.languages.CompletionItemKind.Class;default:throw new Error(`Unexpected CompletionType: ${t}`)}}function Aa(t,e,a){const n=e.getWordAtPosition(a),s=n!=null?t.Range.lift({startLineNumber:a.lineNumber,endLineNumber:a.lineNumber,startColumn:n.startColumn,endColumn:n.endColumn}):t.Range.fromPositions(a),o={column:a.column,lineNumber:a.lineNumber};return{offset:e.getOffsetAt(o),range:s}}function Oa(t,e,a,n){if(e==="TAG_NAME"){const s=a.getValue().substring(0,n).match(/(span\.|resource\.|\.)?([\w./-]*)$/);if(s){const o=s[1],l=s[2];l&&(!o&&t.insertText[0]!=="."&&(t.insertText="."+t.insertText),t.range={...t.range,startColumn:n-l.length+1})}}}function Ra(t){const{onChange:e,onRunQuery:a,placeholder:n}=t,s=Ua(t.datasource),o=(0,w.l4)(),l=Fa(o,n),c=(0,r.useRef)(a);return c.current=a,r.createElement(ht.p,{value:t.value,language:De,onBlur:e,onChange:e,containerStyles:l.queryField,readOnly:t.readOnly,monacoOptions:{folding:!1,fontSize:14,lineNumbers:"off",overviewRulerLanes:0,renderLineHighlight:"none",scrollbar:{vertical:"hidden",verticalScrollbarSize:8,horizontal:"hidden",horizontalScrollbarSize:0},scrollBeyondLastLine:!1,wordWrap:"on"},onBeforeEditorMount:Va,onEditorDidMount:(d,u)=>{t.readOnly||(s(d,u,_a(d)),$a(d,u,()=>c.current()),Qa(d,u,l)),Wa(d)}})}function Qa(t,e,a){const n=[{range:new e.Range(1,1,1,1),options:{className:a.placeholder,isWholeLine:!0}}];let s=[];const o=()=>{const l=t.getModel();if(!l)return;const c=l.getValueLength()===0?n:[];s=l.deltaDecorations(s,c)};o(),t.onDidChangeModelContent(o)}function $a(t,e,a){t.addAction({id:"run-query",label:"Run Query",keybindings:[e.KeyMod.Shift|e.KeyCode.Enter],contextMenuGroupId:"navigation",contextMenuOrder:1.5,run:function(){a()}})}function _a(t){return t.addCommand(0,function(e,a,n){const s={datasourceType:"tempo",type:n};n!=="TAG_VALUE"&&(s.label=a),(0,M.ff)("grafana_traces_traceql_completion",s)})}function Wa(t){const e=t.getDomNode(),a=()=>{if(e){const n=Math.min(1e3,t.getContentHeight()),s=parseInt(e.style.width,10);e.style.width=`${s}px`,e.style.height=`${n}px`,t.layout({width:s,height:n})}};t.onDidContentSizeChange(a),a()}function Ua(t){const e=(0,r.useRef)(new Ze({languageProvider:t.languageProvider}));(0,r.useEffect)(()=>{(async()=>{try{await t.languageProvider.start()}catch(s){s instanceof Error&&(0,re.WI)((0,fe.$l)((0,ae.t_)("Error",s)))}})()},[t]);const a=(0,r.useRef)(null);return(0,r.useEffect)(()=>()=>{a.current?.()},[]),(n,s,o)=>{e.current.editor=n,e.current.monaco=s,e.current.setRegisterInteractionCommandId(o);const{dispose:l}=s.languages.registerCompletionItemProvider(De,e.current);a.current=l}}let Dt=!1;const De="traceql";function Va(t){if(!Dt){Dt=!0;const{aliases:e,extensions:a,mimetypes:n,def:s}=Wt;t.languages.register({id:De,aliases:e,extensions:a,mimetypes:n}),t.languages.setMonarchTokensProvider(De,s.language),t.languages.setLanguageConfiguration(De,s.languageConfiguration)}}const Fa=(t,e)=>({queryField:(0,v.css)` border-radius: ${t.shape.borderRadius()}; border: 1px solid ${t.components.input.borderColor}; flex: 1; `,placeholder:(0,v.css)` ::after { content: '${e}'; font-family: ${t.typography.fontFamilyMonospace}; opacity: 0.3; } `});function Ba(t){const e=(0,w.wW)(ja),a=(0,k.defaults)(t.query,Pa),n=s=>{t.onChange({...a,query:s})};return r.createElement(r.Fragment,null,r.createElement(E.W,null,"Build complex queries using TraceQL to select a list of traces."," ",r.createElement("a",{rel:"noreferrer",target:"_blank",href:"https://grafana.com/docs/tempo/latest/traceql/"},"Documentation")),r.createElement(Ra,{placeholder:"Enter a TraceQL query or trace ID (run with Shift+Enter)",value:a.query,onChange:n,datasource:t.datasource,onRunQuery:t.onRunQuery}),r.createElement("div",{className:e.optionsContainer},r.createElement(Ke,{query:a,onChange:t.onChange})))}const ja=()=>({optionsContainer:(0,v.css)` margin-top: 10px; `}),ka="traceqlSearch";class Ka extends r.PureComponent{constructor(e){super(e),this.onChangeLinkedQuery=a=>{const{query:n,onChange:s}=this.props;s({...n,linkedQuery:{...a,refId:"linked"}})},this.onRunLinkedQuery=()=>{this.props.onRunQuery()},this.onClearResults=()=>{const{onChange:a,query:n,onRunQuery:s}=this.props;a({...n,queryType:"clear"}),s()},this.state={uploadModalOpen:!1}}async componentDidMount(){(!this.props.query.queryType||this.props.query.queryType==="clear")&&this.props.onChange({...this.props.query,queryType:ka})}render(){const{query:e,onChange:a,datasource:n,app:s}=this.props,o=n.getLokiSearchDS(),l=n.serviceMap?.datasourceUid;let c=[{value:"traceqlSearch",label:"Search"},{value:"traceql",label:"TraceQL"},{value:"serviceMap",label:"Service Graph"}];return o&&(n?.search?.hide?c.unshift({value:"search",label:"Search"}):c.push({value:"search",label:"Loki Search"})),(e.spanName||e.serviceName||e.search||e.maxDuration||e.minDuration||e.queryType==="nativeSearch")&&c.unshift({value:"nativeSearch",label:"[Deprecated] Search"}),r.createElement(r.Fragment,null,r.createElement($.u,{title:"Upload trace",isOpen:this.state.uploadModalOpen,onDismiss:()=>this.setState({uploadModalOpen:!1})},r.createElement("div",{className:(0,v.css)({padding:this.props.theme.spacing(2)})},r.createElement(R.Yo,{options:{multiple:!1},onLoad:d=>{this.props.datasource.uploadedJson=d,a({...e,queryType:"upload"}),this.setState({uploadModalOpen:!1}),this.props.onRunQuery()}}))),r.createElement(x.Z,null,r.createElement(p._,{label:"Query type",grow:!0},r.createElement(f.Lh,{spacing:"sm",align:"center",justify:"space-between"},r.createElement(C.S,{options:c,value:e.queryType,onChange:d=>{(0,M.ff)("grafana_traces_query_type_changed",{datasourceType:"tempo",app:s??"",grafana_version:T.config.buildInfo.version,newQueryType:d,previousQueryType:e.queryType??""}),this.onClearResults(),a({...e,queryType:d})},size:"md"}),r.createElement(B.zx,{variant:"secondary",size:"sm",onClick:()=>{this.setState({uploadModalOpen:!0})}},"Import trace")))),e.queryType==="search"&&r.createElement(ee,{logsDatasourceUid:o,query:e,onRunQuery:this.onRunLinkedQuery,onChange:this.onChangeLinkedQuery}),e.queryType==="nativeSearch"&&r.createElement(ga,{datasource:this.props.datasource,query:e,onChange:a,onBlur:this.props.onBlur,onRunQuery:this.props.onRunQuery}),e.queryType==="traceqlSearch"&&r.createElement(Da,{datasource:this.props.datasource,query:e,onChange:a,onBlur:this.props.onBlur}),e.queryType==="serviceMap"&&r.createElement(Ca,{graphDatasourceUid:l,query:e,onChange:a}),e.queryType==="traceql"&&r.createElement(Ba,{datasource:this.props.datasource,query:e,onRunQuery:this.props.onRunQuery,onChange:a}))}}const za=(0,w.HE)(Ka);var Ga=i(77195),Ha=i(9058),Za=i(36859),Ya=i(83320),Ja=i(19010),qa=i(72699),xe=i(78102),Xa=Object.defineProperty,er=Object.defineProperties,tr=Object.getOwnPropertyDescriptors,xt=Object.getOwnPropertySymbols,ar=Object.prototype.hasOwnProperty,rr=Object.prototype.propertyIsEnumerable,It=(t,e,a)=>e in t?Xa(t,e,{enumerable:!0,configurable:!0,writable:!0,value:a}):t[e]=a,Ae=(t,e)=>{for(var a in e||(e={}))ar.call(e,a)&&It(t,a,e[a]);if(xt)for(var a of xt(e))rr.call(e,a)&&It(t,a,e[a]);return t},Oe=(t,e)=>er(t,tr(e));const sr=({config:t,onChange:e,className:a})=>{const n=l=>{e(Oe(Ae({},t),{jsonData:Oe(Ae({},t.jsonData),{keepCookies:l})}))},s=l=>{e(Oe(Ae({},t),{jsonData:Oe(Ae({},t.jsonData),{timeout:parseInt(l.currentTarget.value,10)})}))},o={container:(0,v.css)({maxWidth:578})};return r.createElement(xe._,{title:"Advanced HTTP settings",className:(0,v.cx)(o.container,a)},r.createElement(p._,{htmlFor:"advanced-http-cookies",label:"Allowed cookies",labelWidth:24,tooltip:"Grafana proxy deletes forwarded cookies by default. Specify cookies by name that should be forwarded to the data source.",disabled:t.readOnly,grow:!0},r.createElement(qa.B,{id:"advanced-http-cookies",placeholder:"New cookie (hit enter to add)",tags:t.jsonData.keepCookies,onChange:n})),r.createElement(p._,{htmlFor:"advanced-http-timeout",label:"Timeout",labelWidth:24,tooltip:"HTTP request timeout in seconds",disabled:t.readOnly,grow:!0},r.createElement(Ee.I,{id:"advanced-http-timeout",type:"number",min:0,placeholder:"Timeout in seconds","aria-label":"Timeout in seconds",value:t.jsonData.timeout,onChange:s})))};var nr=i(79510),Re=i(47449),H=i(5562),ir=i(29126),Ye=i(51778),or=i(35977),lr=i(32042),K=i(17312),Ct=i(53229),Mt=i(42074),Nt=i(71654);function cr({options:t,onOptionsChange:e}){const a=(0,w.wW)(Qe),n=o=>`Time shift for ${o} of search`,s=o=>`Shifts the ${o} of the time range when searching by TraceID. Searching can return traces that do not fully fall into the search time range, so we recommend using higher time shifts for longer traces. Default: 30m (Time units can be used here, for example: 5s, 1m, 3h`;return r.createElement("div",{className:a.container},r.createElement(p._,{label:"Use time range in query",tooltip:"The time range can be used when there are performance issues or timeouts since it will narrow down the search to the defined range. Default: disabled",labelWidth:26},r.createElement(Mt.x,{id:"enable-time-shift",value:t.jsonData.traceQuery?.timeShiftEnabled||!1,onChange:o=>{(0,K.tp)({onOptionsChange:e,options:t},"traceQuery",{...t.jsonData.traceQuery,timeShiftEnabled:o.currentTarget.checked})}})),r.createElement(Nt.w,{label:n("start"),tooltip:s("start"),value:t.jsonData.traceQuery?.spanStartTimeShift||"",disabled:!t.jsonData.traceQuery?.timeShiftEnabled,onChange:o=>{(0,K.tp)({onOptionsChange:e,options:t},"traceQuery",{...t.jsonData.traceQuery,spanStartTimeShift:o})},isInvalidError:Ye.Ny}),r.createElement(Nt.w,{label:n("end"),tooltip:s("end"),value:t.jsonData.traceQuery?.spanEndTimeShift||"",disabled:!t.jsonData.traceQuery?.timeShiftEnabled,onChange:o=>{(0,K.tp)({onOptionsChange:e,options:t},"traceQuery",{...t.jsonData.traceQuery,spanEndTimeShift:o})},isInvalidError:Ye.Ny}))}const Qe=t=>({infoText:(0,v.css)` padding-bottom: ${t.spacing(2)}; color: ${t.colors.text.secondary}; `,container:(0,v.css)` width: 100%; `,row:(0,v.css)` align-items: baseline; `});function ur({options:t,onOptionsChange:e}){const a=(0,w.wW)(Qe),n=t.jsonData.tracesToLogs?.lokiSearch!==!1?t.jsonData.tracesToLogs?.datasourceUid:void 0;return n&&t.jsonData.lokiSearch===void 0&&(0,K.tp)({onOptionsChange:e,options:t},"lokiSearch",{datasourceUid:n}),r.createElement("div",{className:a.container},r.createElement(x.Z,{className:a.row},r.createElement(p._,{tooltip:"The Loki data source with the service graph data",label:"Data source",labelWidth:26},r.createElement(Ct.q,{inputId:"loki-search-data-source-picker",pluginId:"loki",current:t.jsonData.lokiSearch?.datasourceUid,noDefault:!0,width:40,onChange:s=>(0,K.tp)({onOptionsChange:e,options:t},"lokiSearch",{datasourceUid:s.uid})})),t.jsonData.lokiSearch?.datasourceUid?r.createElement(B.zx,{type:"button",variant:"secondary",size:"sm",fill:"text",onClick:()=>{(0,K.tp)({onOptionsChange:e,options:t},"lokiSearch",{datasourceUid:void 0})}},"Clear"):null))}function dr({options:t,onOptionsChange:e}){const a=(0,w.wW)(Qe);return r.createElement("div",{className:a.container},r.createElement(x.Z,{className:a.row},r.createElement(p._,{tooltip:"The Prometheus data source with the service graph data",label:"Data source",labelWidth:26},r.createElement(Ct.q,{inputId:"service-graph-data-source-picker",pluginId:"prometheus",current:t.jsonData.serviceMap?.datasourceUid,noDefault:!0,width:40,onChange:n=>(0,K.tp)({onOptionsChange:e,options:t},"serviceMap",{datasourceUid:n.uid})})),t.jsonData.serviceMap?.datasourceUid?r.createElement(B.zx,{type:"button",variant:"secondary",size:"sm",fill:"text",onClick:()=>{(0,K.tp)({onOptionsChange:e,options:t},"serviceMap",{datasourceUid:void 0})}},"Clear"):null))}function mr({options:t,onOptionsChange:e,datasource:a}){const n=async()=>{if(!a)throw new Error("Unable to retrieve datasource");try{await a.languageProvider.start()}catch(u){throw new Error(A(u.data.message,"Unable to query Tempo"))}},{error:s,loading:o}=(0,Z.Z)(n,[a,t]),l=(0,r.useCallback)(u=>{let m=t.jsonData.search?.filters;m||=[];const g=m.findIndex(S=>S.id===u.id);g>=0?m=ct(m,g,u):m.push(u),(0,K.tp)({onOptionsChange:e,options:t},"search",{...t.jsonData.search,filters:m})},[e,t]),c=u=>{(0,K.tp)({onOptionsChange:e,options:t},"search",{...t.jsonData.search,filters:t.jsonData.search?.filters?.filter(m=>m.id!==u.id)})};(0,r.useEffect)(()=>{t.jsonData.search?.filters||(0,K.tp)({onOptionsChange:e,options:t},"search",{...t.jsonData.search,filters:[{id:"service-name",tag:"service.name",operator:"=",scope:G.Resource},{id:"span-name",tag:"name",operator:"=",scope:G.Span}]})},[e,t]);const d=["duration"];return r.createElement(r.Fragment,null,a?r.createElement(bt,{updateFilter:l,deleteFilter:c,filters:t.jsonData.search?.filters||[],datasource:a,setError:()=>{},staticTags:d,isTagsLoading:o,hideValues:!0}):r.createElement("div",null,"Invalid data source, please create a valid data source and try again"),s&&r.createElement(ye.b,{title:"Unable to fetch TraceQL tags",severity:"error",topSpacing:1},s.message))}function gr({options:t,onOptionsChange:e}){const a=(0,w.wW)(Qe),n=(0,le.F)(),s=async()=>await n.get({type:t.type,uid:t.uid}),{value:o}=(0,Z.Z)(s,[n,t]);return r.createElement("div",{className:a.container},r.createElement(x.Z,{className:a.row},r.createElement(p._,{tooltip:"Removes the search tab from the query editor",label:"Hide search",labelWidth:26},r.createElement(Mt.x,{id:"hideSearch",value:t.jsonData.search?.hide,onChange:l=>(0,K.tp)({onOptionsChange:e,options:t},"search",{...t.jsonData.search,hide:l.currentTarget.checked})}))),r.createElement(x.Z,{className:a.row},r.createElement(p._,{tooltip:"Configures which fields are available in the UI",label:"Static filters",labelWidth:26},r.createElement(mr,{datasource:o,options:t,onOptionsChange:e}))))}const pr=({options:t,onOptionsChange:e})=>{const a=(0,w.wW)(hr);return r.createElement("div",{className:a.container},r.createElement(Ga.j,{dataSourceName:"Tempo",docsLink:"https://grafana.com/docs/grafana/latest/datasources/tempo",hasRequiredFields:!1}),r.createElement(H.i,null),r.createElement(Ha.f,{config:t,onChange:e}),r.createElement(H.i,null),r.createElement(Za.g,{...(0,Ya.T2)({config:t,onChange:e})}),T.config.secureSocksDSProxyEnabled&&r.createElement(nr.i,{options:t,onOptionsChange:e}),r.createElement(H.i,null),r.createElement(Ye.dw,{options:t,onOptionsChange:e}),r.createElement(H.i,null),T.config.featureToggles.traceToMetrics?r.createElement(r.Fragment,null,r.createElement(or.Y,{options:t,onOptionsChange:e}),r.createElement(H.i,null)):null,r.createElement(Ja.K,{title:"Additional settings",description:"Additional settings are optional settings that can be configured for more control over your data source.",isCollapsible:!0,isInitiallyOpen:!1},r.createElement(sr,{config:t,onChange:e}),r.createElement(H.i,{hideLine:!0}),r.createElement(xe._,{title:"Service graph",description:r.createElement(Re.W,{description:"Select a Prometheus data source that contains the service graph data.",suffix:"tempo/#service-graph",feature:"the service graph"})},r.createElement(dr,{options:t,onOptionsChange:e})),r.createElement(H.i,{hideLine:!0}),r.createElement(ir.I,{options:t,onOptionsChange:e}),r.createElement(H.i,{hideLine:!0}),r.createElement(xe._,{title:"Tempo search",description:r.createElement(Re.W,{description:"Modify how traces are searched.",suffix:"tempo/#tempo-search",feature:"Tempo search"})},r.createElement(gr,{options:t,onOptionsChange:e})),r.createElement(H.i,{hideLine:!0}),r.createElement(xe._,{title:"Loki search",description:r.createElement(Re.W,{description:"Select a Loki data source to search for traces. Derived fields must be configured in the Loki data source.",suffix:"tempo/#loki-search",feature:"Loki search"})},r.createElement(ur,{options:t,onOptionsChange:e})),r.createElement(H.i,{hideLine:!0}),r.createElement(xe._,{title:"TraceID query",description:r.createElement(Re.W,{description:"Modify how TraceID queries are run.",suffix:"tempo/#traceid-query",feature:"the TraceID query"})},r.createElement(cr,{options:t,onOptionsChange:e})),r.createElement(H.i,{hideLine:!0}),r.createElement(lr.vc,{options:t,onOptionsChange:e})))},hr=t=>({container:(0,v.css)` label: container; margin-bottom: ${t.spacing(2)}; max-width: 900px; `});var fr=i(35630);const vr=({payload:{dashboardId:t,orgId:e,grafanaVersion:a,queries:n}})=>{try{const s=n[fr.id];if(!s?.length)return;let o={grafana_version:a,dashboard_id:t,org_id:e,native_search_query_count:0,search_query_count:0,service_map_query_count:0,traceql_query_count:0,upload_query_count:0,native_search_queries_with_template_variables_count:0,search_queries_with_template_variables_count:0,service_map_queries_with_template_variables_count:0,traceql_queries_with_template_variables_count:0};for(const l of s)l.hide||(l.queryType==="nativeSearch"?(o.native_search_query_count++,(l.serviceName&&se(l.serviceName)||l.spanName&&se(l.spanName)||l.search&&se(l.search)||l.minDuration&&se(l.minDuration)||l.maxDuration&&se(l.maxDuration))&&o.native_search_queries_with_template_variables_count++):l.queryType==="search"?(o.search_query_count++,l.linkedQuery&&l.linkedQuery.expr&&se(l.linkedQuery.expr)&&o.search_queries_with_template_variables_count++):l.queryType==="serviceMap"?(o.service_map_query_count++,l.serviceMapQuery&&se(l.serviceMapQuery)&&o.service_map_queries_with_template_variables_count++):l.queryType==="traceql"?(o.traceql_query_count++,se(l.query)&&o.traceql_queries_with_template_variables_count++):l.queryType==="upload"&&o.upload_query_count++);(0,M.ff)("grafana_tempo_dashboard_loaded",o)}catch(s){console.error("error in tempo tracking handler",s)}},se=t=>(0,ve.J)().containsTemplate(t),yr=new y.hf(Jt).setQueryEditor(za).setConfigEditor(pr).setQueryEditorHelp(P);(0,L.N$)().subscribe(h.Pl,vr)},80601:(oe,W,i)=>{var y;y={value:!0};var h=i(48314),L=i(27702),r=h.__importDefault(i(58281));function M(T,P){P===void 0&&(P=[]);var v=r.default(T,P,{loading:!0}),$=v[0],R=v[1];return L.useEffect(function(){R()},[R]),$}W.Z=M}}]); //# sourceMappingURL=7963.d9aa8993d3da7a2655a9.js.map