D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
usr
/
share
/
grafana
/
public
/
build
/
Filename :
graphPlugin.716d46dd40030e211887.js
back
Copy
"use strict";(self.webpackChunkgrafana=self.webpackChunkgrafana||[]).push([[1260],{66695:(Z,N,h)=>{h.d(N,{O:()=>D});var B=h(58939),V=h(78968),E=h(26129);const P={http:80,https:443,ftp:21};class D{constructor(){this.absUrl=this.wrapInDeprecationWarning(this.absUrl),this.hash=this.wrapInDeprecationWarning(this.hash),this.host=this.wrapInDeprecationWarning(this.host),this.path=this.wrapInDeprecationWarning(this.path),this.port=this.wrapInDeprecationWarning(this.port,"window.location"),this.protocol=this.wrapInDeprecationWarning(this.protocol,"window.location"),this.replace=this.wrapInDeprecationWarning(this.replace),this.search=this.wrapInDeprecationWarning(this.search),this.state=this.wrapInDeprecationWarning(this.state),this.url=this.wrapInDeprecationWarning(this.url)}wrapInDeprecationWarning(m,S){let M=this;return function(){return(0,B.d)("$location",m.name,S||"locationService"),m.apply(M,arguments)}}absUrl(){return`${window.location.origin}${this.url()}`}hash(m){if((0,E.GQ)("AngularLocationWrapper",!1,"Angular compat layer: hash"),m)throw new Error("AngularLocationWrapper method not implemented.");return E.E1.getLocation().hash.slice(1)}host(){return new URL(window.location.href).hostname}path(m){(0,E.GQ)("AngularLocationWrapper",!1,"Angular compat layer: path");const S=E.E1.getLocation();if(m!=null){let M=String(m);M=M.startsWith("/")?M:`/${M}`;const c=new URL(`${window.location.origin}${M}`);return E.E1.push({pathname:c.pathname,search:c.search.length>0?c.search:S.search,hash:c.hash.length>0?c.hash:S.hash}),this}return m===null?(E.E1.push("/"),this):S.pathname}port(){const m=new URL(window.location.href);return parseInt(m.port,10)||P[m.protocol]||null}protocol(){return new URL(window.location.href).protocol.slice(0,-1)}replace(){throw new Error("AngularLocationWrapper method not implemented.")}search(m,S){if((0,E.GQ)("AngularLocationWrapper",!1,"Angular compat layer: search"),!m)return E.E1.getSearchObject();if(m&&arguments.length>1)return E.E1.partial({[m]:S}),this;if(m){let M;typeof m=="object"?M={...m}:M=(0,E.Ox)(m);for(const p of Object.keys(M))(M[p]===null||M[p]===void 0)&&delete M[p];const c=V.Cj.renderUrl(E.E1.getLocation().pathname,M);E.E1.push(c)}return this}state(m){throw(0,E.GQ)("AngularLocationWrapper",!1,"Angular compat layer: state"),new Error("AngularLocationWrapper method not implemented.")}url(m){if((0,E.GQ)("AngularLocationWrapper",!1,"Angular compat layer: url"),m!==void 0)return m.startsWith("#")?E.E1.push({...E.E1.getLocation(),hash:m}):m.startsWith("?")?E.E1.push({...E.E1.getLocation(),search:m}):m.trim().length===0?E.E1.push("/"):E.E1.push(m),E.E1;const S=E.E1.getLocation();return`${S.pathname}${S.search}${S.hash}`}}},90108:(Z,N,h)=>{h.d(N,{k:()=>S});var B=h(89949),V=h.n(B),E=h(53933),P=h(32053),D=h(3935),K=h(39372),m=h(22377);class S extends K.q{constructor(c,p){super(c,p),this.skipDataOnInit=!1,this.dataList=[],this.useDataFrames=!1,this.panelDataObserver={next:x=>{if(this.panelData=x,x.state===E.Gu.Error&&(this.loading=!1,this.processDataError(x.error)),x.state===E.Gu.Loading){this.loading=!0,this.angularDirtyCheck();return}if(x.request){const{timeInfo:O}=x.request;O&&(this.timeInfo=O)}if(x.timeRange&&(this.range=x.timeRange),this.useDataFrames)this.handleDataFrames(x.series);else{const O=x.series.map(R=>(0,P.Zr)(R));this.handleQueryResult({data:O})}this.angularDirtyCheck()}},this.contextSrv=p.get("contextSrv"),this.datasourceSrv=p.get("datasourceSrv"),this.timeSrv=p.get("timeSrv"),this.templateSrv=p.get("templateSrv"),this.panel.datasource=this.panel.datasource||null,this.events.on(D.Kh.refresh,this.onMetricsPanelRefresh.bind(this)),this.events.on(D.Kh.panelTeardown,this.onPanelTearDown.bind(this)),this.events.on(D.Kh.componentDidMount,this.onMetricsPanelMounted.bind(this))}onMetricsPanelMounted(){const c=this.panel.getQueryRunner();this.querySubscription=c.getData({withTransforms:!0,withFieldConfig:!0}).subscribe(this.panelDataObserver)}onPanelTearDown(){this.querySubscription&&(this.querySubscription.unsubscribe(),this.querySubscription=null)}onMetricsPanelRefresh(){if(!this.otherPanelInFullscreenMode()){if(this.panel.snapshotData){this.updateTimeRange();let c=this.panel.snapshotData;return(0,B.isArray)(c)||(c=c.data),this.panelData={state:E.Gu.Done,series:c,timeRange:this.range},this.$timeout(()=>{this.events.emit(D.Kh.dataSnapshotLoad,c)})}return delete this.error,this.loading=!0,this.datasourceSrv.get(this.panel.datasource,this.panel.scopedVars).then(this.issueQueries.bind(this)).catch(c=>{this.processDataError(c)})}}processDataError(c){if(c.cancelled){console.log("Panel request cancelled",c);return}this.error=c.message||"Request Error",c.data&&(c.data.message?this.error=c.data.message:c.data.error&&(this.error=c.data.error)),this.angularDirtyCheck()}angularDirtyCheck(){this.$scope.$root.$$phase||this.$scope.$digest()}updateTimeRange(c){this.datasource=c||this.datasource,this.range=this.timeSrv.timeRange();const p=(0,m.W1)(this.panel,this.range);this.timeInfo=p.timeInfo,this.range=p.timeRange}issueQueries(c){this.updateTimeRange(c),this.datasource=c;const p=this.panel;return p.getQueryRunner().run({datasource:p.datasource,queries:p.targets,panelId:p.id,dashboardUID:this.dashboard.uid,timezone:this.dashboard.getTimezone(),timeInfo:this.timeInfo,timeRange:this.range,maxDataPoints:p.maxDataPoints||this.width,minInterval:p.interval,publicDashboardAccessToken:this.dashboard.meta.publicDashboardAccessToken,scopedVars:p.scopedVars,cacheTimeout:p.cacheTimeout,queryCachingTTL:p.queryCachingTTL,transformations:p.transformations})}handleDataFrames(c){this.loading=!1,this.dashboard&&this.dashboard.snapshot&&(this.panel.snapshotData=c.map(p=>(0,P.og)(p)));try{this.events.emit(D.Kh.dataFramesReceived,c)}catch(p){this.processDataError(p)}}handleQueryResult(c){this.loading=!1,this.dashboard.snapshot&&(this.panel.snapshotData=c.data),(!c||!c.data)&&(console.log("Data source query result invalid, missing data field:",c),c={data:[]});try{this.events.emit(D.Kh.dataReceived,c.data)}catch(p){this.processDataError(p)}}}},39372:(Z,N,h)=>{h.d(N,{q:()=>S});var B=h(89949),V=h.n(B),E=h(62435),P=h(3935),D=h(66695),K=h(12308),m=h(66574);class S{constructor(c,p){this.pluginName="",this.pluginId="",this.editModeInitiated=!1,this.loading=!1,this.onPluginTypeChange=O=>{},this.panel=this.panel??c.$parent.panel,this.dashboard=this.dashboard??c.$parent.dashboard,this.$injector=p,this.$scope=c,this.$timeout=p.get("$timeout"),this.editorTabs=[],this.$location=new D.O,this.events=new E.F,this.timing={};const x=K.default.panels[this.panel.type];x&&(this.pluginId=x.id,this.pluginName=x.name),c.$on(P.Kh.componentDidMount.name,()=>this.panelDidMount())}panelDidMount(){this.events.emit(P.Kh.componentDidMount),this.events.emit(P.Kh.initialized),this.dashboard.panelInitialized(this.panel)}renderingCompleted(){m.rv.renderingCompleted()}refresh(){this.panel.refresh()}publishAppEvent(c,p){this.$scope.$root.appEvent(c,p)}initEditMode(){this.editModeInitiated||(this.editModeInitiated=!0,this.events.emit(P.Kh.editModeInitialized))}addEditorTab(c,p,x,O){const R={title:c,directiveFn:p,icon:O};(0,B.isString)(p)&&(R.directiveFn=()=>({templateUrl:p})),x?this.editorTabs.splice(x,0,R):this.editorTabs.push(R)}getExtendedMenu(){const c=[];return this.events.emit(P.Kh.initPanelActions,c),c}async getAdditionalMenuItems(){return[]}otherPanelInFullscreenMode(){return this.dashboard.otherPanelInFullscreen(this.panel)}render(c){this.events.emit(P.Kh.render,c)}}},539:(Z,N,h)=>{h.d(N,{X:()=>E});var B=h(12308);const V=["percent_diff","percent_diff_abs"];class E{static alertToGraphThresholds(D){if(!D.alert||B.config.unifiedAlertingEnabled)return!1;for(let m=0;m<D.alert.conditions.length;m++){const S=D.alert.conditions[m];if(S.type!=="query")continue;const M=S.evaluator,c=D.thresholds=[],p=V.indexOf(S.reducer?.type)===-1;switch(M.type){case"gt":{const x=M.params[0];c.push({value:x,op:"gt",visible:p});break}case"lt":{const x=M.params[0];c.push({value:x,op:"lt",visible:p});break}case"outside_range":{const x=M.params[0],O=M.params[1];x>O?(c.push({value:x,op:"gt",visible:p}),c.push({value:O,op:"lt",visible:p})):(c.push({value:x,op:"lt",visible:p}),c.push({value:O,op:"gt",visible:p}));break}case"within_range":{const x=M.params[0],O=M.params[1];x>O?(c.push({value:x,op:"lt",visible:p}),c.push({value:O,op:"gt",visible:p})):(c.push({value:x,op:"gt",visible:p}),c.push({value:O,op:"lt",visible:p}));break}}break}for(const m of D.thresholds)m.fill=D.options.alertThreshold,m.line=D.options.alertThreshold,m.colorMode="critical";return!0}}},69887:(Z,N,h)=>{h.d(N,{y:()=>c});var B=h(32053),V=h(8508),E=h(46580),P=h(53933),D=h(21708),K=h(12308),m=h(75049),S=h(26858),M=h(22377);function c(p,x){const O=(0,B.F9)(p.snapshotData),R=new m.g,Q={dashboard:x,range:(0,V.JK)()},te=R.canWork(Q)?R.getAnnotationsInSnapshot(x,p.id):[],ie=[(0,E.P)(te)];return{timeRange:(0,M.W1)(p,(0,S.$t)().timeRange()).timeRange,state:P.Gu.Done,series:(0,D.SM)({data:O,fieldConfig:{defaults:{},overrides:[]},replaceVariables:p.replaceVariables,fieldConfigRegistry:p.plugin.fieldConfigRegistry,theme:K.config.theme2,timeZone:x.getTimezone()}),annotations:ie}}},36676:(Z,N,h)=>{h.d(N,{H:()=>K,n:()=>D});var B=h(32053),V=h(21609),E=h(70732),P=h(89897);const D=m=>{const S=m.field.links;if(!(!S||S.length===0))return{getLinks:M=>{const c={};if(m.view){const{dataFrame:x}=m.view;c.__series={value:{name:x.name,refId:x.refId},text:"Series"};const O=m.colIndex!==void 0?x.fields[m.colIndex]:void 0;if(O){if(c.__field={value:{name:O.name,labels:O.labels},text:"Field"},m.rowIndex!==void 0&&m.rowIndex>=0){const{timeField:R}=(0,B.sV)(x);c.__value={value:{raw:O.values[m.rowIndex],numeric:m.display.numeric,text:(0,V.zc)(m.display),time:R?R.values[m.rowIndex]:void 0},text:"Value"}}m.view&&(c.__data={value:{name:x.name,refId:x.refId,fields:(0,E.z)({frame:x,rowIndex:m.rowIndex})},text:"Data"})}else c.__value={value:{raw:m.display.numeric,numeric:m.display.numeric,text:(0,V.zc)(m.display),calc:m.name},text:"Value"}}else console.log("VALUE",m);const p=(x,O,R)=>{const Q={...c,...O};return M(x,Q,R)};return S.map(x=>(0,P.Bq)().getDataLinkUIModel(x,p,m))}}},K=m=>{const S=m.links;if(!(!S||S.length===0))return{getLinks:()=>S.map(M=>(0,P.Bq)().getDataLinkUIModel(M,m.replaceVariables,m))}}},1648:(Z,N,h)=>{h.r(N),h.d(N,{GraphCtrl:()=>ae,plugin:()=>Fe});var B=h(89377),V=h(4027),E=h(59554),P=h(65103),D=h(85095),K=h(28844),m=h(26189),S=h(47825),M=h(7610),c=h.n(M),p=h(89949),x=h(75475),O=h.n(x),R=h(32416);const Q=(n,e,t)=>{const s=(0,R.V)(),i=document.createElement("div");i.innerHTML='<annotation-tooltip event="event" on-edit="onEdit()"></annotation-tooltip>',s.invoke(["$compile","$rootScope",(o,a)=>{const l=t.getOptions().events.manager,r=a.$new(!0);r.event=e,r.onEdit=()=>{l.editEvent(e)},o(i)(r),r.$digest(),r.$destroy();const d=new(O())({target:n[0],content:i,position:"bottom center",classes:"drop-popover drop-popover--annotation",openOn:"hover",hoverCloseDelay:200,tetherOptions:{constraints:[{to:"window",pin:!0,attachment:"both"}]}});d.open(),d.on("close",()=>{setTimeout(()=>{d.destroy()})})}])};let te=null;const ie=(n,e,t)=>{const s=t.getOptions().events.manager;if(s.editorOpen){te=n;return}s.editorOpened(),te=n,setTimeout(()=>{const i=(0,R.V)(),o=document.createElement("div");o.innerHTML='<event-editor panel-ctrl="panelCtrl" event="event" close="close()"></event-editor>',i.invoke(["$compile","$rootScope",(a,l)=>{const r=l.$new(!0);let d;r.event=e,r.panelCtrl=s.panelCtrl,r.close=()=>{d.close()},a(o)(r),r.$digest(),d=new(O())({target:te[0],content:o,position:"bottom center",classes:"drop-popover drop-popover--form",openOn:"click",tetherOptions:{constraints:[{to:"window",pin:!0,attachment:"both"}]}}),d.open(),s.editorOpened(),d.on("close",()=>{setTimeout(()=>{s.editorClosed(),r.$destroy(),d.destroy()})})}])},100)};class oe{constructor(e,t,s,i,o,a,l,r){this._object=e,this._drawFunc=t,this._clearFunc=s,this._moveFunc=i,this._position={left:o,top:a},this._width=l,this._height=r}width(){return this._width}height(){return this._height}position(){return this._position}draw(){this._drawFunc(this._object)}clear(){this._clearFunc(this._object)}getObject(){return this._object}moveTo(e){this._position=e,this._moveFunc(this._object,this._position)}}class me{constructor(e,t){this._options=e,this._drawableEvent=t,this._hidden=!1}visual(){return this._drawableEvent}getOptions(){return this._options}getParent(){return this._parent}isHidden(){return this._hidden}hide(){this._hidden=!0}unhide(){this._hidden=!1}}class We{constructor(e){this._events=[],this._types=[],this._plot=e,this.eventsEnabled=!1}getEvents(){return this._events}setTypes(e){return this._types=e}setupEvents(e){const t=(0,p.partition)(e,"isRegion"),s=t[0];e=t[1],c().each(e,(i,o)=>{const a=new me(o,this._buildDiv(o));this._events.push(a)}),c().each(s,(i,o)=>{const a=new me(o,this._buildRegDiv(o));this._events.push(a)}),this._events.sort((i,o)=>{const a=i.getOptions(),l=o.getOptions();return a.min>l.min?1:a.min<l.min?-1:0})}drawEvents(){c().each(this._events,(e,t)=>{const s=t.getOptions(),i=this._insidePlot(s.min)||this._insidePlot(s.timeEnd),o=this._overlapPlot(s.min,s.timeEnd);(i||o)&&!t.isHidden()?t.visual().draw():t.visual().getObject().hide()})}updateEvents(){const e=this._plot.getPlotOffset();let t,s;const i=this._plot.getXAxes()[this._plot.getOptions().events.xaxis-1];c().each(this._events,(o,a)=>{s=e.top+this._plot.height()-a.visual().height(),t=i.p2c(a.getOptions().min)+e.left-a.visual().width()/2,a.visual().moveTo({top:s,left:t})})}_clearEvents(){c().each(this._events,(e,t)=>{t.visual().clear()}),this._events=[]}_buildDiv(e){const t=this,s=this._plot.getPlaceholder(),i=this._plot.getPlotOffset(),o=this._plot.getXAxes()[this._plot.getOptions().events.xaxis-1];let a,l,r,d,u,g,f,v;const C=e.eventType;this._types===null||!this._types[C]||!this._types[C].color?r="#666":r=this._types[C].color,this._types===null||!this._types[C]||!this._types[C].markerSize?d=8:d=this._types[C].markerSize,this._types===null||!this._types[C]||this._types[C].markerShow===void 0?u=!0:u=this._types[C].markerShow,this._types===null||!this._types[C]||this._types[C].markerTooltip===void 0?v=!0:v=this._types[C].markerTooltip,this._types==null||!this._types[C]||!this._types[C].lineStyle?g="dashed":g=this._types[C].lineStyle.toLowerCase(),this._types==null||!this._types[C]||this._types[C].lineWidth===void 0?f=1:f=this._types[C].lineWidth;let T=o.options.eventSectionHeight||0;T=T/3,a=i.top+this._plot.height()+T,l=o.p2c(e.min)+i.left;const I=c()('<div class="events_line flot-temp-elem"></div>').css({position:"absolute",opacity:.8,left:l+"px",top:8,width:f+"px",height:this._plot.height()+T*.8,"border-left-width":f+"px","border-left-style":g,"border-left-color":r,color:r}).appendTo(s);if(u){const b=c()('<div class="events_marker"></div>').css({position:"absolute",left:-d-Math.round(f/2)+"px","font-size":0,"line-height":0,width:0,height:0,"border-left":d+"px solid transparent","border-right":d+"px solid transparent"});b.appendTo(I),this._types[C]&&this._types[C].position&&this._types[C].position.toUpperCase()==="BOTTOM"?b.css({top:a-d-8+"px","border-top":"none","border-bottom":d+"px solid "+r}):b.css({top:"0px","border-top":d+"px solid "+r,"border-bottom":"none"}),b.data({event:e});const L=function(){Q(b,c()(this).data("event"),t._plot)};e.editModel&&ie(b,e.editModel,t._plot);const A=()=>{t._plot.clearSelection()};v&&(b.css({cursor:"help"}),b.hover(L,A))}return new oe(I,function(L){L.show()},b=>{b.remove()},(b,L)=>{b.css({top:L.top,left:L.left})},l,a,I.width()??1,I.height()??1)}_buildRegDiv(e){const t=this,s=this._plot.getPlaceholder(),i=this._plot.getPlotOffset(),o=this._plot.getXAxes()[this._plot.getOptions().events.xaxis-1];let a,l,r,d,u,g,f;const v=e.eventType;this._types===null||!this._types[v]||!this._types[v].color?g="#666":g=this._types[v].color,this._types===null||!this._types[v]||this._types[v].markerTooltip===void 0?f=!0:f=this._types[v].markerTooltip,this._types==null||!this._types[v]||this._types[v].lineWidth===void 0?r=1:r=this._types[v].lineWidth,this._types==null||!this._types[v]||!this._types[v].lineStyle?u="dashed":u=this._types[v].lineStyle.toLowerCase();const C=2;a=i.top+this._plot.height()+C;const T=Math.min(e.min,e.timeEnd),I=Math.max(e.min,e.timeEnd);l=o.p2c(T)+i.left;const w=o.p2c(I)+i.left,[b,L]=[i.left,i.left+this._plot.width()],A=Math.max(l,b),_=Math.min(w,L),$=w>L?0:r;d=_-A+$,(0,p.each)([l,w],W=>{b<=W&&W<L&&c()('<div class="events_line flot-temp-elem"></div>').css({position:"absolute",opacity:.8,left:W+"px",top:8,width:r+"px",height:this._plot.height()+C,"border-left-width":r+"px","border-left-style":u,"border-left-color":g,color:g}).appendTo(s)});const k=c()('<div class="events_marker region_marker flot-temp-elem"></div>').css({position:"absolute",opacity:.5,left:A+"px",top:a,width:d+"px",height:"0.5rem","border-left-color":g,color:g,"background-color":g});k.appendTo(s),k.data({event:e});const X=function(){Q(k,c()(this).data("event"),t._plot)};e.editModel&&ie(k,e.editModel,t._plot);const F=()=>{t._plot.clearSelection()};return f&&(k.css({cursor:"help"}),k.hover(X,F)),new oe(k,function(Y){Y.show()},W=>{W.remove()},(W,Y)=>{W.css({top:Y.top,left:Y.left})},l,a,k.width()??1,k.height()??1)}_insidePlot(e){const t=this._plot.getXAxes()[this._plot.getOptions().events.xaxis-1],s=t.p2c(e);return s>0&&s<t.p2c(t.max)}_overlapPlot(e,t){const s=this._plot.getXAxes()[this._plot.getOptions().events.xaxis-1],[i,o]=[s.p2c(e),s.p2c(t)],[a,l]=[0,s.p2c(s.max)];return a<i&&o<l}}function Ne(n){const e=this,t=new We(n);n.getEvents=()=>t._events,n.hideEvents=()=>{c().each(t._events,(s,i)=>{i.visual().getObject().hide()})},n.showEvents=()=>{n.hideEvents(),c().each(t._events,(s,i)=>{i.hide()}),e.eventMarkers.drawEvents()},n.setEvents=s=>{t.eventsEnabled&&t.setupEvents(s)},n.hooks.processOptions.push((s,i)=>{i.events.data!=null&&(t.eventsEnabled=!0)}),n.hooks.draw.push(s=>{const i=s.getOptions();t.eventsEnabled&&(t.getEvents().length<1?(t.setTypes(i.events.types),t.setupEvents(i.events.data)):t.updateEvents()),t.drawEvents()})}const Be={events:{data:null,types:null,xaxis:1,position:"BOTTOM"}};c().plot.plugins.push({init:Ne,options:Be,name:"events",version:"0.2.5"});var y=h(27702),Ue=h(68249),z=h(3935),re=h(84714),J=h(99633),Ve=h(91466),ze=h(61965),le=h(29241),_e=h(27938),he=h(32053),Ke=h(56715),fe=h(21609),ve=h(84143),q=h(91189),U=h(12308),de=h(66574),He=h(94547),ce=h(86628),Ge=h(36676),$e=h(73453),Xe=h(29372),je=h(89898),Ye=h.n(je),xe=h(74639),Ze=h(56025),Qe=h(31297);const Ce=["min","max","avg","current","total"];class pe extends y.PureComponent{constructor(e){super(e),this.onLabelClick=t=>this.props.onLabelClick(this.props.series,t),this.onToggleAxis=()=>{const t=this.state.yaxis===2?1:2,s={alias:this.props.series.alias,yaxis:t};this.setState({yaxis:t}),this.props.onToggleAxis(s)},this.onColorChange=t=>{this.props.onColorChange(this.props.series,t),this.forceUpdate()},this.state={yaxis:this.props.series.yaxis}}renderLegendValues(){const{series:e,asTable:t}=this.props,s=[];for(const i of Ce)if(this.props[i]){const o=e.formatValue(e.stats[i]);s.push(y.createElement(Je,{key:i,valueName:i,value:o,asTable:t,onValueClick:this.onLabelClick}))}return s}render(){const{series:e,values:t,asTable:s,hidden:i}=this.props,o=Ye()({"graph-legend-series-hidden":i,"graph-legend-series--right-y":e.yaxis===2}),a=t?this.renderLegendValues():[],l=y.createElement(be,{label:e.alias,color:e.color,yaxis:this.state.yaxis,onLabelClick:this.onLabelClick,onColorChange:this.onColorChange,onToggleAxis:this.onToggleAxis});return s?y.createElement("tr",{className:`graph-legend-series ${o}`},y.createElement("td",{role:"gridcell"},y.createElement("div",{className:"graph-legend-series__table-name"},l)),a):y.createElement("div",{className:`graph-legend-series ${o}`},l,a)}}pe.defaultProps={asTable:!1,hidden:!1,onLabelClick:()=>{},onColorChange:()=>{},onToggleAxis:()=>{}};class be extends y.PureComponent{render(){const{label:e,color:t,yaxis:s}=this.props,{onColorChange:i,onToggleAxis:o}=this.props,a=this.props.onLabelClick?this.props.onLabelClick:()=>{};return[y.createElement(ye,{key:"icon",color:t,yaxis:s,onColorChange:i,onToggleAxis:o}),y.createElement("button",{type:"button",className:"graph-legend-alias pointer",title:e,key:"label",onClick:a,"aria-label":xe.wl.components.Panels.Visualization.Graph.Legend.legendItemAlias(e)},e)]}}be.defaultProps={yaxis:void 0,onLabelClick:()=>{}};class ye extends y.PureComponent{constructor(){super(...arguments),this.onColorChange=e=>{const{onColorChange:t}=this.props;t&&t(e)}}render(){return y.createElement(Ze.sp,{yaxis:this.props.yaxis,color:this.props.color,onChange:this.onColorChange,onToggleAxis:this.props.onToggleAxis,enableNamedColors:!0},({ref:e,showColorPicker:t,hideColorPicker:s})=>y.createElement(Qe.F,{color:this.props.color,ref:e,onClick:t,onMouseLeave:s,className:"graph-legend-icon"}))}}ye.defaultProps={yaxis:void 0,onColorChange:()=>{},onToggleAxis:()=>{}};function Je({value:n,valueName:e,asTable:t,onValueClick:s}){return t?y.createElement("td",{role:"gridcell",className:`graph-legend-value ${e}`},n):y.createElement("div",{className:`graph-legend-value ${e}`},n)}class Ee extends y.PureComponent{constructor(e){super(e),this.onToggleSeries=(t,s)=>{if(!this.props.onToggleSeries)return;let i={...this.state.hiddenSeries};s.ctrlKey||s.metaKey||s.shiftKey?i[t.alias]?delete i[t.alias]:i[t.alias]=!0:i=this.toggleSeriesExclusiveMode(t),this.setState({hiddenSeries:i}),this.props.onToggleSeries(i)},this.state={hiddenSeries:this.props.hiddenSeries}}sortLegend(){let e=[...this.props.seriesList];const t=this.props.sort;return t&&this.props[t]&&this.props.alignAsTable&&(e=(0,p.sortBy)(e,s=>{let i=s.stats[t];return i===null&&(i=-1/0),i}),this.props.sortDesc&&(e=e.reverse())),e}toggleSeriesExclusiveMode(e){const t={...this.state.hiddenSeries};return t[e.alias]&&delete t[e.alias],this.props.seriesList.every(i=>i.alias===e.alias?!0:t[i.alias])?this.props.seriesList.forEach(i=>{delete t[i.alias]}):this.props.seriesList.forEach(i=>{i.alias!==e.alias&&(t[i.alias]=!0)}),t}render(){const{optionalClass:e,rightSide:t,sideWidth:s,sort:i,sortDesc:o,hideEmpty:a,hideZero:l,values:r,min:d,max:u,avg:g,current:f,total:v,renderCallback:C}=this.props,T={values:r,min:d,max:u,avg:g,current:f,total:v},I=this.state.hiddenSeries,w={hideEmpty:a,hideZero:l},b={sort:i,sortDesc:o},L=this.sortLegend().filter(F=>!F.hideFromLegend(w)),A=`${this.props.alignAsTable?"graph-legend-table":""} ${e}`,_=t&&s?s:void 0,$=t&&s?s-1:void 0,k={minWidth:_,width:$},X={seriesList:L,hiddenSeries:I,onToggleSeries:this.onToggleSeries,onToggleAxis:this.props.onToggleAxis,onToggleSort:this.props.onToggleSort,onColorChange:this.props.onColorChange,...T,...b};return y.createElement("div",{className:`graph-legend-content ${A}`,ref:C,style:k},this.props.alignAsTable?y.createElement(et,{...X}):y.createElement(qe,{...X}))}}Ee.defaultProps={values:!1,min:!1,max:!1,avg:!1,current:!1,total:!1,alignAsTable:!1,rightSide:!1,sort:void 0,sortDesc:!1,optionalClass:"",onToggleSeries:()=>{},onToggleSort:()=>{},onToggleAxis:()=>{},onColorChange:()=>{}};class qe extends y.PureComponent{render(){const{seriesList:e,hiddenSeries:t,values:s,min:i,max:o,avg:a,current:l,total:r}=this.props,d={values:s,min:i,max:o,avg:a,current:l,total:r};return e.map((u,g)=>y.createElement(pe,{key:`${u.id}-${g}`,series:u,hidden:t[u.alias],...d,onLabelClick:this.props.onToggleSeries,onColorChange:this.props.onColorChange,onToggleAxis:this.props.onToggleAxis}))}}class et extends y.PureComponent{constructor(){super(...arguments),this.onToggleSort=e=>{if(!this.props.onToggleSort)return;let t=this.props.sortDesc,s=this.props.sort;e!==s&&(t=void 0),t===!1?(s=void 0,t=void 0):(t=!t,s=e),this.props.onToggleSort(s,t)}}render(){const e=this.props.seriesList,{values:t,min:s,max:i,avg:o,current:a,total:l,sort:r,sortDesc:d,hiddenSeries:u}=this.props,g={values:t,min:s,max:i,avg:o,current:a,total:l};return e?y.createElement("table",{role:"grid"},y.createElement("colgroup",null,y.createElement("col",{style:{width:"100%"}})),y.createElement("thead",null,y.createElement("tr",null,y.createElement("th",{style:{textAlign:"left"}}),Ce.map(f=>g[f]&&y.createElement(tt,{key:f,statName:f,sort:r,sortDesc:d,onClick:this.onToggleSort})))),y.createElement("tbody",null,e&&e.map((f,v)=>y.createElement(pe,{key:`${f.id}-${v}`,asTable:!0,series:f,hidden:u[f.alias],onLabelClick:this.props.onToggleSeries,onColorChange:this.props.onColorChange,onToggleAxis:this.props.onToggleAxis,...g})))):null}}class tt extends y.PureComponent{constructor(){super(...arguments),this.onClick=()=>{this.props.onClick&&this.props.onClick(this.props.statName)}}render(){const{statName:e,sort:t,sortDesc:s}=this.props;return y.createElement("th",{className:"pointer",onClick:this.onClick},e,t===e&&y.createElement($e.J,{name:s?"angle-down":"angle-up"}))}}class st extends y.PureComponent{render(){return y.createElement(Xe.$,{hideHorizontalTrack:!0},y.createElement(Ee,{...this.props}))}}const Qt=null;function it(n,e){if(isNaN(e)||!rt(n))return;const[t,s]=n;at(t,s,e),nt(t,s);const i=t.min===0||s.min===0||t.max===0||s.max===0,o=Me(t,s);if(i&&o)t.min=t.max>0?0:t.min,t.max=t.max>0?t.max:0,s.min=s.max>0?0:s.min,s.max=s.max>0?s.max:0;else if(lt(t,s))t.min>=0?(t.min=-t.max,s.max=-s.min):(t.max=-t.min,s.min=-s.max);else{const a=ht(t,s);o?t.min>0?(t.min=t.max/a,s.min=s.max/a):(t.max=t.min/a,s.max=s.min/a):Se(t,s)?(t.min=s.min?s.min*a:t.min,s.min=t.min?t.min/a:s.min,t.max=s.max?s.max*a:t.max,s.max=t.max?t.max/a:s.max):(t.min=t.min>0?s.min*a:t.min,s.min=s.min>0?t.min/a:s.min,t.max=t.max<0?s.max*a:t.max,s.max=s.max<0?t.max/a:s.max)}ot(t,s,e)}function nt(n,e){n.max===n.min&&(n.min-=.25,n.max+=.25),e.max===e.min&&(e.min-=.25,e.max+=.25)}function at(n,e,t){t!==0&&(n.min-=t,n.max-=t,e.min-=t,e.max-=t)}function ot(n,e,t){t!==0&&(n.min+=t,n.max+=t,e.min+=t,e.max+=t)}function rt(n){return n.length===2&&Te(n[0])&&Te(n[1])}function Te(n){return"min"in n&&"max"in n}function Me(n,e){return n.min>=0&&e.min>=0||n.max<=0&&e.max<=0}function Se(n,e){return n.min<=0&&n.max>=0&&e.min<=0&&e.max>=0}function lt(n,e){return n.min>=0&&e.max<=0||n.max<=0&&e.min>=0}function ht(n,e){if(Se(n,e)){const t=e.min?n.min/e.min:0,s=e.max?n.max/e.max:0;return t>s?t:s}if(Me(n,e)){const t=Math.abs(n.min),s=Math.abs(n.max),i=Math.abs(e.min),o=Math.abs(e.max),a=Math.max(t,s),l=Math.min(t,s),r=Math.max(i,o),d=Math.min(i,o),u=l!==0?a/l:a,g=d!==0?r/d:r;return u>g?u:g}return n.min>0||e.min>0?n.max/e.max:n.min/e.min}var ue=h(71685),G=h(5354);class dt{constructor(e){this.panelCtrl=e,this.event=null,this.editorOpen=!1}editorClosed(){this.event=null,this.editorOpen=!1,this.panelCtrl.render()}editorOpened(){this.editorOpen=!0}updateTime(e){this.event||(this.event={},this.event.dashboardUID=this.panelCtrl.dashboard.uid,this.event.panelId=this.panelCtrl.panel.id),this.event.time=e.from,this.event.isRegion=!1,e.to&&(this.event.timeEnd=e.to,this.event.isRegion=!0),this.panelCtrl.render()}editEvent(e,t){this.event=e,this.panelCtrl.render()}addFlotEvents(e,t){if(!this.event&&e.length===0)return;const s={$__alerting:{color:G.ns,position:"BOTTOM",markerSize:5},$__ok:{color:G.te,position:"BOTTOM",markerSize:5},$__no_data:{color:G._V,position:"BOTTOM",markerSize:5},$__pending:{color:G.f7,position:"BOTTOM",markerSize:5},$__editing:{color:G.Jx,position:"BOTTOM",markerSize:5}};if(this.event)this.event.isRegion?e=[{isRegion:!0,min:this.event.time,timeEnd:this.event.timeEnd,text:this.event.text,eventType:"$__editing",editModel:this.event}]:e=[{min:this.event.time,text:this.event.text,editModel:this.event,eventType:"$__editing"}];else for(let l=0;l<e.length;l++){const r=e[l];if(r.min=r.time,r.max=r.time,r.eventType=r.type,r.newState){r.eventType="$__"+r.newState;continue}s[r.type]||(s[r.type]={color:r.color,position:"BOTTOM",markerSize:5})}const i=ct(e);pt(i,t);const o=20,a=7;t.grid.eventSectionHeight=a,t.xaxis.eventSectionHeight=o,t.events={levels:(0,p.keys)(s).length+1,data:e,types:s,manager:this}}}function ct(n){return(0,p.filter)(n,"isRegion")}function pt(n,e){const t=e.grid.markings,s=G.Jx;let i;(0,p.each)(n,o=>{o.source?i=o.color||s:i=s,i=ut(i,G.iV),t.push({xaxis:{from:o.min,to:o.timeEnd},color:i})})}function ut(n,e){const t=(0,ue.Z)(n);return t.isValid()?(t.setAlpha(e),t.toRgbString()):n}var Oe=h(65347),ee=h(48154),De=h(18771);function gt(n,e,t,s){const i=this,a=t.ctrl.panel,l=new z.IA({pos:{},point:{},panel:this.panel}),r=c()('<div class="graph-tooltip">');this.destroy=()=>{r.remove()},this.findHoverIndexFromDataPoints=(d,u,g)=>{const f=u.datapoints.pointsize,v=g*f,C=u.datapoints.points.length;let T;for(T=v;T<C;T+=f)if(!u.lines.steps&&u.datapoints.points[v]!=null&&u.datapoints.points[T]==null||u.datapoints.points[T]>d)return Math.max(T-f,0)/f;return T/f-1},this.findHoverIndexFromData=(d,u)=>{let g=0,f=u.data.length-1,v;for(;;){if(g>f)return Math.max(f,0);if(v=Math.floor((g+f)/2),u.data[v][0]===d)return v;u.data[v][0]<d?g=v+1:f=v-1}},this.renderAndShow=(d,u,g,f)=>{f==="time"&&(u='<div class="graph-tooltip-time">'+d+"</div>"+u),r.html(u).place_tt(g.pageX,g.pageY,{offset:10})},this.getMultiSeriesPlotHoverInfo=function(d,u){let g,f,v,C,T,I,w,b=[[],[],[]],L=0,A,_;for(f=0;f<d.length;f++){if(v=d[f],!v.data.length||a.legend.hideEmpty&&v.allIsNull){b[0].push({hidden:!0,value:0});continue}if(!v.data.length||a.legend.hideZero&&v.allIsZero){b[0].push({hidden:!0,value:0});continue}if(v.hideTooltip){b[0].push({hidden:!0,value:0});continue}C=this.findHoverIndexFromData(u.x,v),T=u.x-v.data[C][0],I=v.data[C][0],(!A||T>=0&&(T<A||A<0)||T<0&&T>A)&&(A=T,_=I),g=v.data[C][1],v.stack&&g!==null&&a.tooltip.value_type!=="individual"&&(L+=g,g=L),(v.lines.steps||v.stack)&&(C=this.findHoverIndexFromDataPoints(u.x,v,C)),w=0,v.yaxis&&(w=v.yaxis.n),b[w].push({value:g,hoverIndex:C,color:v.color,label:v.aliasEscaped,time:I,distance:T,index:f})}return b=b[0].concat(b[1],b[2]),b.time=_,b},n.mouseleave(()=>{if(a.tooltip?.shared){const d=n.data().plot;d&&(r.detach(),d.unhighlight())}e.events.publish(new z.oi),e.events.publish(new re.xH)}),n.bind("plothover",(d,u,g)=>{i.show(u,g),e.panelInEdit||(u.panelRelY=(u.pageY-n.offset().top)/n.height(),l.payload.pos=u,l.payload.panel=a,l.payload.point.time=u.x,e.events.publish(l))}),n.bind("plotclick",(d,u,g)=>{de.h$.emit(De.CoreEvents.xt,{pos:u,panel:a,item:g})}),n.bind("plotleave",()=>{if(!a.tooltip.shared)return;const d=n.data().plot;d&&(r.detach(),d.unhighlight())}),this.clear=d=>{r.detach(),d.clearCrosshair(),d.unhighlight()},this.show=(d,u)=>{const g=n.data().plot,f=g.getData(),C=g.getXAxes()[0].options.mode,T=s();let I=a.tooltip.shared,w,b,L,A,_,$,k,X;if(d.panelRelY){const F=g.pointOffset({x:d.x});if(Number.isNaN(F.left)||F.left<0||F.left>n.width()){i.clear(g);return}d.pageX=n.offset().left+F.left,d.pageY=n.offset().top+n.height()*d.panelRelY;const H=c()(window).scrollTop()??0;if(!(d.pageY>=H&&d.pageY<=c()(window).innerHeight()+H)){i.clear(g);return}if(g.setCrosshair(d),I=!0,e.sharedCrosshairModeOnly())return}if(T.length!==0)if(T[0].hasMsResolution?X=Oe.U6.fullDateMS:X=Oe.U6.fullDate,I){g.unhighlight();const F=i.getMultiSeriesPlotHoverInfo(f,d);for(k="",L=e.formatDate(F.time,X),a.tooltip.sort===2?F.sort((H,W)=>W.value-H.value):a.tooltip.sort===1&&F.sort((H,W)=>H.value-W.value),_=0;_<F.length;_++){if(A=F[_],A.hidden)continue;let H="";u&&A.index===u.seriesIndex&&(H="graph-tooltip-list-item--highlight"),$=T[A.index],b=ee.QX.sanitize($.formatValue(A.value));const W=ee.QX.sanitize(A.color),Y=ee.QX.sanitize(A.label);k+='<div class="graph-tooltip-list-item '+H+'"><div class="graph-tooltip-series-name">',k+='<i class="fa fa-minus" style="color:'+W+';"></i> '+Y+":</div>",k+='<div class="graph-tooltip-value">'+b+"</div></div>",g.highlight(A.index,A.hoverIndex)}i.renderAndShow(L,k,d,C)}else if(u){const F=ee.QX.sanitize(u.series.color);$=T[u.seriesIndex],w='<div class="graph-tooltip-list-item"><div class="graph-tooltip-series-name">',w+='<i class="fa fa-minus" style="color:'+F+';"></i> '+$.aliasEscaped+":</div>",a.stack&&a.tooltip.value_type==="individual"?b=u.datapoint[1]-u.datapoint[2]:b=u.datapoint[1],b=ee.QX.sanitize($.formatValue(b)),L=e.formatDate(u.datapoint[0],X),w+='<div class="graph-tooltip-value">'+b+"</div>",i.renderAndShow(L,w,d,C)}else r.detach()}}var mt=h(45306);function ft(n){const t=[];for(let s=0;s<n.length;s++){const o=n[s].datapoints;for(let a=0;a<o.length;a++)o[a][0]!==null&&t.push(o[a][0])}return t}function vt(n,e,t,s){const i=Le(t,e),o=Le(s,e);return(0,mt.histogram)().domain([i,o]).thresholds(Math.round(s-t)/e)(n).map(l=>[l.x0,l.length])}function xt(n,e,t,s,i){return n.map(o=>{const a=ft([o]);if(o.histogram=!0,t[o.alias])o.data=[];else{const l=vt(a,e,s,i);o.data=l}return o})}function Le(n,e){return Math.floor(n/e)*e}class Ct{constructor(e){this.panelCtrl=e,this.needsCleanup=!1}getHandleHtml(e,t,s){let i=t.colorMode;return t.colorMode==="custom"&&(i="critical"),` <div class="alert-handle-wrapper alert-handle-wrapper--T${e}"> <div class="alert-handle-line alert-handle-line--${i}"> </div> <div class="alert-handle" data-handle-index="${e}"> <i class="icon-gf icon-gf-${i} alert-state-${i}"></i> <span class="alert-handle-value">${s}<i class="alert-handle-grip"></i></span> </div> </div>`}initDragging(e){const t=c()(e.currentTarget).parents(".alert-handle-wrapper"),s=c()(e.currentTarget).data("handleIndex");let i=null,o;const a=this.plot,l=this.panelCtrl,r=this.thresholds[s];function d(g){if(i===null)i=g.clientY;else{const f=g.clientY-i;o=o+f,i=g.clientY,t.css({top:o+f})}}function u(){let g=a.c2p({left:0,top:o}).y;g=parseInt(g.toFixed(0),10),r.value=g,t.off("mousemove",d),document.removeEventListener("mouseup",u),l.$scope.$apply(()=>{l.render(),l.events.emit(De.CoreEvents.GL,{threshold:r,handleIndex:s})})}i=null,o=t.position().top,t.on("mousemove",d),document.addEventListener("mouseup",u)}cleanUp(){this.placeholder.find(".alert-handle-wrapper").remove(),this.needsCleanup=!1}renderHandle(e,t){const s=this.thresholds[e];if(!s.visible&&this.panelCtrl.alert)return;const i=s.value;let o=i,a=0;if(!(0,p.isNumber)(i))o="",a=t;else{const r=this.plot.p2c({x:0,y:i});a=Math.round(Math.min(Math.max(r.top,0),this.height)-6)}const l=c()(this.getHandleHtml(e,s,o));this.placeholder.append(l),l.toggleClass("alert-handle-wrapper--no-value",o===""),l.css({top:a})}shouldDrawHandles(){return!this.hasSecondYAxis&&this.panelCtrl.editingThresholds&&this.panelCtrl.panel.thresholds.length>0}prepare(e,t){this.hasSecondYAxis=!1;for(let s=0;s<t.length;s++)if(t[s].yaxis>1){this.hasSecondYAxis=!0;break}if(this.shouldDrawHandles()){const s=this.panelCtrl.panel.thresholds.length>1?"220px":"110px";e.css("margin-right",s)}else this.needsCleanup&&e.css("margin-right","0")}draw(e){this.thresholds=this.panelCtrl.panel.thresholds,this.plot=e,this.placeholder=e.getPlaceholder(),this.needsCleanup&&this.cleanUp(),this.shouldDrawHandles()&&(this.height=e.height(),this.thresholds.length>0&&this.renderHandle(0,10),this.thresholds.length>1&&this.renderHandle(1,this.height-30),this.placeholder.off("mousedown",".alert-handle"),this.placeholder.on("mousedown",".alert-handle",this.initDragging.bind(this)),this.needsCleanup=!0)}addFlotOptions(e,t){if(!t.thresholds||t.thresholds.length===0)return;let s=1/0,i=-1/0,o,a,l;for(o=0;o<t.thresholds.length;o++){if(a=t.thresholds[o],!(0,p.isNumber)(a.value))continue;let r;switch(a.op){case"gt":{r=s,t.thresholds.length>o+1&&(l=t.thresholds[o+1],l.value>a.value&&(r=l.value,i=r));break}case"lt":{r=i,t.thresholds.length>o+1&&(l=t.thresholds[o+1],l.value<a.value&&(r=l.value,s=r));break}}let d,u;switch(a.colorMode){case"critical":{d="rgba(234, 112, 112, 0.12)",u="rgba(237, 46, 24, 0.60)";break}case"warning":{d="rgba(235, 138, 14, 0.12)",u="rgba(247, 149, 32, 0.60)";break}case"ok":{d="rgba(11, 237, 50, 0.090)",u="rgba(6,163,69, 0.60)";break}case"custom":{d=a.fillColor,u=a.lineColor;break}}a.fill&&(a.yaxis==="right"&&this.hasSecondYAxis?e.grid.markings.push({y2axis:{from:a.value,to:r},color:U.config.theme2.visualization.getColorByName(d)}):e.grid.markings.push({yaxis:{from:a.value,to:r},color:U.config.theme2.visualization.getColorByName(d)})),a.line&&(a.yaxis==="right"&&this.hasSecondYAxis?e.grid.markings.push({y2axis:{from:a.value,to:a.value},color:U.config.theme2.visualization.getColorByName(u)}):e.grid.markings.push({yaxis:{from:a.value,to:a.value},color:U.config.theme2.visualization.getColorByName(u)}))}}}var bt=h(78526);const ne={gray:{themeDependent:!0,title:"Gray",darkColor:{fill:"rgba(255, 255, 255, 0.09)",line:"rgba(255, 255, 255, 0.2)"},lightColor:{fill:"rgba(0, 0, 0, 0.09)",line:"rgba(0, 0, 0, 0.2)"}},red:{title:"Red",color:{fill:"rgba(234, 112, 112, 0.12)",line:"rgba(237, 46, 24, 0.60)"}},green:{title:"Green",color:{fill:"rgba(11, 237, 50, 0.090)",line:"rgba(6,163,69, 0.60)"}},blue:{title:"Blue",color:{fill:"rgba(11, 125, 238, 0.12)",line:"rgba(11, 125, 238, 0.60)"}},yellow:{title:"Yellow",color:{fill:"rgba(235, 138, 14, 0.12)",line:"rgba(247, 149, 32, 0.60)"}},custom:{title:"Custom"}};function yt(){return(0,p.map)(Object.keys(ne),n=>({key:n,value:ne[n].title}))}function Et(n,e){if(Object.keys(ne).indexOf(n.colorMode)===-1&&(n.colorMode="red"),n.colorMode==="custom")return{fill:n.fill&&n.fillColor?e.visualization.getColorByName(n.fillColor):null,line:n.line&&n.lineColor?e.visualization.getColorByName(n.lineColor):null};const t=ne[n.colorMode];return t.themeDependent===!0?e.isLight?t.lightColor:t.darkColor:{fill:n.fill?e.visualization.getColorByName(t.color.fill):null,line:n.fill?e.visualization.getColorByName(t.color.line):null}}class Tt{constructor(e){this.panelCtrl=e}draw(e){this.timeRegions=this.panelCtrl.panel.timeRegions,this.plot=e}addFlotOptions(e,t){if(!t.timeRegions?.length)return;const s={from:(0,J.CQ)(this.panelCtrl.range.from).utc(),to:(0,J.CQ)(this.panelCtrl.range.to).utc(),raw:{from:"",to:""}};for(const i of t.timeRegions){const o=i,a=(0,bt.q7)(i,s);if(a.length){const l=Et(o,U.config.theme2);for(let r=0;r<a.length;r++){const d=a[r];o.fill&&e.grid.markings.push({xaxis:{from:d.from,to:d.to},color:l.fill}),o.line&&(e.grid.markings.push({xaxis:{from:d.from,to:d.from},color:l.line}),e.grid.markings.push({xaxis:{from:d.to,to:d.to},color:l.line}))}}}}}var se=h(66656);function Mt(n){const e={from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER};let t=!1;const s=[se.gz.min,se.gz.max];for(const i of n)for(const o of i.fields)if(o.type===le.fS.time){const a=(0,se.Kx)({field:o,reducers:s});e.from=Math.min(e.from,a[se.gz.min]),e.to=Math.max(e.to,a[se.gz.max]),t=!0}return t?e:void 0}function St(n){return!!(n&&typeof n=="object"&&n.hasOwnProperty("pos"))}const Ot=(0,He.E)(st,U.default.theme2);class Dt{constructor(e,t,s){this.scope=e,this.elem=t,this.timeSrv=s,this.data=[],this.getContextMenuItemsSupplier=(i,o)=>()=>{const a=this.dashboard.canAddAnnotations()?[{items:[{label:"Add annotation",ariaLabel:"Add annotation",icon:"comment-alt",onClick:()=>this.eventManager.updateTime({from:i.x,to:null})}]}]:[];if(!o)return a;const l=[{items:o.getLinks(this.panel.replaceVariables).map(r=>({label:r.title,ariaLabel:r.title,url:r.href,target:r.target,icon:r.target==="_self"?"link":"external-link-alt",onClick:r.onClick}))}];return[...a,...l]},this.ctrl=e.ctrl,this.contextMenu=e.ctrl.contextMenuCtrl,this.dashboard=this.ctrl.dashboard,this.panel=this.ctrl.panel,this.annotations=[],this.panelWidth=0,this.eventManager=new dt(this.ctrl),this.thresholdManager=new Ct(this.ctrl),this.timeRegionManager=new Tt(this.ctrl),this.tooltip=new gt(this.elem,this.ctrl.dashboard,this.scope,()=>this.sortedSeries),this.ctrl.events.on(z.Kh.panelTeardown,this.onPanelTeardown.bind(this)),this.ctrl.events.on(z.Kh.render,this.onRender.bind(this)),this.ctrl.dashboard.events.on(z.IA.type,this.onGraphHover.bind(this),this.scope),this.ctrl.dashboard.events.on(z.oi.type,this.onGraphHoverClear.bind(this),this.scope),this.ctrl.dashboard.events.on(re.es.type,this.onGraphHover.bind(this),this.scope),this.ctrl.dashboard.events.on(re.xH.type,this.onGraphHoverClear.bind(this),this.scope),this.elem.bind("plotselected",this.onPlotSelected.bind(this)),this.elem.bind("plotclick",this.onPlotClick.bind(this)),this.elem&&this.elem.parent&&(this.legendElem=this.elem.parent().find(".graph-legend")[0],this.legendElemRoot=(0,Ue.s)(this.legendElem))}onRender(e){if(this.data=e||this.data,!this.data)return;this.annotations=this.ctrl.annotations||[],this.buildFlotPairs(this.data);const t=this.ctrl.height;if((0,de.Wz)(this.data,this.panel,t),!this.panel.legend.show){this.legendElem.hasChildNodes()&&this.legendElemRoot.render(null),setTimeout(()=>{this.renderPanel()});return}const{values:s,min:i,max:o,avg:a,current:l,total:r}=this.panel.legend,{alignAsTable:d,rightSide:u,sideWidth:g,sort:f,sortDesc:v,hideEmpty:C,hideZero:T}=this.panel.legend,I={alignAsTable:d,rightSide:u,sideWidth:g,sort:f,sortDesc:v,hideEmpty:C,hideZero:T},w={values:s,min:i,max:o,avg:a,current:l,total:r},b={seriesList:this.data,hiddenSeries:this.ctrl.hiddenSeries,...I,...w,onToggleSeries:this.ctrl.onToggleSeries,onToggleSort:this.ctrl.onToggleSort,onColorChange:this.ctrl.onColorChange,onToggleAxis:this.ctrl.onToggleAxis,renderCallback:this.renderPanel.bind(this)},L=y.createElement(Ot,b);this.legendElemRoot.render(L)}onGraphHover(e){if(this.dashboard.sharedTooltipModeEnabled()){if(St(e)){if(!this.plot||e.panel?.id===this.panel.id||this.ctrl.otherPanelInFullscreenMode())return;this.tooltip.show(e.pos)}e.point?.time&&this.tooltip.show({x:e.point.time,panelRelY:e.point.panelRelY??1})}}onPanelTeardown(){this.plot&&(this.plot.destroy(),this.plot=null),this.tooltip.destroy(),this.elem.off(),this.elem.remove(),this.legendElemRoot.unmount()}onGraphHoverClear(e){this.plot&&this.tooltip.clear(this.plot)}onPlotSelected(e,t){if(this.panel.xaxis.mode!=="time"){this.plot.clearSelection();return}(t.ctrlKey||t.metaKey)&&this.dashboard.canAddAnnotations()?setTimeout(()=>{this.eventManager.updateTime(t.xaxis)},100):this.scope.$apply(()=>{this.timeSrv.setTime({from:(0,J.zh)(t.xaxis.from),to:(0,J.zh)(t.xaxis.to)})})}onPlotClick(e,t,s){const i=this.elem.closest(".view")?this.elem.closest(".view").get()[0]:null,o=s;if(this.panel.xaxis.mode==="time")if(t.ctrlKey||t.metaKey){if(t.x!==t.x1||!this.dashboard.id||!this.dashboard.canAddAnnotations())return;setTimeout(()=>{this.eventManager.updateTime({from:t.x,to:null})},100);return}else{this.tooltip.clear(this.plot);let a;if(s){const l=this.panel.yaxes[s.series.yaxis.n===2?1:0],r=this.ctrl.dataList[s.series.dataFrameIndex],d=r.fields[s.series.fieldIndex],u=this.getDataIndexWithNullValuesCorrection(s,r);let g=this.panel.options.dataLinks||[];const f=(0,Ve.gG)(d);f&&(g=[...g,...d.config.links]);const v={decimals:l.decimals,links:g},C=(0,ze.U)({field:{config:v,type:le.fS.number},theme:U.default.theme2,timeZone:this.dashboard.getTimezone()})(d.values[u]);a=g.length?(0,Ge.n)({display:C,name:d.name,view:new _e.U(r),rowIndex:u,colIndex:s.series.fieldIndex,field:v,hasLinks:f}):void 0}this.scope.$apply(()=>{this.contextMenu.setScrollContextElement(i),this.contextMenu.setSource(o),this.contextMenu.setMenuItemsSupplier(this.getContextMenuItemsSupplier(t,a)),this.contextMenu.toggleMenu(t)})}}getDataIndexWithNullValuesCorrection(e,t){const{datapoint:s,dataIndex:i}=e;if(!Array.isArray(s)||s.length===0)return i;const o=s[0],{timeField:a}=(0,he.sV)(t);if(!a||!a.values||a.values[i]===o)return i;const r=a.values.findIndex(d=>d===o);return r>-1?r:i}shouldAbortRender(){return!this.data||this.panelWidth===0}drawHook(e){this.panel.yaxes[0].label&&this.panel.yaxes[0].show&&c()("<div class='axisLabel left-yaxis-label flot-temp-elem'></div>").text(this.panel.yaxes[0].label).appendTo(this.elem),this.panel.yaxes[1].label&&this.panel.yaxes[1].show&&c()("<div class='axisLabel right-yaxis-label flot-temp-elem'></div>").text(this.panel.yaxes[1].label).appendTo(this.elem);const{dataWarning:t}=this.ctrl;if(t){const s=c()(`<div class="datapoints-warning flot-temp-elem">${t.title}</div>`);t.action&&c()(`<button class="btn btn-secondary">${t.actionText}</button>`).click(t.action).appendTo(s),s.appendTo(this.elem)}this.thresholdManager.draw(e),this.timeRegionManager.draw(e)}processOffsetHook(e,t){const s=this.panel.yaxes[0],i=this.panel.yaxes[1];s.show&&s.label&&(t.left=20),i.show&&i.label&&(t.right=20);const o=e.getYAxes();for(let a=0;a<o.length;a++){const l=o[a],r=this.panel.yaxes[a];l.options.max=l.options.max!==null?l.options.max:r.max,l.options.min=l.options.min!==null?l.options.min:r.min}}processRangeHook(e){const t=e.getYAxes(),s=this.panel.yaxis.align||!1;if(t.length>1&&s===!0){const i=this.panel.yaxis.alignLevel||0;it(t,parseFloat(i))}}getMinTimeStepOfSeries(e){let t=Number.MAX_VALUE;for(let s=0;s<e.length;s++)if(e[s].stats.timeStep){if(this.panel.bars){if(e[s].bars&&e[s].bars.show===!1)continue}else if(typeof e[s].bars>"u"||typeof e[s].bars.show>"u"||!e[s].bars.show)continue;e[s].stats.timeStep<t&&(t=e[s].stats.timeStep)}return t}renderPanel(){if(this.panelWidth=this.elem.width()??0,this.shouldAbortRender())return;this.thresholdManager.prepare(this.elem,this.data),this.panel.dashes=this.panel.lines?this.panel.dashes:!1;const e=this.buildFlotOptions(this.panel);this.prepareXAxis(e,this.panel),this.configureYAxisOptions(this.data,e),this.thresholdManager.addFlotOptions(e,this.panel),this.timeRegionManager.addFlotOptions(e,this.panel),this.eventManager.addFlotEvents(this.annotations,e),this.sortedSeries=this.sortSeries(this.data,this.panel),this.callPlot(e,!0)}buildFlotPairs(e){for(let t=0;t<e.length;t++){const s=e[t];s.data=s.getFlotPairs(s.nullPointMode||this.panel.nullPointMode),s.transform==="constant"&&(s.data=(0,Ke.H)(s.data,this.ctrl.range)),this.ctrl.hiddenSeries[s.alias]&&(s.data=[],s.stack=!1)}}prepareXAxis(e,t){switch(t.xaxis.mode){case"series":{e.series.bars.barWidth=.7,e.series.bars.align="center";for(let s=0;s<this.data.length;s++){const i=this.data[s];i.data=[[s+1,i.stats[t.xaxis.values[0]]]]}this.addXSeriesAxis(e);break}case"histogram":{let s;if(this.data.length){let i=(0,p.min)((0,p.map)(this.data,l=>l.stats.min)),o=(0,p.max)((0,p.map)(this.data,l=>l.stats.max));const a=t.xaxis.buckets||this.panelWidth/50;t.xaxis.min!=null&&(i=(0,ce.tickStep)(t.xaxis.min,o,a)<=0?i:t.xaxis.min),t.xaxis.max!=null&&(o=(0,ce.tickStep)(i,t.xaxis.max,a)<=0?o:t.xaxis.max),s=(0,ce.tickStep)(i,o,a),e.series.bars.barWidth=s*.8,this.data=xt(this.data,s,this.ctrl.hiddenSeries,i,o)}else s=0;this.addXHistogramAxis(e,s);break}case"table":{e.series.bars.barWidth=.7,e.series.bars.align="center",this.addXTableAxis(e);break}default:{e.series.bars.barWidth=this.getMinTimeStepOfSeries(this.data)/1.5,this.addTimeAxis(e);break}}}callPlot(e,t){try{this.plot=c().plot(this.elem,this.sortedSeries,e),this.ctrl.renderError&&delete this.ctrl.error}catch(s){console.error("flotcharts error",s),this.ctrl.error=s instanceof Error?s.message:"Render Error",this.ctrl.renderError=!0}t&&this.ctrl.renderingCompleted()}buildFlotOptions(e){let t="#c8c8c8";U.default.bootData.user.lightTheme===!0&&(t="#a1a1a1");const s=e.stack?!0:null;return{hooks:{draw:[this.drawHook.bind(this)],processOffset:[this.processOffsetHook.bind(this)],processRange:[this.processRangeHook.bind(this)]},legend:{show:!1},series:{stackpercent:e.stack?e.percentage:!1,stack:e.percentage?null:s,lines:{show:e.lines,zero:!1,fill:this.translateFillOption(e.fill),fillColor:this.getFillGradient(e.fillGradient),lineWidth:e.dashes?0:e.linewidth,steps:e.steppedLine},dashes:{show:e.dashes,lineWidth:e.linewidth,dashLength:[e.dashLength,e.spaceLength]},bars:{show:e.bars,fill:1,barWidth:1,zero:!1,lineWidth:0},points:{show:e.points,fill:1,fillColor:!1,radius:e.points?e.pointradius:2},shadowSize:0},yaxes:[],xaxis:{},grid:{minBorderMargin:0,markings:[],backgroundColor:null,borderWidth:0,hoverable:!0,clickable:!0,color:t,margin:{left:0,right:0},labelMarginX:0,mouseActiveRadius:30},selection:{mode:"x",color:"#666"},crosshair:{mode:"x"}}}sortSeries(e,t){const s=t.legend.sort,i=t.legend.sortDesc,o=s!=null&&t.legend[s],a=i!=null,l=t.stack&&o&&a&&t.legend.alignAsTable,r=t.legend.sortDesc===!0?-1:1;return l?(0,p.sortBy)(e,d=>d.stats[s]*r):(0,p.sortBy)(e,d=>d.zindex)}getFillGradient(e){return e?{colors:[{opacity:0},{opacity:e/10}]}:null}translateFillOption(e){return this.panel.percentage&&this.panel.stack&&e===0?.001:e/10}addTimeAxis(e){const t=this.panelWidth/100,s=(0,p.isUndefined)(this.ctrl.range.from)?null:this.ctrl.range.from.valueOf(),i=(0,p.isUndefined)(this.ctrl.range.to)?null:this.ctrl.range.to.valueOf();e.xaxis={timezone:this.dashboard.getTimezone(),show:this.panel.xaxis.show,mode:"time",min:s,max:i,label:"Datetime",ticks:t,timeformat:(0,ve.mc)(t,s,i),tickFormatter:ve.sV}}addXSeriesAxis(e){const t=(0,p.map)(this.data,(s,i)=>[i+1,s.alias]);e.xaxis={timezone:this.dashboard.getTimezone(),show:this.panel.xaxis.show,mode:null,min:0,max:t.length+1,label:"Datetime",ticks:t}}addXHistogramAxis(e,t){let s,i,o;const a=this.panelWidth/50;if(this.data.length&&t){const l=[];for(const u of this.data)for(const g of u.data)l[g[0]]=!0;s=Object.keys(l).map(u=>Number(u)),i=(0,p.min)(s),o=(0,p.max)(s);let r=t,d=Math.floor((o-i)/r);for(;d>a;)r=r*2,d=Math.ceil((o-i)/r);i=Math.floor(i/r)*r,o=Math.ceil(o*1.01/r)*r,s=[];for(let u=i;u<=o;u+=r)s.push(u)}else s=a/2,i=0,o=1;e.xaxis={timezone:this.dashboard.getTimezone(),show:this.panel.xaxis.show,mode:null,min:i,max:o,label:"Histogram",ticks:s},this.configureAxisMode(e.xaxis,"short",null)}addXTableAxis(e){let t=(0,p.map)(this.data,(s,i)=>(0,p.map)(s.datapoints,(o,a)=>[i*s.datapoints.length+a+1,o[1]]));t=(0,p.flatten)(t,!0),e.xaxis={timezone:this.dashboard.getTimezone(),show:this.panel.xaxis.show,mode:null,min:0,max:t.length+1,label:"Datetime",ticks:t}}configureYAxisOptions(e,t){const s={position:"left",show:this.panel.yaxes[0].show,index:1,logBase:this.panel.yaxes[0].logBase||1,min:this.parseNumber(this.panel.yaxes[0].min),max:this.parseNumber(this.panel.yaxes[0].max),tickDecimals:this.panel.yaxes[0].decimals};if(t.yaxes.push(s),(0,p.find)(e,{yaxis:2})){const i=(0,p.clone)(s);i.index=2,i.show=this.panel.yaxes[1].show,i.logBase=this.panel.yaxes[1].logBase||1,i.position="right",i.min=this.parseNumber(this.panel.yaxes[1].min),i.max=this.parseNumber(this.panel.yaxes[1].max),i.tickDecimals=this.panel.yaxes[1].decimals,t.yaxes.push(i),this.applyLogScale(t.yaxes[1],e),this.configureAxisMode(t.yaxes[1],this.panel.percentage&&this.panel.stack?"percent":this.panel.yaxes[1].format,this.panel.yaxes[1].decimals)}this.applyLogScale(t.yaxes[0],e),this.configureAxisMode(t.yaxes[0],this.panel.percentage&&this.panel.stack?"percent":this.panel.yaxes[0].format,this.panel.yaxes[0].decimals)}parseNumber(e){return e===null||typeof e>"u"?null:(0,p.toNumber)(e)}applyLogScale(e,t){if(e.logBase===1)return;const s=e.min===0;e.min<Number.MIN_VALUE&&(e.min=null),e.max<Number.MIN_VALUE&&(e.max=null);let i,o,a=e.max,l=e.min;for(o=0;o<t.length;o++)i=t[o],i.yaxis===e.index&&((!a||a<i.stats.max)&&(a=i.stats.max),(!l||l>i.stats.logmin)&&(l=i.stats.logmin));e.transform=r=>r<Number.MIN_VALUE?null:Math.log(r)/Math.log(e.logBase),e.inverseTransform=r=>Math.pow(e.logBase,r),!a&&!l?(a=e.inverseTransform(2),l=e.inverseTransform(-2)):a?l||(l=a*e.inverseTransform(-4)):a=l*e.inverseTransform(4),e.min?l=e.inverseTransform(Math.ceil(e.transform(e.min))):l=e.min=e.inverseTransform(Math.floor(e.transform(l))),e.max?a=e.inverseTransform(Math.floor(e.transform(e.max))):a=e.max=e.inverseTransform(Math.ceil(e.transform(a))),!(!l||l<Number.MIN_VALUE||!a||a<Number.MIN_VALUE)&&(Number.isFinite(l)&&Number.isFinite(a)?(s&&(e.min=.1,l=1),e.ticks=this.generateTicksForLogScaleYAxis(l,a,e.logBase),s&&e.ticks.unshift(.1),e.ticks[e.ticks.length-1]>e.max&&(e.max=e.ticks[e.ticks.length-1])):(e.ticks=[1,2],delete e.min,delete e.max))}generateTicksForLogScaleYAxis(e,t,s){let i=[],o;for(o=e;o<=t;o*=s)i.push(o);const a=Math.ceil(this.ctrl.height/25),l=i.length;if(l>a){const r=Math.ceil(l/a)*s;for(i=[],o=e;o<=t*r;o*=r)i.push(o)}return i}configureAxisMode(e,t,s){e.tickFormatter=(i,o)=>{const a=(0,fe.Cf)(t);if(!a)throw new Error(`Unit '${t}' is not supported`);return(0,fe.zc)(a(i,s))}}}q.hF.directive("grafanaGraph",["timeSrv","popoverSrv","contextSrv",Lt]);function Lt(n,e,t){return{restrict:"A",template:"",link:(s,i)=>new Dt(s,i,n)}}q.ZP.controller("SeriesOverridesCtrl",["$scope","$element","popoverSrv",At]);function At(n,e,t){n.overrideMenu=[],n.currentOverrides=[],n.override=n.override||{},n.colorPickerModel={},n.addOverrideOption=(s,i,o)=>{const a={text:s,propertyName:i,index:n.overrideMenu.length,values:o,submenu:(0,p.map)(o,l=>({text:String(l),value:l}))};n.overrideMenu.push(a)},n.setOverride=(s,i)=>{if(s.propertyName==="color"){n.openColorSelector(n.override.color);return}n.override[s.propertyName]=i.value,s.propertyName==="fillBelowTo"&&(n.override.lines=!1,n.ctrl.addSeriesOverride({alias:i.value,lines:!1})),n.updateCurrentOverrides(),n.ctrl.render()},n.colorSelected=s=>{n.override.color=s,n.updateCurrentOverrides(),n.ctrl.render(),n.colorPickerModel.series.color=s},n.openColorSelector=s=>{n.colorPickerModel={autoClose:!0,colorSelected:n.colorSelected,series:{color:s}},t.show({element:e.find(".dropdown")[0],position:"top center",openOn:"click",template:'<series-color-picker-popover color="series.color" onColorChange="colorSelected" />',classNames:"drop-popover drop-popover--transparent",model:n.colorPickerModel,onClose:()=>{n.ctrl.render()}})},n.removeOverride=s=>{delete n.override[s.propertyName],n.updateCurrentOverrides(),n.ctrl.refresh()},n.getSeriesNames=()=>(0,p.map)(n.ctrl.seriesList,s=>ee.QX.escapeHtml(s.alias)),n.updateCurrentOverrides=()=>{n.currentOverrides=[],(0,p.each)(n.overrideMenu,s=>{const i=n.override[s.propertyName];(0,p.isUndefined)(i)||n.currentOverrides.push({name:s.text,propertyName:s.propertyName,value:String(i)})})},n.addOverrideOption("Bars","bars",[!0,!1]),n.addOverrideOption("Lines","lines",[!0,!1]),n.addOverrideOption("Line fill","fill",[0,1,2,3,4,5,6,7,8,9,10]),n.addOverrideOption("Fill gradient","fillGradient",[0,1,2,3,4,5,6,7,8,9,10]),n.addOverrideOption("Line width","linewidth",[0,1,2,3,4,5,6,7,8,9,10]),n.addOverrideOption("Null point mode","nullPointMode",["connected","null","null as zero"]),n.addOverrideOption("Fill below to","fillBelowTo",n.getSeriesNames()),n.addOverrideOption("Staircase line","steppedLine",[!0,!1]),n.addOverrideOption("Dashes","dashes",[!0,!1]),n.addOverrideOption("Hidden Series","hiddenSeries",[!0,!1]),n.addOverrideOption("Dash Length","dashLength",[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]),n.addOverrideOption("Dash Space","spaceLength",[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]),n.addOverrideOption("Points","points",[!0,!1]),n.addOverrideOption("Points Radius","pointradius",[1,2,3,4,5]),n.addOverrideOption("Stack","stack",[!0,!1,"A","B","C","D"]),n.addOverrideOption("Color","color",["change"]),n.addOverrideOption("Y-axis","yaxis",[1,2]),n.addOverrideOption("Z-index","zindex",[-3,-2,-1,0,1,2,3]),n.addOverrideOption("Transform","transform",["constant","negative-Y"]),n.addOverrideOption("Legend","legend",[!0,!1]),n.addOverrideOption("Hide in tooltip","hideTooltip",[!0,!1]),n.updateCurrentOverrides()}class Ae{constructor(e){this.$scope=e,this.disabled=!1}$onInit(){this.panel=this.panelCtrl.panel,this.panel.alert&&!U.default.unifiedAlertingEnabled&&(this.disabled=!0);const e=this.$scope.$on("$destroy",()=>{this.panelCtrl.editingThresholds=!1,this.panelCtrl.render(),e()});this.panelCtrl.editingThresholds=!0}addThreshold(){this.panel.thresholds.push({value:void 0,colorMode:"critical",op:"gt",fill:!0,line:!0,yaxis:"left"}),this.panelCtrl.render()}removeThreshold(e){this.panel.thresholds.splice(e,1),this.panelCtrl.render()}render(){this.panelCtrl.render()}onFillColorChange(e){return t=>{this.panel.thresholds[e].fillColor=t,this.render()}}onLineColorChange(e){return t=>{this.panel.thresholds[e].lineColor=t,this.render()}}onThresholdTypeChange(e){this.panel.thresholds[e].colorMode==="custom"&&(this.panel.thresholds[e].fillColor=(0,ue.Z)(U.default.theme2.v1.palette.blue85).setAlpha(.2).toRgbString(),this.panel.thresholds[e].lineColor=(0,ue.Z)(U.default.theme2.v1.palette.blue77).setAlpha(.6).toRgbString()),this.panelCtrl.render()}}Ae.$inject=["$scope"],q.ZP.directive("graphThresholdForm",()=>({restrict:"E",templateUrl:"public/app/plugins/panel/graph/thresholds_form.html",controller:Ae,bindToController:!0,controllerAs:"ctrl",scope:{panelCtrl:"="}}));class Pe{constructor(e){this.$scope=e,this.disabled=!1}$onInit(){this.panel=this.panelCtrl.panel;const e=this.$scope.$on("$destroy",()=>{this.panelCtrl.editingTimeRegions=!1,this.panelCtrl.render(),e()});this.colorModes=yt(),this.panelCtrl.editingTimeRegions=!0}render(){this.panelCtrl.render()}addTimeRegion(){this.panel.timeRegions.push({op:"time",fromDayOfWeek:void 0,from:void 0,toDayOfWeek:void 0,to:void 0,colorMode:"background6",fill:!0,line:!1,fillColor:"rgba(234, 112, 112, 0.12)",lineColor:"rgba(237, 46, 24, 0.60)"}),this.panelCtrl.render()}removeTimeRegion(e){this.panel.timeRegions.splice(e,1),this.panelCtrl.render()}onFillColorChange(e){return t=>{this.panel.timeRegions[e].fillColor=t,this.render()}}onLineColorChange(e){return t=>{this.panel.timeRegions[e].lineColor=t,this.render()}}}Pe.$inject=["$scope"],q.ZP.directive("graphTimeRegionForm",()=>({restrict:"E",templateUrl:"public/app/plugins/panel/graph/time_regions_form.html",controller:Pe,bindToController:!0,controllerAs:"ctrl",scope:{panelCtrl:"="}}));var Ie=h(43609);q.ZP.directive("annotationTooltip",["$sanitize","dashboardSrv","$compile",Pt]);function Pt(n,e,t){function s(i){try{return n(i)}catch{return console.log("Could not sanitize annotation string, html escaping instead"),(0,p.escape)(i)}}return{restrict:"E",scope:{event:"=",onEdit:"&"},link:(i,o)=>{const a=i.event;let l=a.title,r=a.text;const d=e.getCurrent();let u='<div class="graph-annotation">',g="";if(a.alertId!==void 0&&a.newState){const T=Ie.Z.getStateDisplayModel(a.newState);g=T.stateClass,l=`<i class="${T.iconClass}"></i> ${T.text}`,r=Ie.Z.getAlertAnnotationInfo(a),a.text&&(r=r+"<br />"+a.text)}else l&&(r=l+"<br />"+((0,p.isString)(r)?r:""),l="");let f='<div class="graph-annotation__header">';a.login&&a.avatarUrl&&(f+=`<div class="graph-annotation__user" bs-tooltip="'Created by ${a.login}'"><img src="${a.avatarUrl}" /></div>`),f+=` <span class="graph-annotation__title ${g}">${s(l)}</span> <span class="graph-annotation__time">${d?.formatDate(a.min)}</span> `,a.id&&d?.canEditAnnotations(a.dashboardId)&&(f+=` <span class="pointer graph-annotation__edit-icon" ng-click="onEdit()"> <i class="fa fa-pencil-square"></i> </span> `),f+="</div>",u+=f,u+='<div class="graph-annotation__body">',r&&(u+="<div ng-non-bindable>"+s(r.replace(/\n/g,"<br>"))+"</div>");const v=a.tags;v&&v.length&&(i.tags=v,u+='<span class="label label-tag small" ng-repeat="tag in tags" tag-color-from-name="tag">{{tag}}</span><br/>'),u+="</div>",u+="</div>",c()(u).appendTo(o),t(o.contents())(i)}}}var It=h(91368),ge=h(11285),we=h(77972);class wt{constructor(){}$onInit(){this.event.panelId=this.panelCtrl.panel.id,this.event.dashboardUID=this.panelCtrl.dashboard.uid,this.event.time=ke(this.event.time),this.event.isRegion&&(this.event.timeEnd=ke(this.event.timeEnd)),this.timeFormated=this.panelCtrl.dashboard.formatDate(this.event.time)}canDelete(){return It.contextSrv.accessControlEnabled()?this.event.source?.type==="dashboard"?!!this.panelCtrl.dashboard.meta.annotationsPermissions?.dashboard.canDelete:!!this.panelCtrl.dashboard.meta.annotationsPermissions?.organization.canDelete:!0}async save(){if(!this.form.$valid)return;const e=(0,p.cloneDeep)(this.event);if(e.time=e.time.valueOf(),e.timeEnd=0,e.isRegion&&(e.timeEnd=this.event.timeEnd.valueOf(),e.timeEnd<e.time)){console.log("invalid time");return}let t=ge.xD;e.id&&(t=ge._E);try{await t(e)}catch(s){console.log(s)}finally{this.close(),(0,we.kt)().run({dashboard:this.panelCtrl.dashboard,range:this.panelCtrl.range})}}async delete(){try{await(0,ge.Dl)(this.event)}catch(e){console.log(e)}finally{this.close(),(0,we.kt)().run({dashboard:this.panelCtrl.dashboard,range:this.panelCtrl.range})}}}function ke(n){if(n&&(0,p.isNumber)(n)){const e=Number(n);return(0,J.CQ)(e)}else return n}function kt(){return{restrict:"E",controller:wt,bindToController:!0,controllerAs:"ctrl",templateUrl:"public/app/features/annotations/partials/event_editor.html",scope:{panelCtrl:"=",event:"=",close:"&"}}}q.hF.directive("eventEditor",kt);var Rt=h(97585),j=h(25587),Ft=h(26129),Wt=h(90108),Nt=h(539),Bt=h(32195),Ut=h(84749),Vt=h(69887),zt=h(59177),_t=h(43620);class Kt{constructor(e){this.scrollContextElement=null,this.position={x:0,y:0},this.onClose=()=>{this.scrollContextElement&&this.scrollContextElement.removeEventListener("scroll",this.onClose),this.scope.$apply(()=>{this.isVisible=!1})},this.toggleMenu=t=>{this.isVisible=!this.isVisible,this.isVisible&&this.scrollContextElement&&this.scrollContextElement.addEventListener("scroll",this.onClose),this.source?this.position={x:this.source.pageX,y:this.source.pageY}:this.position={x:t?t.pageX:0,y:t?t.pageY:0}},this.setScrollContextElement=t=>{this.scrollContextElement=t},this.setSource=t=>{this.source=t},this.getSource=()=>this.source,this.setMenuItemsSupplier=t=>{this.menuItemsSupplier=t},this.isVisible=!1,this.scope=e}}const Ht=n=>{const e=n.fieldConfig??{defaults:{},overrides:[]},t=n.options||{};return t.dataLinks&&(e.defaults.links=t.dataLinks,delete t.dataLinks),n.options=t,n.fieldConfig=e,t};class Re{constructor(e){this.$scope=e,this.panelCtrl=e.ctrl,this.panel=this.panelCtrl.panel,this.$scope.ctrl=this,this.logScales={linear:1,"log (base 2)":2,"log (base 10)":10,"log (base 32)":32,"log (base 1024)":1024},this.xAxisModes={Time:"time",Series:"series",Histogram:"histogram"},this.xAxisStatOptions=[{text:"Avg",value:"avg"},{text:"Min",value:"min"},{text:"Max",value:"max"},{text:"Total",value:"total"},{text:"Count",value:"count"},{text:"Current",value:"current"}],this.panel.xaxis.mode==="custom"&&(this.panel.xaxis.name||(this.panel.xaxis.name="specify field")),this.selectors=xe.wl.components.Panels.Visualization.Graph.VisualizationTab}setUnitFormat(e){return t=>{e.format=t,this.panel.fieldConfig.defaults.unit?(this.panel.fieldConfig.defaults.unit=void 0,this.panelCtrl.refresh()):this.panelCtrl.render()}}render(){this.panelCtrl.render()}xAxisModeChanged(){this.panelCtrl.processor.setPanelDefaultsForNewXAxisMode(),this.panelCtrl.onDataFramesReceived(this.panelCtrl.dataList)}xAxisValueChanged(){this.panelCtrl.onDataFramesReceived(this.panelCtrl.dataList)}}Re.$inject=["$scope"];function Gt(){"use strict";return{restrict:"E",scope:!0,templateUrl:"public/app/plugins/panel/graph/axes_editor.html",controller:Re}}var $t=h(75578),Xt=h(39596),jt=h(7999);class Yt{constructor(e){this.panel=e}getSeriesList(e){const t=[],{dataList:s,range:i}=e;if(!s||!s.length)return t;for(let o=0;o<s.length;o++){let a=s[o],{timeField:l}=(0,he.sV)(a);if(l){a=(0,Xt.w)({frame:a,refFieldName:l.name}),l=(0,he.sV)(a).timeField;for(let r=0;r<a.fields.length;r++){const d=a.fields[r];if(d.type!==le.fS.number)continue;const u=(0,$t.CZ)(d,a,s),g=[];for(let f=0;f<a.length;f++)g.push([d.values[f],(0,J.CQ)(l.values[f]).valueOf()]);t.push(this.toTimeSeries(d,u,o,r,g,t.length,i))}}}if(this.panel.xaxis.mode==="histogram"&&!this.panel.stack&&t.length>1){const o=t[0];o.alias=o.aliasEscaped="Count";for(let a=1;a<t.length;a++)o.datapoints=o.datapoints.concat(t[a].datapoints);return[o]}return t}toTimeSeries(e,t,s,i,o,a,l){const r=a%G.O9.length,d=this.panel.aliasColors[t]||G.O9[r],u=new jt.Z({datapoints:o||[],alias:t,color:U.default.theme2.visualization.getColorByName(d),unit:e.config?e.config.unit:void 0,dataFrameIndex:s,fieldIndex:i});if(o&&o.length>0&&l){const g=o[o.length-1][1],f=l.from;g-f.valueOf()<-1e4&&o[0][1]-f.valueOf()<-1e4&&(u.isOutsideRange=!0)}return u}setPanelDefaultsForNewXAxisMode(){switch(this.panel.xaxis.mode){case"time":{this.panel.bars=!1,this.panel.lines=!0,this.panel.points=!1,this.panel.legend.show=!0,this.panel.tooltip.shared=!0,this.panel.xaxis.values=[];break}case"series":{this.panel.bars=!0,this.panel.lines=!1,this.panel.points=!1,this.panel.stack=!1,this.panel.legend.show=!1,this.panel.tooltip.shared=!1,this.panel.xaxis.values=["total"];break}case"histogram":{this.panel.bars=!0,this.panel.lines=!1,this.panel.points=!1,this.panel.stack=!1,this.panel.legend.show=!1,this.panel.tooltip.shared=!1;break}}}validateXAxisSeriesValue(){switch(this.panel.xaxis.mode){case"series":{if(this.panel.xaxis.values.length===0){this.panel.xaxis.values=["total"];return}const e=this.getXAxisValueOptions({});(0,p.find)(e,{value:this.panel.xaxis.values[0]})||(this.panel.xaxis.values=["total"]);return}}}getXAxisValueOptions(e){switch(this.panel.xaxis.mode){case"series":return[{text:"Avg",value:"avg"},{text:"Min",value:"min"},{text:"Max",value:"max"},{text:"Total",value:"total"},{text:"Count",value:"count"}]}return[]}pluckDeep(e,t){const s=t.split(".");let i=e;for(let o=0;o<s.length;++o)if(i[s[o]])i=i[s[o]];else return;return i}}const Zt=` <div class="graph-panel" ng-class="{'graph-panel--legend-right': ctrl.panel.legend.rightSide}"> <div class="graph-panel__chart" grafana-graph ng-dblclick="ctrl.zoomOut()"> </div> <div class="graph-legend"> <div class="graph-legend-content" graph-legend></div> </div> <div ng-if="ctrl.contextMenuCtrl.isVisible"> <graph-context-menu itemsGroup="ctrl.contextMenuCtrl.menuItemsSupplier()" on-close="ctrl.onContextMenuClose" getContextMenuSource="ctrl.contextMenuCtrl.getSource" timeZone="ctrl.getTimeZone()" x="ctrl.contextMenuCtrl.position.x" y="ctrl.contextMenuCtrl.position.y" ></graph-context-menu> </div> </div> `;class ae extends Wt.k{constructor(e,t){super(e,t),this.renderError=!1,this.hiddenSeries={},this.hiddenSeriesTainted=!1,this.seriesList=[],this.dataList=[],this.annotations=[],this.colors=[],this.subTabIndex=0,this.panelDefaults={datasource:null,renderer:"flot",yaxes:[{label:null,show:!0,logBase:1,min:null,max:null,format:"short"},{label:null,show:!0,logBase:1,min:null,max:null,format:"short"}],xaxis:{show:!0,mode:"time",name:null,values:[],buckets:null},yaxis:{align:!1,alignLevel:null},lines:!0,fill:1,fillGradient:0,linewidth:1,dashes:!1,hiddenSeries:!1,dashLength:10,spaceLength:10,points:!1,pointradius:2,bars:!1,stack:!1,percentage:!1,legend:{show:!0,values:!1,min:!1,max:!1,current:!1,total:!1,avg:!1},nullPointMode:"null",steppedLine:!1,tooltip:{value_type:"individual",shared:!0,sort:0},timeFrom:null,timeShift:null,targets:[{}],aliasColors:{},seriesOverrides:[],thresholds:[],timeRegions:[],options:{alertThreshold:!0}},this.onColorChange=(i,o)=>{i.setColor(U.default.theme2.visualization.getColorByName(o)),this.panel.aliasColors[i.alias]=o,this.render()},this.onToggleSeries=i=>{this.hiddenSeriesTainted=!0,this.hiddenSeries=i,this.render()},this.onToggleSort=(i,o)=>{this.panel.legend.sort=i,this.panel.legend.sortDesc=o,this.render()},this.onToggleAxis=i=>{let o=(0,p.find)(this.panel.seriesOverrides,{alias:i.alias});o||(o={alias:i.alias},this.panel.seriesOverrides.push(o)),o.yaxis=i.yaxis,this.render()},this.onContextMenuClose=()=>{this.contextMenuCtrl.toggleMenu()},this.getTimeZone=()=>this.dashboard.getTimezone(),this.getDataFrameByRefId=i=>this.dataList.filter(o=>o.refId===i)[0],(0,p.defaults)(this.panel,this.panelDefaults),(0,p.defaults)(this.panel.tooltip,this.panelDefaults.tooltip),(0,p.defaults)(this.panel.legend,this.panelDefaults.legend),(0,p.defaults)(this.panel.xaxis,this.panelDefaults.xaxis),(0,p.defaults)(this.panel.options,this.panelDefaults.options),this.useDataFrames=!0,this.processor=new Yt(this.panel),this.contextMenuCtrl=new Kt(e),this.events.on(z.Kh.render,this.onRender.bind(this)),this.events.on(z.Kh.dataFramesReceived,this.onDataFramesReceived.bind(this)),this.events.on(z.Kh.dataSnapshotLoad,this.onDataSnapshotLoad.bind(this)),this.events.on(z.Kh.editModeInitialized,this.onInitEditMode.bind(this)),this.events.on(z.Kh.initPanelActions,this.onInitPanelActions.bind(this));const s=this.panel.fieldConfig.defaults.unit;s&&(this.panel.yaxes[0].format=s)}onInitEditMode(){this.addEditorTab("Display","public/app/plugins/panel/graph/tab_display.html"),this.addEditorTab("Series overrides","public/app/plugins/panel/graph/tab_series_overrides.html"),this.addEditorTab("Axes",Gt),this.addEditorTab("Legend","public/app/plugins/panel/graph/tab_legend.html"),this.addEditorTab("Thresholds","public/app/plugins/panel/graph/tab_thresholds.html"),this.addEditorTab("Time regions","public/app/plugins/panel/graph/tab_time_regions.html"),this.subTabIndex=0,this.hiddenSeriesTainted=!1}onInitPanelActions(e){e.push({text:"Toggle legend",click:"ctrl.toggleLegend()",shortcut:"p l"})}zoomOut(e){de.h$.publish(new _t.p8({scale:2}))}onDataSnapshotLoad(e){const{series:t,annotations:s}=(0,Vt.y)(this.panel,this.dashboard);this.panelData.annotations=s,this.onDataFramesReceived(t)}onDataFramesReceived(e){this.dataList=e,this.seriesList=this.processor.getSeriesList({dataList:this.dataList,range:this.range}),this.dataWarning=this.getDataWarning(),this.alertState=void 0,this.seriesList.alertState=void 0,this.panelData.alertState&&(this.alertState=this.panelData.alertState,this.seriesList.alertState=this.alertState.state),this.annotations=[],this.panelData.annotations?.length&&(this.annotations=(0,zt.em)(this.panelData.annotations)),this.loading=!1,this.render(this.seriesList)}getDataWarning(){if(this.seriesList.reduce((i,o)=>i+o.datapoints.length,0)===0){if(this.dataList){for(const i of this.dataList)if(i.length&&i.fields?.length)return{title:"Unable to graph data",tip:"Data exists, but is not timeseries",actionText:"Switch to table view",action:()=>{(0,Ut.WI)((0,Bt.Kc)({panel:this.panel,pluginId:"table"}))}}}return{title:"No data",tip:"No data returned from query"}}for(const i of this.seriesList)if(!i.isOutsideRange)return;const t={title:"Data outside time range",tip:"Can be caused by timezone mismatch or missing time filter in query"},s=Mt(this.dataList);return s&&(t.actionText="Zoom to data",t.action=()=>{Ft.E1.partial({from:s.from,to:s.to})}),t}onRender(){if(this.seriesList){Nt.X.alertToGraphThresholds(this.panel);for(const e of this.seriesList)e.applySeriesOverrides(this.panel.seriesOverrides),e.unit&&(this.panel.yaxes[e.yaxis-1].format=e.unit),this.hiddenSeriesTainted===!1&&e.hiddenSeries===!0&&(this.hiddenSeries[e.alias]=!0)}}addSeriesOverride(e){this.panel.seriesOverrides.push(e||{})}removeSeriesOverride(e){this.panel.seriesOverrides=(0,p.without)(this.panel.seriesOverrides,e),this.render()}toggleLegend(){this.panel.legend.show=!this.panel.legend.show,this.render()}legendValuesOptionChanged(){const e=this.panel.legend;e.values=e.min||e.max||e.avg||e.current||e.total,this.render()}migrateToReact(){this.onPluginTypeChange(U.default.panels.timeseries)}}ae.template=Zt,ae.$inject=["$scope","$injector"];const Fe=new Rt.c(null).useFieldConfig({disableStandardOptions:[j.qb.NoValue,j.qb.Thresholds,j.qb.Max,j.qb.Min,j.qb.Decimals,j.qb.Color,j.qb.Mappings]}).setDataSupport({annotations:!0,alertStates:!0}).setMigrationHandler(Ht);Fe.angularPanelCtrl=ae}}]); //# sourceMappingURL=graphPlugin.716d46dd40030e211887.js.map