UNPKG

@northflank/cli

Version:

Provides a command-line interface to the Northflank platform.

1 lines 10.8 kB
const a13k=a13j;function a13X(){const X6=['N/A','serviceId','valueOf','min','log',',\x20to:\x20','printMetricsGraph','stringify','service','data','all\x20containers','bold','getPaddingDataEnd','387142RxXkkt','addOption','json','length','endTime','No\x20metrics\x20found\x20for\x20this\x20query','askForContainer','661719OxmPPh','metrics','split','unshift','apiClient','keys','metricsSingle','printInitInfo','stdout','max','getPaddingDataStart','10040760hTnNqN','choices','Id\x20[NAME]','value','rows','\x20seconds','containerId','--timestamp\x20[timestamp]','yaml','printMetricsTable','time','--run\x20--runId\x20[runId]','--deployment\x20--deploymentId\x20[deploymentId]','startTime',',\x20from:\x20','addon','askForAddon','1176301cdHYPW','yml','details','metricId','runId','900518tupSOR','toTimeString','addonId','getCurrentProjectName','\x20--','Get\x20metrics\x20for\x20the\x20specified\x20','job','askForJobRun','metadata','Fetching\x20data..','map','Error\x20while\x20fetching\x20metrics\x20entries:\x20','toUpperCase','inquirerHelper','Metrics\x20overview','Only\x20two\x20of\x20\x27startTime\x27,\x20\x27endTime\x27\x20and\x20\x27duration\x27\x20can\x20be\x20set.','getMetricsCommand','1645616SILMPl','\x20to\x20get\x20logs\x20from','conflicts','slice','forEach',',\x20metric\x20types:\x20','join','name','pct','getStandardMetricsCommand','Deployment\x20id,\x20example:\x20my-service-54785f4','--noDefaults','Container\x20to\x20exec\x20into\x20(logs\x20from\x20all\x20containers\x20will\x20be\x20shown\x20if\x20not\x20specified)','getTime','build-','6192MPdsUR','--container\x20--containerId\x20[NAME]','option','clear','askForBuild','message','askForProject','980UlNxxW','printMetricsSingle','Metrics\x20for\x20','\x20for\x20container:\x20','--build\x20--buildId\x20[buildId]','format','Which\x20metric\x20type\x20to\x20fetch','columns','-o,\x20--output\x20[output]','toISOString','getCurrentServiceName','deploymentId','--startTime\x20<timestamp>','metricsApiClient','values','-t,\x20--metricTypes\x20<metricTypes...>','apiContext','askForService','metricsRange','Get\x20metrics\x20before\x20this\x20timestamp,\x20','refreshInterval','description','Length\x20of\x20timespan\x20in\x20seconds.\x20Only\x20valid\x20if\x20not\x20both,\x20startTime\x20and\x20endTime\x20are\x20set','container\x20','error','noDefaults','assign','--project\x20--projectId\x20[NAME]',',\x20duration:\x20','toFixed','handleError','Job\x20run\x20id,\x20example:\x20162b1977-6636-4000-929b-cc265b862ff0','metricUnit','alias'];a13X=function(){return X6;};return a13X();}function a13j(X,j){const V=a13X();return a13j=function(H,O){H=H-0xd5;let F=V[H];return F;},a13j(X,j);}(function(X,j){const m=a13j,V=X();while(!![]){try{const H=parseInt(m(0x144))/0x1+parseInt(m(0xee))/0x2+parseInt(m(0x14b))/0x3+parseInt(m(0xff))/0x4+parseInt(m(0x115))/0x5*(parseInt(m(0x10e))/0x6)+-parseInt(m(0xe9))/0x7+-parseInt(m(0xd8))/0x8;if(H===j)break;else V['push'](V['shift']());}catch(O){V['push'](V['shift']());}}}(a13X,0x3cac0));import{ApiClient,MetricType}from'@northflank/js-client';import{assertContextExisting,customUserAgent,error,getCommand,parseDateInput,tsHint,warning}from'../utils.js';import{InquirerHelper}from'../inquirer-helper.js';import{Option}from'commander';import{downSampleData,getAsciiChart}from'../formatting/terminal-chart.js';import{printAsTable,printResponse}from'../formatting/console-format-helpers.js';import a13V from'chalk';export class CliMetrics{[a13k(0x125)];[a13k(0x14f)];[a13k(0x122)];[a13k(0xfb)];[a13k(0x129)]=0x2710;[a13k(0x108)]=(X,j)=>{const I=a13k,V=getCommand(!![])[I(0x106)]((j?'build-':'')+I(0x14c))[I(0x136)]((j?I(0x10d):'')+'metric')[I(0x12a)](I(0xf3)+X)[I(0x110)](I(0x130),'Project\x20for\x20logs')[I(0x110)]('--'+X+I(0xf2)+X+I(0xda),X['charAt'](0x0)[I(0xfa)]()+X[I(0x102)](0x1)+I(0x100))[I(0x110)](I(0x10f),I(0x10b))['option'](I(0x121),'Get\x20metrics\x20after\x20this\x20timestamp,\x20'+tsHint,parseDateInput)[I(0x110)]('--endTime\x20<timestamp>',I(0x128)+tsHint,parseDateInput)[I(0x110)]('--duration\x20[duration]',I(0x12b))[I(0x145)](new Option(I(0x124),I(0x11b))[I(0xd9)](Object[I(0x123)](MetricType)))[I(0x145)](new Option(I(0xdf),'Get\x20metrics\x20at\x20this\x20exact\x20timestamp,\x20if\x20no\x20timestamp\x20set\x20most\x20recent\x20time\x20is\x20used.\x20'+tsHint)['argParser'](parseDateInput)[I(0x101)]([I(0xe5),I(0x148)]))[I(0x110)](I(0x10a),'Don\x27t\x20use\x20context\x20default\x20values,\x20explicitly\x20use\x20options\x20or\x20ask.',![])['addOption'](new Option(I(0x11d),'Output\x20formatting.\x20Will\x20use\x20advanced\x20formatting\x20by\x20default.')[I(0xd9)](Object[I(0x123)]([I(0x11a),I(0x146),I(0xe0)])));if(j)V[I(0x110)](I(0x119),'Build\x20to\x20get\x20logs\x20from');if(X===I(0xf4))V[I(0x110)](I(0xe3),I(0x134));if(X===I(0x13f))V[I(0x110)](I(0xe4),I(0x109));return V;};constructor(X,j){const K=a13k;this[K(0x125)]=X,this[K(0x14f)]=new ApiClient(X,{'throwErrorOnHttpErrorCode':!![],'customUserAgent':customUserAgent,'agent':j}),this['metricsApiClient']=this[K(0x14f)],this['inquirerHelper']=new InquirerHelper(this[K(0x14f)]);}[a13k(0xfe)](X,j=![]){const D=a13k,V=async(P,o)=>{const L=a13j,C=o[L(0x12e)],{apiContext:B,inquirerHelper:s}=this;switch(X){case L(0x13f):{const S=C?undefined:B[L(0x11f)]();return o[L(0x138)]||S||await s[L(0x126)](P)();}case L(0xf4):{const y=C?undefined:B[L(0x11f)]();return o['jobId']||y||await s['askForJob'](P)();}case L(0xe7):{const e=C?undefined:B['getCurrentServiceName']();return o[L(0xf0)]||e||await s[L(0xe8)](P)();}}},H=async(P,o,C)=>{const a=a13j;if(j)return C['buildId']||await this[a(0xfb)][a(0x112)](P,X===a(0x13f)?o:undefined,X===a(0xf4)?o:undefined,!![])();return undefined;},O=async(P,o,C)=>{const r=a13j;if(!j&&C['containerId']!==undefined){if(C['containerId']!==!![])return C['containerId'];return await this['inquirerHelper'][r(0x14a)](P,X===r(0x13f)?o:undefined,X===r(0xf4)?o:undefined,!![])();}return undefined;},F=async(P,o,C)=>{const R=a13j;if(X==='job')return C[R(0xed)]||await this[R(0xfb)][R(0xf5)](o,P,!![])();return undefined;},h=async(P,o,C)=>{const n=a13j;if(X==='service'){if(C['deploymentId']!==!![])return C[n(0x120)];return C[n(0x120)];}return undefined;};return this[D(0x108)](X,j)['action'](async P=>{const Y=D,{noDefaults:o,projectId:C,duration:B,timestamp:s,output:S,startTime:y,endTime:e,metricTypes:A,quiet:l}=P;assertContextExisting(this['apiClient']);if(y&&e&&B)throw new Error(Y(0xfd));const {apiContext:T,inquirerHelper:W,metricsApiClient:v}=this,G=o?undefined:T[Y(0xf1)](),d=C||G||await W[Y(0x114)](),x=await V(d,P),M=await H(d,x,P),g=await F(d,x,P),J=await h(d,x,P),b=await O(d,x,P),E={'projectId':d,'entityId':x},t={'containerName':b,'startTime':y,'endTime':e,'duration':B,'timestamp':s,'metricTypes':A,'runId':g,'buildId':M,'deploymentId':J,'isBuild':j??![]},Z=!(y||e||B);if(!l&&S!==Y(0xe0)&&S!==Y(0xea)&&S!==Y(0x146))this[Y(0x152)](X,x,d,t,l);if(Z){if(S!==undefined){const w=await v['metrics']['metricsSingle'](E,t,X);this[Y(0x133)](w),printResponse(S,w[Y(0x140)]);}else[...Array(process['stdout'][Y(0xdc)]-0x1)]['forEach']((N,p)=>p===0x0?console[Y(0x13b)](Y(0xf7)):console[Y(0x13b)]()),await this[Y(0xe1)](E,t,X)(),setInterval(this['printMetricsTable'](E,t,X),this[Y(0x129)]),await new Promise(N=>setTimeout(N,this['refreshInterval']*0x64));}else{const N=await v[Y(0x14c)][Y(0x127)](E,t,X);this[Y(0x133)](N),S!==undefined?printResponse(S,N[Y(0x140)]):this[Y(0x13d)](y,e??new Date())(N[Y(0x140)]);}process['exit']();});}[a13k(0x116)](X){const f=a13k,j=(O,F)=>{const u=a13j;if(!F?.[u(0xdb)])u(0x137);const h=O[u(0x135)]===u(0x107)?'%':O['metricUnit'];return''+Number(F?.['value'])[u(0x132)](0x3)+h;},V=O=>{const Q=a13j;if(!O?.['ts'])Q(0x137);return O['ts'][Q(0xef)]()[Q(0x14d)]('\x20')[0x0];},H={};Object[f(0x150)](X)[f(0x103)](O=>{const z=f,{values:F,metricInfo:h}=X[O];return F[z(0x103)](P=>{const U=z,o=P[U(0xf6)][U(0xde)];Object[U(0x12f)](H,{[o]:{...H?.[o],[U(0xe2)]:V(P[U(0x140)]?.[0x0]),'containerId':o,[h[U(0xec)]]:j(h,P['data']?.[0x0])}});});}),printAsTable(Object['values'](H),f(0xfc));}[a13k(0x13d)]=(X,j)=>{return V=>{const q=a13j,H=Object[q(0x150)](V)['flatMap'](O=>{const c=q,{values:F,metricInfo:h}=V[O],{metricUnit:P,metricResolution:o}=h;return F[c(0xf8)](C=>{const i=c,{metadata:B,data:s}=C,S=j?j?.[i(0x10c)]()>new Date()['getTime']()?new Date():j:undefined,y=new Date(s?.[0x0]?.['ts']),e=new Date(s?.[s[i(0x147)]-0x1]?.['ts']),A=this[i(0xd7)](X,y,o),l=this['getPaddingDataEnd'](S,e,o),T=[...A,...s,...l],W=T[i(0xf8)](b=>[new Date(b['ts'])[i(0x139)](),Number(b[i(0xdb)])])['filter'](b=>!Number['isNaN'](b[0x0])),v=Math[i(0x13a)](Math[i(0xd6)](process[i(0xd5)][i(0x11c)]-0xa,0xa),0x64),G=Math[i(0x13a)](Math[i(0xd6)](process['stdout'][i(0xdc)]-0x9,0xa),0xf),d=P===i(0x107)?0x64:undefined,x=P==='pct'?'%':P,M=downSampleData(W,v),g=M[i(0xf8)](b=>b[0x1]),J={'min':0x0,'height':G,'max':d,'unit':x,'startTs':X??y,'endTs':S??e};return{'dataSeries':g,'metadata':B,'chartOpts':J,'metricInfo':h};});})['flat']();if(H[q(0x147)]===0x0)warning(q(0x149));else H[q(0x103)](O=>{const X0=q,{dataSeries:F,metadata:h,chartOpts:P,metricInfo:o}=O,{containerId:C,volumeId:B}=h,s=B?',\x20volume:\x20'+B:'';console[X0(0x13b)](o[X0(0xec)]+X0(0x118)+a13V[X0(0x142)](C)+s),console[X0(0x13b)](getAsciiChart(F,P));});};};[a13k(0xd7)](X,j,V){const X1=a13k,H=h=>new Date(h['getTime']()-O),O=V*0x3e8;if(!X)return[];if(!j)return[];if(H(j)['getTime']()<X[X1(0x10c)]())return[];const F=[{'ts':H(j),'value':0x0}];while(H(F[F[X1(0x147)]-0x1]['ts'])[X1(0x10c)]()<=X[X1(0x10c)]()){F[X1(0x14e)]({'ts':H(F[F[X1(0x147)]-0x1]['ts']),'value':0x0});}return F;}[a13k(0x143)](X,j,V){const X2=a13k,H=h=>new Date(h[X2(0x10c)]()+O),O=V*0x3e8;if(!X)return[];if(!j)return[];if(H(j)[X2(0x10c)]()>X[X2(0x10c)]())return[];const F=[{'ts':H(j),'value':0x0}];while(H(F[F[X2(0x147)]-0x1]['ts'])[X2(0x10c)]()<=X[X2(0x10c)]()){F['push']({'ts':H(F[F[X2(0x147)]-0x1]['ts']),'value':0x0});}return F;}['printMetricsTable']=(X,j,V)=>async()=>{const X3=a13k;try{const H=await this[X3(0x122)][X3(0x14c)][X3(0x151)](X,j,V);console['clear']();if(H[X3(0x12d)])error(X3(0xf9)+H[X3(0x12d)]['message']);else this['printMetricsSingle'](H['data']);}catch(O){console[X3(0x111)](),error(X3(0xf9)+O[X3(0x113)]);}};[a13k(0x133)]=X=>{const X4=a13k;if(X[X4(0x12d)]){const j=JSON[X4(0x13e)](X[X4(0x12d)][X4(0xeb)]);throw new Error('Error\x20while\x20fetching\x20metrics\x20entries:\x20'+X[X4(0x12d)][X4(0x113)]+'\x20'+j);}};[a13k(0x152)]=(X,j,V,H,O)=>{const X5=a13k;if(O===!![])return;const {metricTypes:F,endTime:h,startTime:P,duration:o,containerId:C}=H,B=P?X5(0xe6)+P[X5(0x11e)]():'',s=h?X5(0x13c)+h[X5(0x11e)]():'',S=o?X5(0x131)+o+X5(0xdd):'',y=C?X5(0x12c)+a13V[X5(0x142)](C):X5(0x141),e=X+'\x20'+a13V['bold'](j)+'\x20in\x20project\x20'+a13V[X5(0x142)](V),A=''+B+s+S,l=F?X5(0x104)+F?.[X5(0x105)](','):'';console[X5(0x13b)](X5(0x117)+y+'\x20of\x20'+e+l+A);};}