@osaas/cli 4.26.2 → 4.27.1
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 +19 -14
- 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 +33 -24
- 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,YAgP/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,31 @@ 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
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
76
|
+
try {
|
|
77
|
+
const instancesToRemove = await (0, instance_1.getInstancesToRemove)(tenant.tenantId, environment);
|
|
78
|
+
if (instancesToRemove.length > 0) {
|
|
79
|
+
console.log(`Tenant ${tenant.tenantId} has a negative or low token balance of ${tenant.remainingTokens} tokens and is on the 'FREE' plan`);
|
|
80
|
+
console.log('Suspending all instances for this tenant...');
|
|
81
|
+
for (const item of instancesToRemove) {
|
|
82
|
+
console.log(` - ${item.serviceId}: ${item.instance}`);
|
|
83
|
+
if (options.apply) {
|
|
84
|
+
await (0, instance_1.suspendInstanceForTenant)(tenant.tenantId, item.serviceId, item.instance, environment);
|
|
85
|
+
instancesSuspended++;
|
|
86
|
+
console.log('Suspended');
|
|
87
|
+
}
|
|
86
88
|
}
|
|
87
89
|
}
|
|
88
90
|
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
console.log(`Failed to process tenant ${tenant.tenantId}: ${err.message}`);
|
|
93
|
+
}
|
|
89
94
|
}
|
|
90
95
|
}
|
|
91
|
-
console.log(`${tenantsExceedingCount} / ${Object.keys(tenantPlanMap).length} tenants below threshold,
|
|
96
|
+
console.log(`${tenantsExceedingCount} / ${Object.keys(tenantPlanMap).length} tenants below threshold, suspended ${instancesSuspended} instances`);
|
|
92
97
|
}
|
|
93
98
|
catch (err) {
|
|
94
99
|
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.1",
|
|
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": "d2ab5242de8cf94c0bc4eebefce9e0090727224f"
|
|
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,39 +93,47 @@ 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') {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
if (instancesToRemove.length > 0) {
|
|
104
|
-
console.log(
|
|
105
|
-
`Tenant ${tenant.tenantId} has a negative or low token balance of ${tenant.remainingTokens} tokens and is on the 'FREE' plan`
|
|
100
|
+
try {
|
|
101
|
+
const instancesToRemove = await getInstancesToRemove(
|
|
102
|
+
tenant.tenantId,
|
|
103
|
+
environment
|
|
106
104
|
);
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
105
|
+
if (instancesToRemove.length > 0) {
|
|
106
|
+
console.log(
|
|
107
|
+
`Tenant ${tenant.tenantId} has a negative or low token balance of ${tenant.remainingTokens} tokens and is on the 'FREE' plan`
|
|
108
|
+
);
|
|
109
|
+
console.log('Suspending all instances for this tenant...');
|
|
110
|
+
for (const item of instancesToRemove) {
|
|
111
|
+
console.log(` - ${item.serviceId}: ${item.instance}`);
|
|
112
|
+
if (options.apply) {
|
|
113
|
+
await suspendInstanceForTenant(
|
|
114
|
+
tenant.tenantId,
|
|
115
|
+
item.serviceId,
|
|
116
|
+
item.instance,
|
|
117
|
+
environment
|
|
118
|
+
);
|
|
119
|
+
instancesSuspended++;
|
|
120
|
+
console.log('Suspended');
|
|
121
|
+
}
|
|
119
122
|
}
|
|
120
123
|
}
|
|
124
|
+
} catch (err) {
|
|
125
|
+
console.log(
|
|
126
|
+
`Failed to process tenant ${tenant.tenantId}: ${
|
|
127
|
+
(err as Error).message
|
|
128
|
+
}`
|
|
129
|
+
);
|
|
121
130
|
}
|
|
122
131
|
}
|
|
123
132
|
}
|
|
124
133
|
console.log(
|
|
125
134
|
`${tenantsExceedingCount} / ${
|
|
126
135
|
Object.keys(tenantPlanMap).length
|
|
127
|
-
} tenants below threshold,
|
|
136
|
+
} tenants below threshold, suspended ${instancesSuspended} instances`
|
|
128
137
|
);
|
|
129
138
|
} catch (err) {
|
|
130
139
|
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
|