{ "version": 3, "sources": ["../ui/app/mn.admin.service.js", "../ui/app/mn.pipes.js"], "sourcesContent": ["/*\nCopyright 2020-Present Couchbase, Inc.\n\nUse of this software is governed by the Business Source License included in\nthe file licenses/BSL-Couchbase.txt. As of the Change Date specified in that\nfile, in accordance with the Business Source License, use of this software will\nbe governed by the Apache License, Version 2.0, included in the file\nlicenses/APL2.txt.\n*/\nimport {Injectable} from '@angular/core';\n\nimport {BehaviorSubject, combineLatest} from 'rxjs';\nimport {pluck, switchMap, shareReplay, map,\n distinctUntilChanged, withLatestFrom,\n filter} from 'rxjs/operators';\nimport {HttpClient, HttpParams} from '@angular/common/http';\nimport * as R from 'ramda';\n\nimport {singletonGuard} from './mn.core.js';\nimport {MnPrettyVersion} from './mn.pipes.js';\nimport {MnPoolsService} from './mn.pools.service.js';\nimport {MnHttpRequest} from './mn.http.request.js';\n\nexport {MnAdminService};\n\n// counterpart of ns_heart:effective_cluster_compat_version/0\nfunction encodeCompatVersion(major, minor) {\n return (major < 2) ? 1 : major * 0x10000 + minor;\n}\n\nclass MnAdminService {\n static get annotations() { return [\n new Injectable()\n ]}\n\n static get parameters() { return [\n HttpClient,\n MnPrettyVersion,\n MnPoolsService\n ]}\n\n constructor(http, mnPrettyVersionPipe, mnPoolsService) {\n singletonGuard(MnAdminService);\n\n this.stream = {};\n this.http = http;\n this.stream.etag = new BehaviorSubject();\n\n this.stream.whoami =\n (new BehaviorSubject()).pipe(\n switchMap(this.getWhoami.bind(this)),\n shareReplay({refCount: true, bufferSize: 1})\n );\n\n // this.stream.enableInternalSettings =\n // uiRouter.globals.params$.pipe(pluck(\"enableInternalSettings\"));\n\n // this.stream.getPoolsDefault =\n // this.stream.etag.pipe(switchMap(this.getPoolsDefault.bind(this)),\n // shareReplay({refCount: true, bufferSize: 1}));\n\n this.stream.getPoolsDefault = new BehaviorSubject({\n buckets: {\n uri: \"/pools/default/buckets\"\n }\n });\n\n this.stream.getNodes =\n this.stream.getPoolsDefault.pipe(pluck(\"nodes\"));\n\n this.stream.nodesByOtp = this.stream.getNodes\n .pipe(map(R.groupBy(R.prop('otpNode'))));\n\n this.stream.isGroupsAvailable =\n this.stream.getPoolsDefault.pipe(pluck(\"isGroupsAvailable\"), distinctUntilChanged());\n\n this.stream.isStrippingPort =\n this.stream.getPoolsDefault.pipe(pluck(\"isStrippingPort\"), distinctUntilChanged());\n\n this.stream.failedOverNodes = this.stream.getNodes.pipe(\n map(nodes => nodes.filter(node => node.clusterMembership === \"inactiveFailed\")));\n\n this.stream.onlyActiveNodes = this.stream.getNodes.pipe(\n map(nodes => nodes.filter(node => node.clusterMembership === \"active\")));\n\n this.stream.allActiveNodes =\n combineLatest(this.stream.failedOverNodes, this.stream.onlyActiveNodes)\n .pipe(map(([failedOver, onlyActive]) => failedOver.concat(onlyActive)));\n\n this.stream.reallyActiveNodes = this.stream.onlyActiveNodes\n .pipe(map(nodes => nodes.filter(node => !node.pendingEject)));\n\n this.stream.reallyActiveKVNodes = this.stream.reallyActiveNodes\n .pipe(map(nodes => nodes.filter(node => node.services.includes('kv'))));\n\n this.stream.isRebalancing =\n this.stream.getPoolsDefault.pipe(\n map(R.pipe(R.propEq('rebalanceStatus', 'none'), R.not)), distinctUntilChanged());\n\n this.stream.isBalanced =\n this.stream.getPoolsDefault.pipe(pluck(\"balanced\"), distinctUntilChanged());\n\n this.stream.maxBucketCount =\n this.stream.getPoolsDefault.pipe(pluck(\"maxBucketCount\"), distinctUntilChanged());\n\n this.stream.uiSessionTimeout =\n this.stream.getPoolsDefault.pipe(pluck(\"uiSessionTimeout\"), distinctUntilChanged());\n\n this.stream.isClusterEncryptionEnabled =\n this.stream.getPoolsDefault.pipe(pluck(\"clusterEncryptionLevel\"),\n map(level => level !== \"none\"),\n distinctUntilChanged(),\n shareReplay({refCount: true, bufferSize: 1}));\n\n this.stream.failoverWarnings =\n this.stream.getPoolsDefault.pipe(pluck(\"failoverWarnings\"),\n distinctUntilChanged(R.equals),\n shareReplay({refCount: true, bufferSize: 1}));\n\n this.stream.ldapEnabled =\n this.stream.getPoolsDefault.pipe(pluck(\"ldapEnabled\"),\n distinctUntilChanged(),\n shareReplay({refCount: true, bufferSize: 1}));\n\n this.stream.implementationVersion =\n (new BehaviorSubject()).pipe(switchMap(this.getVersion.bind(this)),\n pluck(\"implementationVersion\"),\n shareReplay({refCount: true, bufferSize: 1}));\n\n this.stream.majorMinorVersion =\n this.stream.implementationVersion.pipe(\n map(function (implementationVersion) {\n return implementationVersion.split('.').splice(0,2).join('.');\n })\n );\n\n this.stream.prettyVersion =\n this.stream.implementationVersion.pipe(\n map(mnPrettyVersionPipe.transform.bind(mnPrettyVersionPipe)));\n\n this.stream.isMixedMode =\n this.stream.getPoolsDefault.pipe(pluck(\"compat\"),\n filter(versions => versions != undefined),\n map(versions => Object.values(versions).some(v => v != true)),\n shareReplay({refCount: true, bufferSize: 1}));\n\n this.stream.thisNode =\n this.stream.getPoolsDefault.pipe(pluck(\"nodes\"),\n map(R.find(R.propEq('thisNode', true))));\n\n this.stream.capiBase = this.stream.thisNode\n .pipe(filter(node => node != undefined),\n map(node => node.addressFamily == 'inet6' ? node.couchApiBaseHTTPS : node.couchApiBase));\n\n this.stream.memoryQuotas =\n this.stream.getPoolsDefault.pipe(\n withLatestFrom(mnPoolsService.stream.quotaServices),\n map(mnPoolsService.pluckMemoryQuotas.bind(mnPoolsService)));\n\n this.stream.clusterName =\n this.stream.getPoolsDefault.pipe(pluck(\"clusterName\"));\n\n this.stream.clusterCompatibility =\n this.stream.thisNode.pipe(pluck(\"clusterCompatibility\"), distinctUntilChanged());\n\n this.stream.prettyClusterCompat =\n this.stream.clusterCompatibility.pipe(map(function (version) {\n var major = Math.floor(version / 0x10000);\n var minor = version - (major * 0x10000);\n return major.toString() + \".\" + minor.toString();\n }));\n\n this.stream.compatVersion51 =\n this.stream.clusterCompatibility.pipe(map(R.flip(R.gte)(encodeCompatVersion(5, 1))));\n\n this.stream.compatVersion55 =\n this.stream.clusterCompatibility.pipe(map(R.flip(R.gte)(encodeCompatVersion(5, 5))));\n\n this.stream.compatVersion65 =\n this.stream.clusterCompatibility.pipe(map(R.flip(R.gte)(encodeCompatVersion(6, 5))));\n\n this.stream.compatVersion70 =\n this.stream.clusterCompatibility.pipe(map(R.flip(R.gte)(encodeCompatVersion(7, 0))));\n\n this.stream.isNotCompatMode =\n combineLatest(this.stream.compatVersion51, this.stream.compatVersion55)\n .pipe(map(R.all(R.equals(true))));\n\n this.stream.postPoolsDefaultValidation =\n new MnHttpRequest(this.postPoolsDefault(true).bind(this)).addSuccess().addError();\n\n this.stream.postPoolsDefault =\n new MnHttpRequest(this.postPoolsDefault(false).bind(this)).addSuccess().addError();\n\n this.stream.hideNavSidebar = new BehaviorSubject(false);\n\n }\n\n getVersion() {\n return this.http.get(\"/versions\");\n }\n\n getWhoami() {\n return this.http.get('/whoami');\n }\n\n getPoolsDefault(etag) {\n return this.http.get('/pools/default', {\n params: new HttpParams().set('waitChange', 10000).set('etag', etag || \"\")\n });\n }\n\n postPoolsDefault(validate) {\n return function (data) {\n return this.http.post('/pools/default', data, {\n params: new HttpParams().set(\"just_validate\", validate ? 1 : 0)\n });\n }\n }\n}\n", "/*\nCopyright 2020-Present Couchbase, Inc.\n\nUse of this software is governed by the Business Source License included in\nthe file licenses/BSL-Couchbase.txt. As of the Change Date specified in that\nfile, in accordance with the Business Source License, use of this software will\nbe governed by the Apache License, Version 2.0, included in the file\nlicenses/APL2.txt.\n*/\n\nimport {Pipe} from '@angular/core';\nimport {DecimalPipe} from '@angular/common';\nimport {is} from 'ramda';\nimport {map} from 'rxjs/operators';\n\nimport {MnHelperService} from './mn.helper.service.js';\nimport {MnAdminService} from './mn.admin.service.js';\nimport {servicesEnterprise} from './constants/constants.js';\n\nexport {\n MnParseVersion,\n MnMBtoBytes,\n MnBytesToMB,\n MnObjectKeys,\n MnPrettyVersion,\n MnFormatProgressMessage,\n MnFormatStorageModeError,\n MnPrepareQuantity,\n MnFormatUptime,\n MnFormatQuantity,\n MnFormatWarmupMessage,\n MnBucketsType,\n MnConflictResolutionType,\n MnTruncate,\n MnTruncateTo3Digits,\n MnFormatServices,\n MnOrderServices,\n MnStripPortHTML\n}\n\nclass MnTruncate {\n static get annotations() { return [\n new Pipe({name: \"mnTruncate\"})\n ]}\n\n transform(value, limit, trail, isLeft) {\n trail = trail != undefined ? trail : \"...\";\n limit = limit || 15;\n if (value.length > limit) {\n if (isLeft) {\n return trail + value.substring(value.length - limit, value.length);\n } else {\n return value.substring(0, limit) + trail;\n }\n } else {\n return value;\n }\n }\n}\n\nclass MnTruncateTo3Digits {\n static get annotations() { return [\n new Pipe({name: \"mnTruncateTo3Digits\"})\n ]}\n\n transform(value, minScale, roundMethod) {\n if (!value) {\n return 0;\n }\n\n let scale = [100, 10, 1, 0.1, 0.01, 0.001].find(v => value >= v) || 0.0001;\n if (minScale != undefined && minScale > scale) {\n scale = minScale;\n }\n scale = 100 / scale;\n return Math[roundMethod || \"round\"](value * scale)/scale;\n }\n}\n\nclass MnParseVersion {\n static get annotations() { return [\n new Pipe({name: \"mnParseVersion\"})\n ]}\n\n transform(str) {\n if (!str) {\n return;\n }\n // Expected string format:\n // {release version}-{build #}-{Release type or SHA}-{enterprise / community}\n // Example: \"1.8.0-9-ga083a1e-enterprise\"\n var a = str.split(/[-_]/);\n if (a.length === 3) {\n // Example: \"1.8.0-9-enterprise\"\n // {release version}-{build #}-{enterprise / community}\n a.splice(2, 0, undefined);\n }\n a[0] = (a[0].match(/[0-9]+\\.[0-9]+\\.[0-9]+/) || [\"0.0.0\"])[0];\n a[1] = a[1] || \"0\";\n // a[2] = a[2] || \"unknown\";\n // We append the build # to the release version when we display in the UI so that\n // customers think of the build # as a descriptive piece of the version they're\n // running (which in the case of maintenance packs and one-off's, it is.)\n a[3] = (a[3] && (a[3].substr(0, 1).toUpperCase() + a[3].substr(1))) || \"DEV\";\n return a; // Example result: [\"1.8.0-9\", \"9\", \"ga083a1e\", \"Enterprise\"]\n }\n}\n\n\nclass MnMBtoBytes {\n static get annotations() { return [\n new Pipe({name: \"mnMBtoBytes\"})\n ]}\n\n static get parameters() { return [\n MnHelperService\n ]}\n\n constructor(mnHelperService) {\n this.IEC = mnHelperService.IEC;\n }\n\n transform(MB) {\n return MB * this.IEC.Mi;\n }\n}\n\n\nclass MnBytesToMB {\n static get annotations() { return [\n new Pipe({name: \"mnBytesToMB\"})\n ]}\n\n static get parameters() { return [\n MnHelperService\n ]}\n\n constructor(mnHelperService) {\n this.IEC = mnHelperService.IEC;\n }\n\n transform(bytes) {\n return Math.floor(bytes / this.IEC.Mi);\n }\n}\n\n\nclass MnObjectKeys {\n static get annotations() { return [\n new Pipe({name: \"mnObjectKeys\"})\n ]}\n\n transform(object) {\n if (object) {\n return Object.keys(object);\n } else {\n return [];\n }\n }\n}\n\n\nclass MnPrettyVersion {\n static get annotations() { return [\n new Pipe({name: \"mnPrettyVersion\"})\n ]}\n\n static get parameters() { return [\n MnParseVersion\n ]}\n\n constructor(mnParseVersion) {\n this.mnParseVersion = mnParseVersion;\n }\n\n transform(str, full) {\n if (!str) {\n return;\n }\n var a = this.mnParseVersion.transform(str);\n // Example default result: \"Enterprise Edition 1.8.0-7 build 7\"\n // Example full result: \"Enterprise Edition 1.8.0-7 build 7-g35c9cdd\"\n var suffix = \"\";\n if (full && a[2]) {\n suffix = '-' + a[2];\n }\n return [a[3], \"Edition\", a[0], \"build\", a[1] + suffix].join(' ');\n }\n}\n\n\nclass MnFormatProgressMessage {\n static get annotations() { return [\n new Pipe({name: \"mnFormatProgressMessage\"})\n ]}\n\n addNodeCount(perNode) {\n var serversCount = Object.keys(perNode || {}).length;\n return serversCount + \" \" + (serversCount === 1 ? 'node' : 'nodes');\n }\n\n transform(task) {\n switch (task.type) {\n case \"indexer\":\n return \"building view index \" + task.bucket + \"/\" + task.designDocument;\n case \"global_indexes\":\n return \"building index \" + task.index + \" on bucket \" + task.bucket;\n case \"view_compaction\":\n return \"compacting view index \" + task.bucket + \"/\" + task.designDocument;\n case \"bucket_compaction\":\n return \"compacting bucket \" + task.bucket;\n case \"loadingSampleBucket\":\n return \"loading sample: \" + task.bucket;\n case \"orphanBucket\":\n return \"orphan bucket: \" + task.bucket;\n case \"clusterLogsCollection\":\n return \"collecting logs from \" + this.addNodeCount(task.perNode);\n case \"rebalance\":\n return (task.subtype == 'gracefulFailover') ?\n \"failing over 1 node\" :\n (\"rebalancing \" + this.addNodeCount(task.perNode));\n }\n }\n}\n\n\nclass MnFormatStorageModeError {\n static get annotations() { return [\n new Pipe({name: \"mnFormatStorageModeError\"})\n ]}\n\n transform(error) {\n if (!error) {\n return;\n }\n var errorCode =\n error.indexOf(\"Storage mode cannot be set to\") > -1 ? 1 :\n error.indexOf(\"storageMode must be one of\") > -1 ? 2 :\n 0;\n switch (errorCode) {\n case 1:\n return \"please choose another index storage mode\";\n case 2:\n return \"please choose an index storage mode\";\n default:\n return error;\n }\n }\n}\n\n\n\nclass MnPrepareQuantity {\n static get annotations() { return [\n new Pipe({name: \"mnPrepareQuantity\"})\n ]}\n\n transform(value, K) {\n K = K || 1024;\n\n var M = K*K;\n var G = M*K;\n var T = G*K;\n\n if (K !== 1024 && K !== 1000) {\n throw new Error(\"Unknown number system\");\n }\n\n var t = ([[T,'T'],[G,'G'],[M,'M'],[K,'K']]).find(function (t) {\n return value >= t[0];\n }) || [1, ''];\n\n if (K === 1024) {\n t[1] += t[1] ? 'iB' : 'B';\n }\n\n return t;\n }\n}\n\n\n\nclass MnFormatUptime {\n static get annotations() { return [\n new Pipe({name: \"mnFormatUptime\"})\n ]}\n\n transform(seconds, precision) {\n precision = precision || 8;\n\n var arr = [[86400, \"days\", \"day\"],\n [3600, \"hours\", \"hour\"],\n [60, \"minutes\", \"minute\"],\n [1, \"seconds\", \"second\"]];\n\n var rv = [];\n\n arr.forEach(function (item) {\n var period = item[0];\n var value = (seconds / period) >> 0;\n seconds -= value * period;\n if (value) {\n rv.push(String(value) + ' ' + (value > 1 ? item[1] : item[2]));\n }\n return !!--precision;\n });\n return rv.join(', ');\n }\n}\n\n\n\nclass MnFormatQuantity {\n static get annotations() { return [\n new Pipe({name: \"mnFormatQuantity\"})\n ]}\n\n static get parameters() { return [\n MnPrepareQuantity,\n DecimalPipe,\n MnTruncateTo3Digits\n ]}\n\n constructor(mnPrepareQuantity, decimalPipe, mnTruncateTo3Digits) {\n this.mnPrepareQuantity = mnPrepareQuantity;\n this.decimalPipe = decimalPipe;\n this.mnTruncateTo3Digits = mnTruncateTo3Digits;\n }\n\n transform(value, numberSystem, spacing) {\n if (!value && !is(Number, value)) {\n return value;\n }\n if (!spacing) {\n spacing = '';\n }\n if (numberSystem === 1000 && value <= 1100 && value % 1 === 0) { // MB-11784\n return value;\n }\n\n var t = this.mnPrepareQuantity.transform(value, numberSystem);\n return [this.mnTruncateTo3Digits.transform(value/t[0], undefined, 'floor'), spacing, t[1]].join('');\n }\n}\n\nclass MnFormatWarmupMessage {\n static get annotations() { return [\n new Pipe({name: \"mnFormatWarmupMessage\"})\n ]}\n\n transform(task) {\n var message = task.stats.ep_warmup_state;\n switch (message) {\n case \"loading keys\":\n return message + \" (\" + task.stats.ep_warmup_key_count + \" / \" + task.stats.ep_warmup_estimated_key_count + \")\";\n case \"loading data\":\n return message + \" (\" + task.stats.ep_warmup_value_count + \" / \" + task.stats.ep_warmup_estimated_value_count + \")\";\n default:\n return message;\n }\n }\n}\n\n\n\nclass MnBucketsType {\n static get annotations() { return [\n new Pipe({name: \"mnBucketsType\"})\n ]}\n\n transform(type) {\n switch (type) {\n case \"membase\":\n return \"Couchbase\";\n case \"ephemeral\":\n case \"memcached\":\n return type.charAt(0).toUpperCase() + type.slice(1);\n }\n }\n}\n\nclass MnConflictResolutionType {\n static get annotations() { return [\n new Pipe({name: \"mnConflictResolutionType\"})\n ]}\n\n transform(type) {\n switch (type) {\n case 'lww':\n return 'Timestamp';\n case \"seqno\":\n return 'Sequence Number';\n case \"custom\":\n return 'Custom';\n }\n }\n}\n\n\nclass MnFormatServices {\n static get annotations() { return [\n new Pipe({name: \"mnFormatServices\"})\n ]}\n\n transform(service) {\n switch (service) {\n case 'kv': return 'Data';\n case 'query':\n case 'n1ql': return 'Query';\n case 'index': return 'Index';\n case 'fts': return 'Search';\n case 'eventing': return 'Eventing';\n case 'cbas': return 'Analytics';\n case 'backup': return 'Backup';\n default: return service;\n }\n }\n}\n\nclass MnOrderServices {\n static get annotations() { return [\n new Pipe({name: \"mnOrderServices\"})\n ]}\n\n transform(services) {\n return services.slice().sort((a, b) =>\n servicesEnterprise.indexOf(a) - servicesEnterprise.indexOf(b));\n }\n}\n\nclass MnStripPortHTML {\n static get annotations() { return [\n new Pipe({name: \"mnStripPortHTML\"})\n ]}\n\n static get parameters() { return [\n MnAdminService\n ]}\n\n constructor(mnAdminService) {\n this.mnAdminService = mnAdminService;\n }\n\n transform(hostname) {\n return this.mnAdminService.stream.isStrippingPort\n .pipe(map((v) => v ? hostname.replace(/:8091$/, '') : hostname));\n }\n}\n"], "mappings": "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", "names": [] }