@osaas/cli 4.26.2 → 4.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/cmd.d.ts.map +1 -1
- package/dist/admin/cmd.js +8 -8
- package/dist/admin/cmd.js.map +1 -1
- package/dist/admin/instance.d.ts +1 -0
- package/dist/admin/instance.d.ts.map +1 -1
- package/dist/admin/instance.js +13 -1
- package/dist/admin/instance.js.map +1 -1
- package/package.json +8 -8
- package/src/admin/cmd.ts +10 -9
- package/src/admin/instance.ts +28 -2
package/dist/admin/cmd.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cmd.d.ts","sourceRoot":"","sources":["../../src/admin/cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"cmd.d.ts","sourceRoot":"","sources":["../../src/admin/cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsBpC,MAAM,CAAC,OAAO,UAAU,QAAQ,YAwO/B"}
|
package/dist/admin/cmd.js
CHANGED
|
@@ -60,8 +60,8 @@ function cmdAdmin() {
|
|
|
60
60
|
});
|
|
61
61
|
admin
|
|
62
62
|
.command('remove-exceeding-tenant-instances')
|
|
63
|
-
.description('
|
|
64
|
-
.option('--apply', 'Actually
|
|
63
|
+
.description('Suspend all instances for all tenants with a negative usage token balance')
|
|
64
|
+
.option('--apply', 'Actually suspend instances, otherwise just a dry run')
|
|
65
65
|
.action(async (options, command) => {
|
|
66
66
|
try {
|
|
67
67
|
const globalOpts = command.optsWithGlobals();
|
|
@@ -69,26 +69,26 @@ function cmdAdmin() {
|
|
|
69
69
|
const tenantPlanMap = await (0, money_1.getTenantPlanMap)(environment);
|
|
70
70
|
const tokenCounts = await (0, money_1.getTenantTokenCounts)(environment);
|
|
71
71
|
const tenantsExceeding = tokenCounts.filter((tenant) => tenant.remainingTokens < -200);
|
|
72
|
-
let
|
|
72
|
+
let instancesSuspended = 0;
|
|
73
73
|
const tenantsExceedingCount = tenantsExceeding.length;
|
|
74
74
|
for (const tenant of tenantsExceeding) {
|
|
75
75
|
if (tenantPlanMap[tenant.tenantId]?.planType === 'FREE') {
|
|
76
76
|
const instancesToRemove = await (0, instance_1.getInstancesToRemove)(tenant.tenantId, environment);
|
|
77
77
|
if (instancesToRemove.length > 0) {
|
|
78
78
|
console.log(`Tenant ${tenant.tenantId} has a negative or low token balance of ${tenant.remainingTokens} tokens and is on the 'FREE' plan`);
|
|
79
|
-
console.log('
|
|
79
|
+
console.log('Suspending all instances for this tenant...');
|
|
80
80
|
for (const item of instancesToRemove) {
|
|
81
81
|
console.log(` - ${item.serviceId}: ${item.instance}`);
|
|
82
82
|
if (options.apply) {
|
|
83
|
-
await (0, instance_1.
|
|
84
|
-
|
|
85
|
-
console.log('
|
|
83
|
+
await (0, instance_1.suspendInstanceForTenant)(tenant.tenantId, item.serviceId, item.instance, environment);
|
|
84
|
+
instancesSuspended++;
|
|
85
|
+
console.log('Suspended');
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
|
-
console.log(`${tenantsExceedingCount} / ${Object.keys(tenantPlanMap).length} tenants below threshold,
|
|
91
|
+
console.log(`${tenantsExceedingCount} / ${Object.keys(tenantPlanMap).length} tenants below threshold, suspended ${instancesSuspended} instances`);
|
|
92
92
|
}
|
|
93
93
|
catch (err) {
|
|
94
94
|
console.log(err.message);
|
package/dist/admin/cmd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cmd.js","sourceRoot":"","sources":["../../src/admin/cmd.ts"],"names":[],"mappings":";;AAAA,yCAAoC;AACpC,mCAAsC;AACtC,oDAM4B;AAC5B,
|
|
1
|
+
{"version":3,"file":"cmd.js","sourceRoot":"","sources":["../../src/admin/cmd.ts"],"names":[],"mappings":"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"}
|
package/dist/admin/instance.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export declare function listInstancesForTenant(tenantId: string, serviceId: string, environment: string): Promise<string[]>;
|
|
2
2
|
export declare function removeInstanceForTenant(tenantId: string, serviceId: string, name: string, environment: string): Promise<void>;
|
|
3
|
+
export declare function suspendInstanceForTenant(tenantId: string, serviceId: string, name: string, environment: string, reason?: string): Promise<void>;
|
|
3
4
|
export declare function getInstancesToRemove(tenantId: string, environment: string): Promise<{
|
|
4
5
|
serviceId: string;
|
|
5
6
|
instance: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../../src/admin/instance.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../../src/admin/instance.ts"],"names":[],"mappings":"AASA,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,EAAE,CAAC,CAQnB;AAED,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,iBAQpB;AAED,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,iBAchB;AAED,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM;eAGmB,MAAM;cAAY,MAAM;KAY/D"}
|
package/dist/admin/instance.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getInstancesToRemove = exports.removeInstanceForTenant = exports.listInstancesForTenant = void 0;
|
|
3
|
+
exports.getInstancesToRemove = exports.suspendInstanceForTenant = exports.removeInstanceForTenant = exports.listInstancesForTenant = void 0;
|
|
4
4
|
const client_core_1 = require("@osaas/client-core");
|
|
5
5
|
const token_1 = require("./token");
|
|
6
6
|
const subscription_1 = require("./subscription");
|
|
@@ -19,6 +19,18 @@ async function removeInstanceForTenant(tenantId, serviceId, name, environment) {
|
|
|
19
19
|
await (0, client_core_1.removeInstance)(ctx, serviceId, name, serviceAccessToken);
|
|
20
20
|
}
|
|
21
21
|
exports.removeInstanceForTenant = removeInstanceForTenant;
|
|
22
|
+
async function suspendInstanceForTenant(tenantId, serviceId, name, environment, reason) {
|
|
23
|
+
const suspendUrl = new URL(`/suspended/${serviceId}/${name}`, `https://deploy.svc.${environment}.osaas.io`);
|
|
24
|
+
await (0, client_core_1.createFetch)(suspendUrl, {
|
|
25
|
+
method: 'POST',
|
|
26
|
+
headers: {
|
|
27
|
+
'Content-Type': 'application/json',
|
|
28
|
+
Authorization: `Bearer ${(0, token_1.apiKey)()}`
|
|
29
|
+
},
|
|
30
|
+
body: JSON.stringify({ tenantId, reason: reason ?? 'token_limit_exceeded' })
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
exports.suspendInstanceForTenant = suspendInstanceForTenant;
|
|
22
34
|
async function getInstancesToRemove(tenantId, environment) {
|
|
23
35
|
const services = await (0, subscription_1.listSubscriptionsForTenant)(tenantId, environment);
|
|
24
36
|
const instancesToRemove = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance.js","sourceRoot":"","sources":["../../src/admin/instance.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"instance.js","sourceRoot":"","sources":["../../src/admin/instance.ts"],"names":[],"mappings":";;;AAAA,oDAK4B;AAC5B,mCAA8C;AAC9C,iDAA4D;AAErD,KAAK,UAAU,sBAAsB,CAC1C,QAAgB,EAChB,SAAiB,EACjB,WAAmB;IAEnB,MAAM,GAAG,GAAG,IAAA,mBAAW,EAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAE/C,MAAM,GAAG,GAAG,IAAI,qBAAO,CAAC,EAAE,mBAAmB,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;IACnE,MAAM,kBAAkB,GAAG,MAAM,GAAG,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAEtE,MAAM,SAAS,GAAG,MAAM,IAAA,2BAAa,EAAC,GAAG,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC;IAC1E,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,QAA0B,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACtE,CAAC;AAZD,wDAYC;AAEM,KAAK,UAAU,uBAAuB,CAC3C,QAAgB,EAChB,SAAiB,EACjB,IAAY,EACZ,WAAmB;IAEnB,MAAM,GAAG,GAAG,IAAA,mBAAW,EAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAE/C,MAAM,GAAG,GAAG,IAAI,qBAAO,CAAC,EAAE,mBAAmB,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;IACnE,MAAM,kBAAkB,GAAG,MAAM,GAAG,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAEtE,MAAM,IAAA,4BAAc,EAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC;AACjE,CAAC;AAZD,0DAYC;AAEM,KAAK,UAAU,wBAAwB,CAC5C,QAAgB,EAChB,SAAiB,EACjB,IAAY,EACZ,WAAmB,EACnB,MAAe;IAEf,MAAM,UAAU,GAAG,IAAI,GAAG,CACxB,cAAc,SAAS,IAAI,IAAI,EAAE,EACjC,sBAAsB,WAAW,WAAW,CAC7C,CAAC;IACF,MAAM,IAAA,yBAAW,EAAC,UAAU,EAAE;QAC5B,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,IAAA,cAAM,GAAE,EAAE;SACpC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,IAAI,sBAAsB,EAAE,CAAC;KAC7E,CAAC,CAAC;AACL,CAAC;AAnBD,4DAmBC;AAEM,KAAK,UAAU,oBAAoB,CACxC,QAAgB,EAChB,WAAmB;IAEnB,MAAM,QAAQ,GAAG,MAAM,IAAA,yCAA0B,EAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IACzE,MAAM,iBAAiB,GAA8C,EAAE,CAAC;IACxE,KAAK,MAAM,SAAS,IAAI,QAAQ,EAAE;QAChC,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAC5C,QAAQ,EACR,SAAS,EACT,WAAW,CACZ,CAAC;QACF,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC7B,iBAAiB,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;KACJ;IACD,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAjBD,oDAiBC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@osaas/cli",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.27.0",
|
|
4
4
|
"description": "Open Source Cloud CLI",
|
|
5
5
|
"author": "Eyevinn Open Source Cloud <osc@eyevinn.se>",
|
|
6
6
|
"homepage": "https://www.osaas.io",
|
|
@@ -21,12 +21,12 @@
|
|
|
21
21
|
"test": "jest --pass-with-no-tests"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@osaas/client-ai": "^0.4.
|
|
25
|
-
"@osaas/client-core": "^0.
|
|
26
|
-
"@osaas/client-db": "^0.6.
|
|
27
|
-
"@osaas/client-intercom": "^0.3.
|
|
28
|
-
"@osaas/client-transcode": "^0.27.
|
|
29
|
-
"@osaas/client-web": "^0.5.
|
|
24
|
+
"@osaas/client-ai": "^0.4.12",
|
|
25
|
+
"@osaas/client-core": "^0.22.0",
|
|
26
|
+
"@osaas/client-db": "^0.6.11",
|
|
27
|
+
"@osaas/client-intercom": "^0.3.7",
|
|
28
|
+
"@osaas/client-transcode": "^0.27.4",
|
|
29
|
+
"@osaas/client-web": "^0.5.15",
|
|
30
30
|
"@types/promptly": "^3.0.5",
|
|
31
31
|
"chalk": "4.1.2",
|
|
32
32
|
"commander": "^12.1.0",
|
|
@@ -37,5 +37,5 @@
|
|
|
37
37
|
"publishConfig": {
|
|
38
38
|
"access": "public"
|
|
39
39
|
},
|
|
40
|
-
"gitHead": "
|
|
40
|
+
"gitHead": "7c4deb4eb062a82e81383479d6deb3b23f158768"
|
|
41
41
|
}
|
package/src/admin/cmd.ts
CHANGED
|
@@ -10,7 +10,8 @@ import {
|
|
|
10
10
|
import {
|
|
11
11
|
getInstancesToRemove,
|
|
12
12
|
listInstancesForTenant,
|
|
13
|
-
removeInstanceForTenant
|
|
13
|
+
removeInstanceForTenant,
|
|
14
|
+
suspendInstanceForTenant
|
|
14
15
|
} from './instance';
|
|
15
16
|
import { confirm } from '../user/util';
|
|
16
17
|
import {
|
|
@@ -80,9 +81,9 @@ export default function cmdAdmin() {
|
|
|
80
81
|
admin
|
|
81
82
|
.command('remove-exceeding-tenant-instances')
|
|
82
83
|
.description(
|
|
83
|
-
'
|
|
84
|
+
'Suspend all instances for all tenants with a negative usage token balance'
|
|
84
85
|
)
|
|
85
|
-
.option('--apply', 'Actually
|
|
86
|
+
.option('--apply', 'Actually suspend instances, otherwise just a dry run')
|
|
86
87
|
.action(async (options, command) => {
|
|
87
88
|
try {
|
|
88
89
|
const globalOpts = command.optsWithGlobals();
|
|
@@ -92,7 +93,7 @@ export default function cmdAdmin() {
|
|
|
92
93
|
const tenantsExceeding = tokenCounts.filter(
|
|
93
94
|
(tenant) => tenant.remainingTokens < -200
|
|
94
95
|
);
|
|
95
|
-
let
|
|
96
|
+
let instancesSuspended = 0;
|
|
96
97
|
const tenantsExceedingCount = tenantsExceeding.length;
|
|
97
98
|
for (const tenant of tenantsExceeding) {
|
|
98
99
|
if (tenantPlanMap[tenant.tenantId]?.planType === 'FREE') {
|
|
@@ -104,18 +105,18 @@ export default function cmdAdmin() {
|
|
|
104
105
|
console.log(
|
|
105
106
|
`Tenant ${tenant.tenantId} has a negative or low token balance of ${tenant.remainingTokens} tokens and is on the 'FREE' plan`
|
|
106
107
|
);
|
|
107
|
-
console.log('
|
|
108
|
+
console.log('Suspending all instances for this tenant...');
|
|
108
109
|
for (const item of instancesToRemove) {
|
|
109
110
|
console.log(` - ${item.serviceId}: ${item.instance}`);
|
|
110
111
|
if (options.apply) {
|
|
111
|
-
await
|
|
112
|
+
await suspendInstanceForTenant(
|
|
112
113
|
tenant.tenantId,
|
|
113
114
|
item.serviceId,
|
|
114
115
|
item.instance,
|
|
115
116
|
environment
|
|
116
117
|
);
|
|
117
|
-
|
|
118
|
-
console.log('
|
|
118
|
+
instancesSuspended++;
|
|
119
|
+
console.log('Suspended');
|
|
119
120
|
}
|
|
120
121
|
}
|
|
121
122
|
}
|
|
@@ -124,7 +125,7 @@ export default function cmdAdmin() {
|
|
|
124
125
|
console.log(
|
|
125
126
|
`${tenantsExceedingCount} / ${
|
|
126
127
|
Object.keys(tenantPlanMap).length
|
|
127
|
-
} tenants below threshold,
|
|
128
|
+
} tenants below threshold, suspended ${instancesSuspended} instances`
|
|
128
129
|
);
|
|
129
130
|
} catch (err) {
|
|
130
131
|
console.log((err as Error).message);
|
package/src/admin/instance.ts
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import {
|
|
2
|
+
Context,
|
|
3
|
+
createFetch,
|
|
4
|
+
listInstances,
|
|
5
|
+
removeInstance
|
|
6
|
+
} from '@osaas/client-core';
|
|
7
|
+
import { generatePat, apiKey } from './token';
|
|
3
8
|
import { listSubscriptionsForTenant } from './subscription';
|
|
4
9
|
|
|
5
10
|
export async function listInstancesForTenant(
|
|
@@ -30,6 +35,27 @@ export async function removeInstanceForTenant(
|
|
|
30
35
|
await removeInstance(ctx, serviceId, name, serviceAccessToken);
|
|
31
36
|
}
|
|
32
37
|
|
|
38
|
+
export async function suspendInstanceForTenant(
|
|
39
|
+
tenantId: string,
|
|
40
|
+
serviceId: string,
|
|
41
|
+
name: string,
|
|
42
|
+
environment: string,
|
|
43
|
+
reason?: string
|
|
44
|
+
) {
|
|
45
|
+
const suspendUrl = new URL(
|
|
46
|
+
`/suspended/${serviceId}/${name}`,
|
|
47
|
+
`https://deploy.svc.${environment}.osaas.io`
|
|
48
|
+
);
|
|
49
|
+
await createFetch(suspendUrl, {
|
|
50
|
+
method: 'POST',
|
|
51
|
+
headers: {
|
|
52
|
+
'Content-Type': 'application/json',
|
|
53
|
+
Authorization: `Bearer ${apiKey()}`
|
|
54
|
+
},
|
|
55
|
+
body: JSON.stringify({ tenantId, reason: reason ?? 'token_limit_exceeded' })
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
|
|
33
59
|
export async function getInstancesToRemove(
|
|
34
60
|
tenantId: string,
|
|
35
61
|
environment: string
|