1import{d as vs,X as rs,N as G,q as fs,c as e,a as t,e as y,F as i,t as o,u as w,r as P,h as M,p as X,i as _,k as r,y as O,o as l,n as z,_ as ms}from"./index-BTfmF8a3.js";import{s as R}from"./selfServiceBilling-BhG2RslN.js";import{d as F,b as H}from"./format-D5vcAEQz.js";const gs={class:"oma-app us-host"},ps={class:"us-inner"},ys={class:"us-head c-page-head"},_s={class:"sub t-code-sm"},bs={key:0},ks={key:2},hs={key:3,class:"us-na-note t-data"},xs={key:4},Ss={class:"r"},ws={class:"range","aria-label":"Time range"},Ts=["data-usage-range","onClick"],Ds={class:"us-strip"},Is={class:"cell"},Cs={class:"lb t-label"},Us={class:"ago"},Fs={key:0,class:"v us-na"},$s={class:"v"},As={class:"delta t-code-sm"},Ps={class:"cell"},Ns={key:0,class:"v us-na"},qs={class:"v"},Ms={class:"cell"},Os={class:"lb t-label"},Rs={class:"ago"},Bs={key:0,class:"v us-na"},Ls={class:"v"},Vs={class:"cell"},Ws={key:0,class:"v us-na"},Ys={class:"v"},js={class:"us-chart"},Es={class:"us-chart-h"},Gs={class:"l"},Xs={class:"sub t-code-sm"},zs={class:"r"},Hs={class:"seg","aria-label":"Metric"},Qs=["onClick"],Zs={class:"seg us-grain-readonly","aria-label":"Usage granularity"},Js={type:"button",class:"on",disabled:""},Ks={key:0,class:"us-chart-na t-code-sm"},st={key:1,class:"us-chart-na t-code-sm"},tt={key:2,class:"us-chart-na t-code-sm"},at={key:3,class:"us-chart-svg-wrap"},et={class:"us-chart-svg",viewBox:"0 0 1200 300",preserveAspectRatio:"none","aria-hidden":"true"},lt=["d"],nt=["points"],dt=["cx","cy"],ot={class:"us-recent"},it={key:0,class:"us-chart-na t-code-sm"},ut={key:1,class:"us-chart-na t-code-sm"},ct={key:2,class:"us-chart-na t-code-sm"},vt={key:3,class:"us-recent-body"},rt={class:"body"},ft={class:"nm"},mt={class:"sub t-data"},gt={class:"v t-tag"},pt={class:"v t-tag"},yt=vs({__name:"UsageAnalyticsView",setup(_t){const b=rs(),T=_("mtd"),Q=[{value:"24h",label:"24h"},{value:"7d",label:"7d"},{value:"mtd",label:"MTD"},{value:"90d",label:"90d"},{value:"ytd",label:"YTD"},{value:"custom",label:"custom"}],$=_("spend"),Z=[{value:"spend",label:"Spend"},{value:"tokens",label:"Tokens"},{value:"requests",label:"Requests"}];function B(a){return a==="24h"?"hourly":"daily"}function J(a){return new Date(Date.UTC(a.getUTCFullYear(),a.getUTCMonth(),a.getUTCDate())).toISOString()}function K(a,s=new Date){if(a==="custom")return{};const d=s.toISOString();return a==="24h"?{from:new Date(s.getTime()-24*60*60*1e3).toISOString(),to:d}:a==="7d"?{from:new Date(s.getTime()-7*24*60*60*1e3).toISOString(),to:d}:a==="90d"?{from:new Date(s.getTime()-90*24*60*60*1e3).toISOString(),to:d}:a==="ytd"?{from:new Date(Date.UTC(s.getUTCFullYear(),0,1)).toISOString(),to:d}:{from:J(new Date(Date.UTC(s.getUTCFullYear(),s.getUTCMonth(),1))),to:d}}const g=_(!1),k=_(""),D=_(""),C=_(""),p=_(null),f=_(null),U=_(null),u=r(()=>{var a;return[...((a=p.value)==null?void 0:a.items)??[]].sort((s,d)=>new Date(s.window_start).getTime()-new Date(d.window_start).getTime())}),L=r(()=>{const a=u.value.length>0?u.value[u.value.length-1]:null;return a?a.window_start:""}),ss=r(()=>B(T.value)==="hourly"?"Hourly":"Daily"),V=r(()=>{var a;return((a=U.value)==null?void 0:a.items)??[]}),ts=r(()=>{const a=u.value;return!a||a.length===0?0:a.reduce((s,d)=>s+d.total_requests,0)}),as=r(()=>{const a=u.value;return!a||a.length===0?0:a.reduce((s,d)=>s+d.total_tokens,0)}),es=r(()=>{const a=u.value;return!a||a.length===0?0:a.reduce((s,d)=>s+d.total_amount_units,0)}),h=r(()=>{var a;return((a=f.value)==null?void 0:a.currency)??""}),ls=r(()=>{var v,n,c,m,S;const a=((v=f.value)==null?void 0:v.tenant_id)??b.currentTenantId,s=(c=(n=b.profile)==null?void 0:n.memberships)==null?void 0:c.find(I=>I.tenant_id===a),d=(m=s==null?void 0:s.tenant_name)==null?void 0:m.trim();return d||((S=b.profile)!=null&&S.display_name?`${b.profile.display_name} Workspace`:a?`Workspace ${a}`:"Workspace")}),ns=r(()=>{var v,n,c,m;const a=((v=f.value)==null?void 0:v.tenant_id)??b.currentTenantId,s=(c=(n=b.profile)==null?void 0:n.memberships)==null?void 0:c.find(S=>S.tenant_id===a),d=((m=s==null?void 0:s.tenant_slug)==null?void 0:m.trim())??"";return d!==""?d:a?`id ${a}`:""}),x=r(()=>{var s;const a=(s=f.value)==null?void 0:s.subscriptions;return!a||a.length===0?null:a[0]}),A=r(()=>{const a=u.value;if(!a||a.length===0)return[];const s=$.value==="tokens"?"total_tokens":$.value==="requests"?"total_requests":"total_amount_units",d=a.map(I=>I[s]),v=Math.max(...d,1),n=60,c=1180,m=30,S=250;return a.map((I,os)=>{const E=I[s],is=a.length===1?(n+c)/2:n+os/(a.length-1)*(c-n),us=S-E/v*(S-m),cs=new Date(I.window_start).toISOString().slice(0,10);return{x:is,y:us,label:cs,value:E}})}),W=r(()=>A.value.map(a=>`${a.x.toFixed(1)},${a.y.toFixed(1)}`).join(" ")),Y=r(()=>{const a=A.value;if(a.length<2)return"";const s=250,d=a[0],v=a[a.length-1];if(!d||!v)return"";const n=a.map(c=>`L${c.x.toFixed(1)},${c.y.toFixed(1)}`).join(" ");return`M${d.x.toFixed(1)},${d.y.toFixed(1)} ${n} L${v.x.toFixed(1)},${s} L${d.x.toFixed(1)},${s} Z`}),ds=r(()=>A.value.length>1);function N(a){return new Intl.NumberFormat().format(a)}let j=0;async function q(){const a=++j,s=b.currentTenantId;if(!s){p.value=null,f.value=null,U.value=null,k.value="",D.value="",C.value="",g.value=!1;return}g.value=!0,k.value="",D.value="",C.value="";const d=B(T.value),v=K(T.value),[n,c,m]=await Promise.allSettled([R.getUsage({tenantId:s,granularity:d,limit:90,...v}),R.getSummary(s),R.getSettlements({tenantId:s,limit:8})]);a===j&&(n.status==="fulfilled"?p.value=n.value:(p.value=null,k.value=O(n.reason,"Could not load usage data for this range")),c.status==="fulfilled"?f.value=c.value:(f.value=null,D.value=O(c.reason,"Could not load billing summary")),m.status==="fulfilled"?U.value=m.value:(U.value=null,C.value=O(m.reason,"Could not load recent API calls")),g.value=!1)}return G(()=>b.currentTenantId,()=>void q()),G(T,()=>void q()),fs(()=>void q()),(a,s)=>{var d,v;return l(),e("div",gs,[t("div",ps,[t("div",ys,[t("div",null,[s[3]||(s[3]=t("h1",null,[y("Usage & "),t("em",null,"spend")],-1)),t("div",_s,[g.value&&!f.value?(l(),e("span",bs,"Loading billing periodâ¦")):x.value?(l(),e(i,{key:1},[t("span",null,[s[0]||(s[0]=y("Billing period · ",-1)),t("b",null,o(x.value.start_at.slice(0,10))+" â "+o(x.value.end_at.slice(0,10)),1)]),s[2]||(s[2]=t("span",{class:"us-head-sep","aria-hidden":"true"},"·",-1)),t("span",null,[t("b",null,o(w(F)(x.value.amount_used_units,h.value)),1),s[1]||(s[1]=y(" used of ",-1)),t("b",null,o(w(F)(x.value.amount_included_units,h.value)),1)])],64)):f.value?(l(),e("span",ks,o(ls.value)+" · "+o(ns.value)+" · "+o(f.value.currency),1)):D.value?(l(),e("span",hs,o(D.value),1)):(l(),e("span",xs,"No billing period data available"))])]),t("div",Ss,[t("div",ws,[(l(),e(i,null,P(Q,n=>t("button",{key:n.value,type:"button","data-usage-range":n.value,class:z({on:T.value===n.value}),onClick:c=>T.value=n.value},o(n.label),11,Ts)),64))])])]),t("div",Ds,[t("div",Is,[t("div",Cs,[s[4]||(s[4]=t("span",null,"Requests · period",-1)),t("span",Us,o(p.value?`${u.value.length} buckets`:""),1)]),g.value&&!p.value?(l(),e("div",Fs,"loadingâ¦")):k.value?(l(),e(i,{key:1},[s[5]||(s[5]=t("div",{class:"v us-na"},"â",-1)),s[6]||(s[6]=t("div",{class:"us-na-note t-data"},"load failed",-1))],64)):u.value.length>0?(l(),e(i,{key:2},[t("div",$s,[t("em",null,o(N(ts.value)),1)]),t("div",As,[s[7]||(s[7]=y(" total requests this period ",-1)),L.value?(l(),e(i,{key:0},[y("· updated "+o(w(H)(L.value)),1)],64)):M("",!0)])],64)):(l(),e(i,{key:3},[s[8]||(s[8]=t("div",{class:"v us-na"},"â",-1)),s[9]||(s[9]=t("div",{class:"us-na-note t-data"},"no data yet",-1))],64))]),t("div",Ps,[s[15]||(s[15]=t("div",{class:"lb t-label"},"Tokens · period",-1)),g.value&&!p.value?(l(),e("div",Ns,"loadingâ¦")):k.value?(l(),e(i,{key:1},[s[10]||(s[10]=t("div",{class:"v us-na"},"â",-1)),s[11]||(s[11]=t("div",{class:"us-na-note t-data"},"load failed",-1))],64)):u.value.length>0?(l(),e(i,{key:2},[t("div",qs,[t("em",null,o(N(as.value)),1)]),s[12]||(s[12]=t("div",{class:"delta t-code-sm"},"total tokens processed",-1))],64)):(l(),e(i,{key:3},[s[13]||(s[13]=t("div",{class:"v us-na"},"â",-1)),s[14]||(s[14]=t("div",{class:"us-na-note t-data"},"no data yet",-1))],64))]),t("div",Ms,[t("div",Os,[s[16]||(s[16]=t("span",null,"Spend · period",-1)),t("span",Rs,o(h.value!==""?h.value:"USD"),1)]),g.value&&!p.value?(l(),e("div",Bs,"loadingâ¦")):k.value?(l(),e(i,{key:1},[s[17]||(s[17]=t("div",{class:"v us-na"},"â",-1)),s[18]||(s[18]=t("div",{class:"us-na-note t-data"},"load failed",-1))],64)):u.value.length>0?(l(),e(i,{key:2},[t("div",Ls,[t("em",null,o(w(F)(es.value,h.value)),1)]),s[19]||(s[19]=t("div",{class:"delta t-code-sm"},"total spend this period",-1))],64)):(l(),e(i,{key:3},[s[20]||(s[20]=t("div",{class:"v us-na"},"â",-1)),s[21]||(s[21]=t("div",{class:"us-na-note t-data"},"no data yet",-1))],64))]),t("div",Vs,[s[27]||(s[27]=t("div",{class:"lb t-label"},"Quota · subscription",-1)),g.value&&!f.value?(l(),e("div",Ws,"loadingâ¦")):D.value?(l(),e(i,{key:1},[s[22]||(s[22]=t("div",{class:"v us-na"},"â",-1)),s[23]||(s[23]=t("div",{class:"us-na-note t-data"},"not available",-1))],64)):x.value?(l(),e(i,{key:2},[t("div",Ys,[t("em",null,o(w(F)(x.value.amount_included_units,h.value)),1)]),s[24]||(s[24]=t("div",{class:"delta t-code-sm"},"included per period",-1))],64)):(l(),e(i,{key:3},[s[25]||(s[25]=t("div",{class:"v us-na"},"â",-1)),s[26]||(s[26]=t("div",{class:"us-na-note t-data"},"no subscription data",-1))],64))])]),t("div",js,[t("div",Es,[t("div",Gs,[s[28]||(s[28]=t("div",{class:"ti"},[y("Usage over time "),t("span",{class:"pill t-data"},"rollup buckets")],-1)),t("div",Xs,[u.value.length>0?(l(),e(i,{key:0},[y(o(u.value.length)+" rollup periods · "+o((d=u.value[0])==null?void 0:d.window_start.slice(0,10))+" â "+o((v=u.value[u.value.length-1])==null?void 0:v.window_start.slice(0,10)),1)],64)):(l(),e(i,{key:1},[y("No rollup data available for this range")],64))])]),t("div",zs,[t("div",Hs,[(l(),e(i,null,P(Z,n=>t("button",{key:n.value,type:"button",class:z({on:$.value===n.value}),onClick:c=>$.value=n.value},o(n.label),11,Qs)),64))]),t("div",Zs,[t("button",Js,o(ss.value),1)])])]),g.value&&!p.value?(l(),e("div",Ks,[...s[29]||(s[29]=[t("span",null,"Loa
1ding usage chartâ¦",-1)])])):k.value?(l(),e("div",st,[t("span",null,o(k.value),1)])):u.value.length===0?(l(),e("div",tt,[...s[30]||(s[30]=[t("span",null,"No usage data available for this range yet.",-1)])])):(l(),e("div",at,[(l(),e("svg",et,[s[31]||(s[31]=X('<defs data-v-fcc4c45d><linearGradient id="ga" x1="0" y1="0" x2="0" y2="1" data-v-fcc4c45d><stop offset="0%" class="us-grad-start" data-v-fcc4c45d></stop><stop offset="100%" class="us-grad-end" data-v-fcc4c45d></stop></linearGradient></defs><g class="us-chart-grid" data-v-fcc4c45d><line x1="60" y1="30" x2="1180" y2="30" data-v-fcc4c45d></line><line x1="60" y1="85" x2="1180" y2="85" data-v-fcc4c45d></line><line x1="60" y1="140" x2="1180" y2="140" data-v-fcc4c45d></line><line x1="60" y1="195" x2="1180" y2="195" data-v-fcc4c45d></line><line x1="60" y1="250" x2="1180" y2="250" data-v-fcc4c45d></line></g>',2)),Y.value?(l(),e("path",{key:0,fill:"url(#ga)",stroke:"none",d:Y.value},null,8,lt)):M("",!0),W.value&&ds.value?(l(),e("polyline",{key:1,fill:"none",class:"us-chart-stroke","stroke-width":"1.2","stroke-linecap":"round","stroke-linejoin":"round",opacity:".7",points:W.value},null,8,nt)):M("",!0),(l(!0),e(i,null,P(A.value,n=>(l(),e("circle",{key:n.label,class:"us-chart-point",cx:n.x,cy:n.y,r:"6"},null,8,dt))),128))]))]))]),t("div",ot,[s[35]||(s[35]=t("div",{class:"us-bdl-h"},[t("div",{class:"ti"},[y("Recent API calls "),t("span",{class:"ct t-data"},"settlements")])],-1)),g.value&&!U.value?(l(),e("div",it,[...s[32]||(s[32]=[t("span",null,"Loading recent API callsâ¦",-1)])])):C.value?(l(),e("div",ut,[t("span",null,o(C.value),1)])):V.value.length===0?(l(),e("div",ct,[...s[33]||(s[33]=[t("span",null,"No settled API calls in this workspace yet.",-1)])])):(l(),e("div",vt,[(l(!0),e(i,null,P(V.value,n=>(l(),e("div",{key:n.settlement_id,class:"us-recent-row"},[t("div",rt,[t("div",ft,o(n.request_id),1),t("div",mt,o(n.requested_model||"model recorded")+" · "+o(n.settled_at?w(H)(n.settled_at):"pending timestamp"),1)]),t("div",gt,[t("b",null,o(N(n.total_tokens)),1),s[34]||(s[34]=t("span",null,"tokens",-1))]),t("div",pt,[t("b",null,o(w(F)(n.settled_amount_units,h.value)),1),t("span",null,o(n.state),1)])]))),128))]))]),s[36]||(s[36]=X('<div class="us-grid-2" data-v-fcc4c45d><div class="us-heat" data-v-fcc4c45d><div class="us-heat-h" data-v-fcc4c45d><div class="ti" data-v-fcc4c45d>Daily spend <span class="pill t-data" data-v-fcc4c45d>last 91 days</span></div></div><div class="us-chart-na us-na-tall t-code-sm" data-v-fcc4c45d><span data-v-fcc4c45d>Daily spend heatmap not available yet.</span></div></div><div class="us-save" data-v-fcc4c45d><div class="us-save-h" data-v-fcc4c45d><span class="ti t-label" data-v-fcc4c45d>
1Service efficiency</span></div><div class="us-chart-na us-na-tall t-code-sm" data-v-fcc4c45d><span data-v-fcc4c45d>Efficiency data not available yet.</span></div></div></div><div class="us-anom" data-v-fcc4c45d><div class="us-anom-h" data-v-fcc4c45d><div class="ti" data-v-fcc4c45d>Anomalies</div></div><div class="us-chart-na us-na-med t-code-sm" data-v-fcc4c45d><span data-v-fcc4c45d>Anomaly detection not available yet.</span></div></div><div class="us-grid-3" data-v-fcc4c45d><div class="us-bdl" data-v-fcc4c45d><div class="us-bdl-h" data-v-fcc4c45d><div class="ti" data-v-fcc4c45d>By model</div></div><div class="us-chart-na t-code-sm" data-v-fcc4c45d><span data-v-fcc4c45d>Per-model breakdown not available yet.</span></div></div><div class="us-bdl" data-v-fcc4c45d><div class="us-bdl-h" data-v-fcc4c45d><div class="ti" data-v-fcc4c45d>By project</div></div><div class="us-chart-na t-code-sm" data-v-fcc4c45d><span data-v-fcc4c45d>Per-project breakdown not available yet.</span></div></div><div class="us-bdl" data-v-fcc4c45d><div class="us-bdl-h" data-v-fcc4c45d><div class="ti" data-v-fcc4c45d>By API key</div></div><div class="us-chart-na t-code-sm" data-v-fcc4c45d><span data-v-fcc4c45d>Per-key breakdown not available yet.</span></div></div></div><div class="us-fc" data-v-fcc4c45d><div class="l" data-v-fcc4c45d><div class="lb t-label" data-v-fcc4c45d>â Forecast · end of month</div><div class="v us-na" data-v-fcc4c45d>â</div><div class="sub us-na-note t-code-sm" data-v-fcc4c45d>Spend forecast not available yet.</div></div></div>',4))])])}}}),xt=ms(yt,[["__scopeId","data-v-fcc4c45d"]]);export{xt as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.