ninedeploy 0.16.7 → 0.16.9
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/README.md +18 -0
- package/dist/commands/canary.d.ts +37 -0
- package/dist/commands/canary.d.ts.map +1 -0
- package/dist/commands/canary.js +230 -0
- package/dist/commands/canary.js.map +1 -0
- package/dist/commands/uptime.d.ts +68 -0
- package/dist/commands/uptime.d.ts.map +1 -0
- package/dist/commands/uptime.js +386 -0
- package/dist/commands/uptime.js.map +1 -0
- package/dist/index.js +82 -0
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/src/commands/canary.ts +245 -0
- package/src/commands/uptime.ts +412 -0
- package/src/index.ts +88 -0
package/README.md
CHANGED
|
@@ -154,6 +154,24 @@ ninedeploy system update-check # Check for newer releases
|
|
|
154
154
|
ninedeploy system prune # Housekeeping prune (dangling containers & cache)
|
|
155
155
|
```
|
|
156
156
|
|
|
157
|
+
### 📡 Uptime Monitors & Status Pages (0.16.8)
|
|
158
|
+
```bash
|
|
159
|
+
ninedeploy monitors list [--service <id|slug>] [--json] # Status, 24h / 30d uptime, last response
|
|
160
|
+
ninedeploy monitors add site https://app.example.com/health # HTTP(S); host:port (or --tcp) is a TCP check
|
|
161
|
+
ninedeploy monitors show|check|pause|resume|rm <id> # Details + last 10 checks, check now, pause, delete
|
|
162
|
+
ninedeploy status-pages add acme "Acme status" --monitor 1 2 --publish
|
|
163
|
+
ninedeploy status-pages publish|unpublish|rm <id>
|
|
164
|
+
ninedeploy status-pages notice <id> "Maintenance at 22:00" # --clear removes it
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### 🐤 Canary Releases (0.16.9)
|
|
168
|
+
```bash
|
|
169
|
+
ninedeploy canary show web [--json] # Configuration, and the running canary: step, share, 5xx %, p95
|
|
170
|
+
ninedeploy canary set web --steps 10,50 --max-p95 800 # Options not given keep their value; --max-p95 off stops judging it
|
|
171
|
+
ninedeploy canary off web # The next deploy switches all traffic at once
|
|
172
|
+
ninedeploy canary promote web [--deployment <id>] # Skip the remaining steps; stop one with `deploys cancel`
|
|
173
|
+
```
|
|
174
|
+
|
|
157
175
|
---
|
|
158
176
|
|
|
159
177
|
## 📄 License
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type CanaryConfig, type CanaryConfigInput } from '@ninedeploy/schemas';
|
|
2
|
+
import type { NineDeployClient } from '../client.js';
|
|
3
|
+
export interface CanarySetOptions {
|
|
4
|
+
steps?: string;
|
|
5
|
+
stepSeconds?: string;
|
|
6
|
+
maxErrorRate?: string;
|
|
7
|
+
maxP95?: string;
|
|
8
|
+
minRequests?: string;
|
|
9
|
+
json?: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* The fields the user gave, as a partial canary configuration; null after
|
|
13
|
+
* printing why one is not valid. Ranges are left to the schema.
|
|
14
|
+
*/
|
|
15
|
+
export declare function canaryOptions(opts: CanarySetOptions): Partial<CanaryConfigInput> | null;
|
|
16
|
+
/**
|
|
17
|
+
* What `canary set` sends. A service that has a configuration keeps the
|
|
18
|
+
* values not given (the PATCH replaces the whole object). Without one, only
|
|
19
|
+
* the given values go, and the server fills in the rest; `steps` has no
|
|
20
|
+
* server default, so the documented default (10, 50) is sent when not given.
|
|
21
|
+
*/
|
|
22
|
+
export declare function canaryBody(current: CanaryConfig | null | undefined, given: Partial<CanaryConfigInput>): CanaryConfigInput;
|
|
23
|
+
/** Seconds as `1m 20s`. */
|
|
24
|
+
export declare function fmtSeconds(total: number): string;
|
|
25
|
+
/** `ninedeploy canary show <service> [--json]` */
|
|
26
|
+
export declare function canaryShow(client: NineDeployClient, ref: string, opts?: {
|
|
27
|
+
json?: boolean;
|
|
28
|
+
}): Promise<void>;
|
|
29
|
+
/** `ninedeploy canary set <service> [...]` */
|
|
30
|
+
export declare function canarySet(client: NineDeployClient, ref: string, opts?: CanarySetOptions): Promise<void>;
|
|
31
|
+
/** `ninedeploy canary off <service>` */
|
|
32
|
+
export declare function canaryOff(client: NineDeployClient, ref: string): Promise<void>;
|
|
33
|
+
/** `ninedeploy canary promote <service> [--deployment <id>]` */
|
|
34
|
+
export declare function canaryPromote(client: NineDeployClient, ref: string, opts?: {
|
|
35
|
+
deployment?: string;
|
|
36
|
+
}): Promise<void>;
|
|
37
|
+
//# sourceMappingURL=canary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canary.d.ts","sourceRoot":"","sources":["../../src/commands/canary.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,iBAAiB,EAGvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAwBrD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAqBD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAgCvF;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,iBAAiB,CAGzH;AAOD,2BAA2B;AAC3B,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIhD;AAwCD,kDAAkD;AAClD,wBAAsB,UAAU,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBpH;AAED,8CAA8C;AAC9C,wBAAsB,SAAS,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBjH;AAED,wCAAwC;AACxC,wBAAsB,SAAS,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASpF;AAED,gEAAgE;AAChE,wBAAsB,aAAa,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B5H"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { CANARY_DEFAULT_STEPS, canaryConfig, } from '@ninedeploy/schemas';
|
|
2
|
+
import { c, error, header, info, kv, spinner, success } from '../lib/format.js';
|
|
3
|
+
import { plain } from './sources.js';
|
|
4
|
+
import { resolveServiceRef } from './uptime.js';
|
|
5
|
+
/**
|
|
6
|
+
* 0.16.9 canary releases:
|
|
7
|
+
*
|
|
8
|
+
* ninedeploy canary show <service> [--json]
|
|
9
|
+
* ninedeploy canary set <service> [--steps 10,50] [--step-seconds 120] [--max-error-rate 5]
|
|
10
|
+
* [--max-p95 <ms>|off] [--min-requests 20] [--json]
|
|
11
|
+
* ninedeploy canary off <service>
|
|
12
|
+
* ninedeploy canary promote <service> [--deployment <id>]
|
|
13
|
+
*
|
|
14
|
+
* `<service>` is an id, a slug or a name. Stopping a running canary is
|
|
15
|
+
* `ninedeploy deploys cancel <serviceId> <deployId>`: all traffic goes back
|
|
16
|
+
* to the previous release.
|
|
17
|
+
*/
|
|
18
|
+
const message = (err) => plain(err instanceof Error ? err.message : String(err));
|
|
19
|
+
/** Skip the spinner for `--json` so stdout stays parseable. */
|
|
20
|
+
const load = (json, msg, fn) => (json ? fn() : spinner(msg, fn));
|
|
21
|
+
/** Flag names for the schema fields, so a validation failure names what the user typed. */
|
|
22
|
+
const FLAG = {
|
|
23
|
+
steps: '--steps',
|
|
24
|
+
stepSeconds: '--step-seconds',
|
|
25
|
+
maxErrorRate: '--max-error-rate',
|
|
26
|
+
maxP95Ms: '--max-p95',
|
|
27
|
+
minRequests: '--min-requests',
|
|
28
|
+
};
|
|
29
|
+
/** A number option; null after printing why not. */
|
|
30
|
+
function numberOption(raw, flag) {
|
|
31
|
+
const n = Number(raw);
|
|
32
|
+
if (raw.trim() === '' || !Number.isFinite(n)) {
|
|
33
|
+
error(`${flag} must be a number`);
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
return n;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* The fields the user gave, as a partial canary configuration; null after
|
|
40
|
+
* printing why one is not valid. Ranges are left to the schema.
|
|
41
|
+
*/
|
|
42
|
+
export function canaryOptions(opts) {
|
|
43
|
+
const out = {};
|
|
44
|
+
if (opts.steps !== undefined) {
|
|
45
|
+
const parts = opts.steps.split(',').map((s) => s.trim());
|
|
46
|
+
const steps = parts.map(Number);
|
|
47
|
+
if (parts.some((p) => p === '') || steps.some((n) => !Number.isFinite(n))) {
|
|
48
|
+
error('--steps must be percentages separated by commas, for example 10,50');
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
out.steps = steps;
|
|
52
|
+
}
|
|
53
|
+
const numbers = [
|
|
54
|
+
['stepSeconds', 'stepSeconds'],
|
|
55
|
+
['maxErrorRate', 'maxErrorRate'],
|
|
56
|
+
['minRequests', 'minRequests'],
|
|
57
|
+
];
|
|
58
|
+
for (const [opt, field] of numbers) {
|
|
59
|
+
const raw = opts[opt];
|
|
60
|
+
if (typeof raw !== 'string')
|
|
61
|
+
continue;
|
|
62
|
+
const n = numberOption(raw, FLAG[field]);
|
|
63
|
+
if (n === null)
|
|
64
|
+
return null;
|
|
65
|
+
out[field] = n;
|
|
66
|
+
}
|
|
67
|
+
if (opts.maxP95 !== undefined) {
|
|
68
|
+
if (opts.maxP95.trim().toLowerCase() === 'off')
|
|
69
|
+
out.maxP95Ms = null;
|
|
70
|
+
else {
|
|
71
|
+
const n = numberOption(opts.maxP95, '--max-p95');
|
|
72
|
+
if (n === null)
|
|
73
|
+
return null;
|
|
74
|
+
out.maxP95Ms = n;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return out;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* What `canary set` sends. A service that has a configuration keeps the
|
|
81
|
+
* values not given (the PATCH replaces the whole object). Without one, only
|
|
82
|
+
* the given values go, and the server fills in the rest; `steps` has no
|
|
83
|
+
* server default, so the documented default (10, 50) is sent when not given.
|
|
84
|
+
*/
|
|
85
|
+
export function canaryBody(current, given) {
|
|
86
|
+
if (current)
|
|
87
|
+
return { ...current, ...given };
|
|
88
|
+
return { ...given, steps: given.steps ?? [...CANARY_DEFAULT_STEPS] };
|
|
89
|
+
}
|
|
90
|
+
/** A zod failure as one line, each issue led by the flag it is about. */
|
|
91
|
+
function validationMessage(err) {
|
|
92
|
+
return err.issues.map((i) => `${FLAG[String(i.path[0])] ?? 'canary'}: ${i.message}`).join('; ');
|
|
93
|
+
}
|
|
94
|
+
/** Seconds as `1m 20s`. */
|
|
95
|
+
export function fmtSeconds(total) {
|
|
96
|
+
const s = Math.max(0, Math.round(total));
|
|
97
|
+
const m = Math.floor(s / 60);
|
|
98
|
+
return m > 0 ? `${m}m ${s % 60}s` : `${s}s`;
|
|
99
|
+
}
|
|
100
|
+
function printConfig(cfg) {
|
|
101
|
+
if (!cfg) {
|
|
102
|
+
kv('Canary', c.gray('off: a deploy switches all traffic at once'));
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
kv('Steps', cfg.steps.map((s) => `${s}%`).join(', '));
|
|
106
|
+
kv('Step length', fmtSeconds(cfg.stepSeconds));
|
|
107
|
+
kv('Max 5xx rate', `${cfg.maxErrorRate}%`);
|
|
108
|
+
kv('Max p95', cfg.maxP95Ms === null ? c.gray('not judged') : `${cfg.maxP95Ms} ms`);
|
|
109
|
+
kv('Min requests', cfg.minRequests);
|
|
110
|
+
}
|
|
111
|
+
function stats(s) {
|
|
112
|
+
if (!s)
|
|
113
|
+
return c.gray('—');
|
|
114
|
+
const rate = s.errorRate === null ? '—' : `${s.errorRate}%`;
|
|
115
|
+
const p95 = s.p95Ms === null ? '—' : `${s.p95Ms} ms`;
|
|
116
|
+
return `${s.requests} requests, 5xx ${rate}, p95 ${p95}`;
|
|
117
|
+
}
|
|
118
|
+
function printStatus(st, now) {
|
|
119
|
+
console.log();
|
|
120
|
+
if (!st.active) {
|
|
121
|
+
info('No canary is running.');
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
console.log(` ${c.bold('Running canary')}`);
|
|
125
|
+
kv('Deployment', `#${st.deploymentId}`);
|
|
126
|
+
kv('Step', `${st.step}/${st.steps}`);
|
|
127
|
+
kv('Traffic', `${st.weight}% to the new release`);
|
|
128
|
+
if (st.stepEndsAt)
|
|
129
|
+
kv('Step ends in', fmtSeconds((Date.parse(st.stepEndsAt) - now) / 1000));
|
|
130
|
+
kv('New release', stats(st.canary));
|
|
131
|
+
kv('Previous', stats(st.stable));
|
|
132
|
+
if (st.measured === false) {
|
|
133
|
+
info('Traffic analytics is off: steps are judged on the healthcheck only.');
|
|
134
|
+
}
|
|
135
|
+
if (st.promoting)
|
|
136
|
+
info('Promote requested: all traffic is switching to the new release.');
|
|
137
|
+
}
|
|
138
|
+
/** `ninedeploy canary show <service> [--json]` */
|
|
139
|
+
export async function canaryShow(client, ref, opts = {}) {
|
|
140
|
+
try {
|
|
141
|
+
const id = await resolveServiceRef(client, ref);
|
|
142
|
+
if (id === null)
|
|
143
|
+
return;
|
|
144
|
+
const [svc, status] = await load(opts.json, 'Loading the canary', () => Promise.all([client.services.get(id), client.deploys.canary(id)]));
|
|
145
|
+
if (opts.json) {
|
|
146
|
+
console.log(JSON.stringify({ config: svc.canary ?? null, status }, null, 2));
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
header(`Canary releases: ${plain(svc.name)}`);
|
|
150
|
+
printConfig(svc.canary);
|
|
151
|
+
printStatus(status, Date.now());
|
|
152
|
+
console.log();
|
|
153
|
+
}
|
|
154
|
+
catch (err) {
|
|
155
|
+
error(message(err));
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/** `ninedeploy canary set <service> [...]` */
|
|
159
|
+
export async function canarySet(client, ref, opts = {}) {
|
|
160
|
+
const given = canaryOptions(opts);
|
|
161
|
+
if (given === null)
|
|
162
|
+
return;
|
|
163
|
+
try {
|
|
164
|
+
const id = await resolveServiceRef(client, ref);
|
|
165
|
+
if (id === null)
|
|
166
|
+
return;
|
|
167
|
+
const svc = await client.services.get(id);
|
|
168
|
+
const body = canaryBody(svc.canary, given);
|
|
169
|
+
const parsed = canaryConfig.safeParse(body);
|
|
170
|
+
if (!parsed.success) {
|
|
171
|
+
error(validationMessage(parsed.error));
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
const updated = await load(opts.json, 'Saving the canary configuration', () => client.services.update(id, { canary: body }));
|
|
175
|
+
if (opts.json) {
|
|
176
|
+
console.log(JSON.stringify(updated.canary ?? null, null, 2));
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
success(`Canary releases on for ${plain(updated.name)}. The next deploy uses them.`);
|
|
180
|
+
printConfig(updated.canary);
|
|
181
|
+
}
|
|
182
|
+
catch (err) {
|
|
183
|
+
error(message(err));
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/** `ninedeploy canary off <service>` */
|
|
187
|
+
export async function canaryOff(client, ref) {
|
|
188
|
+
try {
|
|
189
|
+
const id = await resolveServiceRef(client, ref);
|
|
190
|
+
if (id === null)
|
|
191
|
+
return;
|
|
192
|
+
const updated = await spinner('Turning canary releases off', () => client.services.update(id, { canary: null }));
|
|
193
|
+
success(`Canary releases off for ${plain(updated.name)}. A deploy switches all traffic at once.`);
|
|
194
|
+
}
|
|
195
|
+
catch (err) {
|
|
196
|
+
error(message(err));
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/** `ninedeploy canary promote <service> [--deployment <id>]` */
|
|
200
|
+
export async function canaryPromote(client, ref, opts = {}) {
|
|
201
|
+
let depId;
|
|
202
|
+
if (opts.deployment !== undefined) {
|
|
203
|
+
const n = Number(opts.deployment);
|
|
204
|
+
if (!Number.isInteger(n) || n <= 0) {
|
|
205
|
+
error('--deployment must be a positive integer');
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
depId = n;
|
|
209
|
+
}
|
|
210
|
+
try {
|
|
211
|
+
const id = await resolveServiceRef(client, ref);
|
|
212
|
+
if (id === null)
|
|
213
|
+
return;
|
|
214
|
+
if (depId === undefined) {
|
|
215
|
+
const status = await client.deploys.canary(id);
|
|
216
|
+
if (!status.active || status.deploymentId === undefined) {
|
|
217
|
+
error('No canary is running on this service.');
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
depId = status.deploymentId;
|
|
221
|
+
}
|
|
222
|
+
const target = depId;
|
|
223
|
+
await spinner('Promoting the canary', () => client.deploys.promoteCanary(id, target));
|
|
224
|
+
success(`Deployment #${target}: all traffic is switching to the new release.`);
|
|
225
|
+
}
|
|
226
|
+
catch (err) {
|
|
227
|
+
error(message(err));
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=canary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canary.js","sourceRoot":"","sources":["../../src/commands/canary.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { type StatusPageView } from '@ninedeploy/schemas';
|
|
2
|
+
import { type NineDeployClient } from '../client.js';
|
|
3
|
+
/** A service id, or the id of the service with that slug (or name); null after printing why not. */
|
|
4
|
+
export declare function resolveServiceRef(client: NineDeployClient, ref: string): Promise<number | null>;
|
|
5
|
+
/** A zod failure as one line, each issue led by the flag or argument it is about. */
|
|
6
|
+
export declare function validationMessage(err: {
|
|
7
|
+
issues: Array<{
|
|
8
|
+
path: PropertyKey[];
|
|
9
|
+
message: string;
|
|
10
|
+
}>;
|
|
11
|
+
}): string;
|
|
12
|
+
/** `ninedeploy monitors list [--service <id|slug>] [--json]` */
|
|
13
|
+
export declare function monitorsList(client: NineDeployClient, opts?: {
|
|
14
|
+
service?: string;
|
|
15
|
+
json?: boolean;
|
|
16
|
+
}): Promise<void>;
|
|
17
|
+
export interface MonitorAddOptions {
|
|
18
|
+
tcp?: boolean;
|
|
19
|
+
service?: string;
|
|
20
|
+
interval?: string;
|
|
21
|
+
timeout?: string;
|
|
22
|
+
failures?: string;
|
|
23
|
+
expect?: string;
|
|
24
|
+
keyword?: string;
|
|
25
|
+
head?: boolean;
|
|
26
|
+
/** Commander's `--no-follow-redirects` sets this to false. */
|
|
27
|
+
followRedirects?: boolean;
|
|
28
|
+
insecure?: boolean;
|
|
29
|
+
disabled?: boolean;
|
|
30
|
+
}
|
|
31
|
+
/** `--tcp`, or a target without a scheme that reads as host:port, is a TCP check; anything else HTTP. */
|
|
32
|
+
export declare function monitorKindFor(target: string, tcp?: boolean): 'http' | 'tcp';
|
|
33
|
+
/** `ninedeploy monitors add <name> <target> [...]` */
|
|
34
|
+
export declare function monitorsAdd(client: NineDeployClient, name: string, target: string, opts?: MonitorAddOptions): Promise<void>;
|
|
35
|
+
/** `ninedeploy monitors show <id> [--json]` — details and the last 10 checks. */
|
|
36
|
+
export declare function monitorsShow(client: NineDeployClient, idRaw: string, opts?: {
|
|
37
|
+
json?: boolean;
|
|
38
|
+
}): Promise<void>;
|
|
39
|
+
/** `ninedeploy monitors check <id>` — run a check now. */
|
|
40
|
+
export declare function monitorsCheck(client: NineDeployClient, idRaw: string): Promise<void>;
|
|
41
|
+
/** `ninedeploy monitors pause|resume <id>` */
|
|
42
|
+
export declare function monitorsSetEnabled(client: NineDeployClient, idRaw: string, enabled: boolean): Promise<void>;
|
|
43
|
+
/** `ninedeploy monitors rm <id> [--yes]` */
|
|
44
|
+
export declare function monitorsRemove(client: NineDeployClient, idRaw: string, opts?: {
|
|
45
|
+
yes?: boolean;
|
|
46
|
+
}): Promise<void>;
|
|
47
|
+
/** The public address of a status page: the panel URL plus its path. */
|
|
48
|
+
export declare const statusPageUrl: (p: Pick<StatusPageView, 'path'>) => string;
|
|
49
|
+
/** `ninedeploy status-pages list [--json]` */
|
|
50
|
+
export declare function statusPagesList(client: NineDeployClient, opts?: {
|
|
51
|
+
json?: boolean;
|
|
52
|
+
}): Promise<void>;
|
|
53
|
+
/** `ninedeploy status-pages add <slug> <title> [--monitor <id>...] [--publish]` */
|
|
54
|
+
export declare function statusPagesAdd(client: NineDeployClient, slug: string, title: string, opts?: {
|
|
55
|
+
monitor?: string[];
|
|
56
|
+
publish?: boolean;
|
|
57
|
+
}): Promise<void>;
|
|
58
|
+
/** `ninedeploy status-pages publish|unpublish <id>` */
|
|
59
|
+
export declare function statusPagesSetPublished(client: NineDeployClient, idRaw: string, published: boolean): Promise<void>;
|
|
60
|
+
/** `ninedeploy status-pages notice <id> [text] [--clear]` */
|
|
61
|
+
export declare function statusPagesNotice(client: NineDeployClient, idRaw: string, text: string | undefined, opts?: {
|
|
62
|
+
clear?: boolean;
|
|
63
|
+
}): Promise<void>;
|
|
64
|
+
/** `ninedeploy status-pages rm <id> [--yes]` */
|
|
65
|
+
export declare function statusPagesRemove(client: NineDeployClient, idRaw: string, opts?: {
|
|
66
|
+
yes?: boolean;
|
|
67
|
+
}): Promise<void>;
|
|
68
|
+
//# sourceMappingURL=uptime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uptime.d.ts","sourceRoot":"","sources":["../../src/commands/uptime.ts"],"names":[],"mappings":"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"}
|