gazill 2.0.0 → 2.2.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/commands/autoscale.d.ts +5 -0
- package/dist/commands/autoscale.d.ts.map +1 -0
- package/dist/commands/autoscale.js +140 -0
- package/dist/commands/autoscale.js.map +1 -0
- package/dist/commands/blob.d.ts +19 -0
- package/dist/commands/blob.d.ts.map +1 -0
- package/dist/commands/blob.js +383 -0
- package/dist/commands/blob.js.map +1 -0
- package/dist/commands/cron.d.ts +27 -0
- package/dist/commands/cron.d.ts.map +1 -0
- package/dist/commands/cron.js +333 -0
- package/dist/commands/cron.js.map +1 -0
- package/dist/commands/db.d.ts +21 -0
- package/dist/commands/db.d.ts.map +1 -0
- package/dist/commands/db.js +567 -0
- package/dist/commands/db.js.map +1 -0
- package/dist/commands/domains.d.ts +5 -0
- package/dist/commands/domains.d.ts.map +1 -0
- package/dist/commands/domains.js +239 -0
- package/dist/commands/domains.js.map +1 -0
- package/dist/commands/env.d.ts +4 -0
- package/dist/commands/env.d.ts.map +1 -0
- package/dist/commands/env.js +180 -0
- package/dist/commands/env.js.map +1 -0
- package/dist/commands/health.d.ts +7 -0
- package/dist/commands/health.d.ts.map +1 -0
- package/dist/commands/health.js +189 -0
- package/dist/commands/health.js.map +1 -0
- package/dist/commands/limits.d.ts +2 -0
- package/dist/commands/limits.d.ts.map +1 -0
- package/dist/commands/limits.js +186 -0
- package/dist/commands/limits.js.map +1 -0
- package/dist/commands/new.d.ts.map +1 -1
- package/dist/commands/new.js +29 -3
- package/dist/commands/new.js.map +1 -1
- package/dist/commands/promote.d.ts.map +1 -1
- package/dist/commands/promote.js +36 -9
- package/dist/commands/promote.js.map +1 -1
- package/dist/commands/rollback.d.ts +9 -0
- package/dist/commands/rollback.d.ts.map +1 -0
- package/dist/commands/rollback.js +154 -0
- package/dist/commands/rollback.js.map +1 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +24 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/usage.d.ts +2 -0
- package/dist/commands/usage.d.ts.map +1 -0
- package/dist/commands/usage.js +63 -0
- package/dist/commands/usage.js.map +1 -0
- package/dist/commands/worker.d.ts +31 -0
- package/dist/commands/worker.d.ts.map +1 -0
- package/dist/commands/worker.js +380 -0
- package/dist/commands/worker.js.map +1 -0
- package/dist/index.js +297 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/api.d.ts +59 -0
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js +21 -0
- package/dist/lib/api.js.map +1 -1
- package/dist/shared/constants.d.ts +10 -0
- package/dist/shared/constants.d.ts.map +1 -1
- package/dist/shared/constants.js +11 -0
- package/dist/shared/constants.js.map +1 -1
- package/dist/shared/types.d.ts +40 -1
- package/dist/shared/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/commands/status.js
CHANGED
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
import ora from 'ora';
|
|
3
|
-
import { DEV_DOMAIN, PROD_DOMAIN } from '../shared/index.js';
|
|
3
|
+
import { DEV_DOMAIN, PROD_DOMAIN, DEV_MAX_UNIQUE_VISITORS, DEV_MAX_BANDWIDTH_BYTES } from '../shared/index.js';
|
|
4
4
|
import { listProjects } from '../lib/api.js';
|
|
5
5
|
import { isAuthenticated } from '../lib/config.js';
|
|
6
|
+
// Format bytes to human readable
|
|
7
|
+
function formatBytes(bytes) {
|
|
8
|
+
if (bytes === 0)
|
|
9
|
+
return '0 B';
|
|
10
|
+
const k = 1024;
|
|
11
|
+
const sizes = ['B', 'KB', 'MB', 'GB'];
|
|
12
|
+
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
13
|
+
return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + ' ' + sizes[i];
|
|
14
|
+
}
|
|
6
15
|
const STATUS_COLORS = {
|
|
7
16
|
pending: chalk.yellow,
|
|
8
17
|
building: chalk.blue,
|
|
@@ -32,6 +41,20 @@ export async function statusCommand() {
|
|
|
32
41
|
const devUrl = `${project.name}.${DEV_DOMAIN}`;
|
|
33
42
|
console.log(chalk.blue.bold(project.name));
|
|
34
43
|
console.log(` Dev: ${devColorFn(project.devStatus.padEnd(8))} ${chalk.underline(`https://${devUrl}`)}`);
|
|
44
|
+
// Show dev limits if not promoted to production
|
|
45
|
+
if (!project.prodStatus) {
|
|
46
|
+
const visitors = project.uniqueVisitorCount || 0;
|
|
47
|
+
const bandwidth = project.monthlyBandwidthUsed || 0;
|
|
48
|
+
const sleeping = project.isSleeping || false;
|
|
49
|
+
// Color code based on usage
|
|
50
|
+
const visitorColor = visitors >= DEV_MAX_UNIQUE_VISITORS * 0.8 ? chalk.yellow : chalk.gray;
|
|
51
|
+
const bandwidthColor = bandwidth >= DEV_MAX_BANDWIDTH_BYTES * 0.8 ? chalk.yellow : chalk.gray;
|
|
52
|
+
console.log(visitorColor(` Visitors: ${visitors}/${DEV_MAX_UNIQUE_VISITORS} unique`));
|
|
53
|
+
console.log(bandwidthColor(` Bandwidth: ${formatBytes(bandwidth)}/2GB`));
|
|
54
|
+
if (sleeping) {
|
|
55
|
+
console.log(chalk.yellow(' Sleeping (will wake on request)'));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
35
58
|
if (project.prodStatus) {
|
|
36
59
|
const prodColorFn = STATUS_COLORS[project.prodStatus] || chalk.white;
|
|
37
60
|
const prodUrl = `${project.name}.${PROD_DOMAIN}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/commands/usage.ts"],"names":[],"mappings":"AAKA,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAwDlD"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { getUsage } from '../lib/api.js';
|
|
4
|
+
import { isAuthenticated } from '../lib/config.js';
|
|
5
|
+
export async function usageCommand() {
|
|
6
|
+
// Check authentication
|
|
7
|
+
if (!(await isAuthenticated())) {
|
|
8
|
+
console.log(chalk.red('Please log in first.'));
|
|
9
|
+
console.log(chalk.gray('Run "gazill login" to authenticate.'));
|
|
10
|
+
process.exit(1);
|
|
11
|
+
}
|
|
12
|
+
const spinner = ora('Fetching usage...').start();
|
|
13
|
+
try {
|
|
14
|
+
const usage = await getUsage();
|
|
15
|
+
spinner.stop();
|
|
16
|
+
console.log(chalk.bold('\nUsage Summary:\n'));
|
|
17
|
+
// Free credit progress bar
|
|
18
|
+
const freeUsed = usage.freeCredit.used;
|
|
19
|
+
const freeTotal = usage.freeCredit.total;
|
|
20
|
+
const freeRemaining = usage.freeCredit.remaining;
|
|
21
|
+
const progressPercent = Math.min(100, (freeUsed / freeTotal) * 100);
|
|
22
|
+
const progressBar = createProgressBar(progressPercent);
|
|
23
|
+
if (freeRemaining > 0) {
|
|
24
|
+
console.log(chalk.green(`Free Credit: ${progressBar} ${freeUsed}/${freeTotal} hours used`));
|
|
25
|
+
console.log(chalk.green(` ${freeRemaining} hours remaining`));
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
console.log(chalk.yellow(`Free Credit: ${progressBar} ${freeUsed}/${freeTotal} hours used`));
|
|
29
|
+
console.log(chalk.yellow(' Trial complete - billing active'));
|
|
30
|
+
}
|
|
31
|
+
console.log('');
|
|
32
|
+
console.log(chalk.blue('This Month:'));
|
|
33
|
+
console.log(` Total pod-hours: ${usage.currentMonth.totalPodHours}`);
|
|
34
|
+
console.log(` Billable hours: ${usage.currentMonth.billableHours}`);
|
|
35
|
+
console.log(` Current cost: ${usage.currentMonth.currentCost}`);
|
|
36
|
+
console.log(` Estimated monthly: ${usage.currentMonth.estimatedMonthlyCost}`);
|
|
37
|
+
console.log('');
|
|
38
|
+
console.log(chalk.blue('Current rate:'), usage.currentHourlyRate + '/hour');
|
|
39
|
+
console.log('');
|
|
40
|
+
if (usage.hasPaymentMethod) {
|
|
41
|
+
console.log(chalk.green('✓ Payment method on file'));
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
console.log(chalk.yellow('⚠ No payment method on file'));
|
|
45
|
+
console.log(chalk.gray(' Add one at https://dashboard.gazill.io'));
|
|
46
|
+
}
|
|
47
|
+
console.log('');
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
const message = error instanceof Error ? error.message : 'Failed to fetch usage';
|
|
51
|
+
spinner.fail(chalk.red(message));
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function createProgressBar(percent) {
|
|
56
|
+
const width = 20;
|
|
57
|
+
const filled = Math.round(width * (percent / 100));
|
|
58
|
+
const empty = width - filled;
|
|
59
|
+
const filledChar = percent >= 100 ? chalk.red('█') : chalk.green('█');
|
|
60
|
+
const emptyChar = chalk.gray('░');
|
|
61
|
+
return filledChar.repeat(filled) + emptyChar.repeat(empty);
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/commands/usage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export declare function workerListCommand(projectName?: string, options?: {
|
|
2
|
+
env?: string;
|
|
3
|
+
}): Promise<void>;
|
|
4
|
+
export declare function workerCreateCommand(name: string, options?: {
|
|
5
|
+
command?: string;
|
|
6
|
+
restart?: string;
|
|
7
|
+
env?: string;
|
|
8
|
+
}): Promise<void>;
|
|
9
|
+
export declare function workerUpdateCommand(name: string, options?: {
|
|
10
|
+
command?: string;
|
|
11
|
+
restart?: string;
|
|
12
|
+
env?: string;
|
|
13
|
+
}): Promise<void>;
|
|
14
|
+
export declare function workerDeleteCommand(name: string, options?: {
|
|
15
|
+
env?: string;
|
|
16
|
+
}): Promise<void>;
|
|
17
|
+
export declare function workerStartCommand(name: string, options?: {
|
|
18
|
+
env?: string;
|
|
19
|
+
}): Promise<void>;
|
|
20
|
+
export declare function workerStopCommand(name: string, options?: {
|
|
21
|
+
env?: string;
|
|
22
|
+
}): Promise<void>;
|
|
23
|
+
export declare function workerRestartCommand(name: string, options?: {
|
|
24
|
+
env?: string;
|
|
25
|
+
}): Promise<void>;
|
|
26
|
+
export declare function workerLogsCommand(name: string, options?: {
|
|
27
|
+
lines?: string;
|
|
28
|
+
follow?: boolean;
|
|
29
|
+
env?: string;
|
|
30
|
+
}): Promise<void>;
|
|
31
|
+
//# sourceMappingURL=worker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/commands/worker.ts"],"names":[],"mappings":"AAiGA,wBAAsB,iBAAiB,CACrC,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACzB,OAAO,CAAC,IAAI,CAAC,CAsEf;AAGD,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GACA,OAAO,CAAC,IAAI,CAAC,CAiDf;AAGD,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GACA,OAAO,CAAC,IAAI,CAAC,CA6Cf;AAGD,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACzB,OAAO,CAAC,IAAI,CAAC,CAwCf;AAGD,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACzB,OAAO,CAAC,IAAI,CAAC,CA0Cf;AAGD,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACzB,OAAO,CAAC,IAAI,CAAC,CAyCf;AAGD,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACzB,OAAO,CAAC,IAAI,CAAC,CA0Cf;AAGD,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3D,OAAO,CAAC,IAAI,CAAC,CAgEf"}
|
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { promises as fs } from 'fs';
|
|
4
|
+
import { getAuth, getApiUrl } from '../lib/config.js';
|
|
5
|
+
import { listProjects } from '../lib/api.js';
|
|
6
|
+
// API helper for worker routes
|
|
7
|
+
async function workerApiRequest(endpoint, options = { method: 'GET' }) {
|
|
8
|
+
const apiUrl = await getApiUrl();
|
|
9
|
+
const auth = await getAuth();
|
|
10
|
+
if (!auth?.token) {
|
|
11
|
+
throw new Error('Not authenticated');
|
|
12
|
+
}
|
|
13
|
+
const headers = {
|
|
14
|
+
'Content-Type': 'application/json',
|
|
15
|
+
Authorization: `Bearer ${auth.token}`,
|
|
16
|
+
};
|
|
17
|
+
const response = await fetch(`${apiUrl}${endpoint}`, {
|
|
18
|
+
method: options.method,
|
|
19
|
+
headers,
|
|
20
|
+
body: options.body ? JSON.stringify(options.body) : undefined,
|
|
21
|
+
});
|
|
22
|
+
const data = await response.json();
|
|
23
|
+
if (!response.ok) {
|
|
24
|
+
throw new Error(data.message || 'Request failed');
|
|
25
|
+
}
|
|
26
|
+
return data;
|
|
27
|
+
}
|
|
28
|
+
// Get current project ID from .gazill file
|
|
29
|
+
async function getProjectId() {
|
|
30
|
+
try {
|
|
31
|
+
const content = await fs.readFile('.gazill', 'utf-8');
|
|
32
|
+
const data = JSON.parse(content);
|
|
33
|
+
return data.projectId || null;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// Find project by name
|
|
40
|
+
async function findProjectByName(name) {
|
|
41
|
+
const response = await listProjects();
|
|
42
|
+
return response.projects.find((p) => p.name === name) || null;
|
|
43
|
+
}
|
|
44
|
+
// Format uptime
|
|
45
|
+
function formatUptime(startedAt) {
|
|
46
|
+
if (!startedAt)
|
|
47
|
+
return '-';
|
|
48
|
+
const start = new Date(startedAt).getTime();
|
|
49
|
+
const now = Date.now();
|
|
50
|
+
const diffMs = now - start;
|
|
51
|
+
const seconds = Math.floor(diffMs / 1000);
|
|
52
|
+
const minutes = Math.floor(seconds / 60);
|
|
53
|
+
const hours = Math.floor(minutes / 60);
|
|
54
|
+
const days = Math.floor(hours / 24);
|
|
55
|
+
if (days > 0)
|
|
56
|
+
return `${days}d ${hours % 24}h`;
|
|
57
|
+
if (hours > 0)
|
|
58
|
+
return `${hours}h ${minutes % 60}m`;
|
|
59
|
+
if (minutes > 0)
|
|
60
|
+
return `${minutes}m ${seconds % 60}s`;
|
|
61
|
+
return `${seconds}s`;
|
|
62
|
+
}
|
|
63
|
+
// gazill worker list [project] --env <environment>
|
|
64
|
+
export async function workerListCommand(projectName, options) {
|
|
65
|
+
const auth = await getAuth();
|
|
66
|
+
if (!auth?.token) {
|
|
67
|
+
console.log(chalk.red('Not logged in. Run `gazill login` first.'));
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const spinner = ora('Fetching workers...').start();
|
|
71
|
+
try {
|
|
72
|
+
let projectId = await getProjectId();
|
|
73
|
+
if (!projectId && !projectName) {
|
|
74
|
+
spinner.stop();
|
|
75
|
+
console.log(chalk.red('No project specified. Run from a project directory or specify project name.'));
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (projectName) {
|
|
79
|
+
const project = await findProjectByName(projectName);
|
|
80
|
+
if (!project) {
|
|
81
|
+
spinner.fail(`Project "${projectName}" not found.`);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
projectId = project.id;
|
|
85
|
+
}
|
|
86
|
+
const env = options?.env || 'development';
|
|
87
|
+
const response = await workerApiRequest(`/api/projects/${projectId}/workers?environment=${env}`);
|
|
88
|
+
spinner.stop();
|
|
89
|
+
if (response.workers.length === 0) {
|
|
90
|
+
console.log(chalk.yellow(`No workers found for ${env} environment.`));
|
|
91
|
+
console.log(chalk.gray('Use `gazill worker create <name> --command "node worker.js"` to create a worker.'));
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
console.log(chalk.bold(`\nWorkers (${env}):\n`));
|
|
95
|
+
for (const worker of response.workers) {
|
|
96
|
+
const status = worker.status === 'running' ? chalk.green('●') :
|
|
97
|
+
worker.status === 'error' ? chalk.red('●') :
|
|
98
|
+
chalk.gray('○');
|
|
99
|
+
const statusText = worker.status === 'running' ? chalk.green('running') :
|
|
100
|
+
worker.status === 'error' ? chalk.red('error') :
|
|
101
|
+
chalk.gray('stopped');
|
|
102
|
+
console.log(` ${status} ${chalk.cyan(worker.name)} (${statusText})`);
|
|
103
|
+
console.log(` Command: ${chalk.gray(worker.command)}`);
|
|
104
|
+
console.log(` Restart: ${worker.restartPolicy} (${worker.restartCount}/${worker.maxRestarts})`);
|
|
105
|
+
if (worker.status === 'running' && worker.lastStartedAt) {
|
|
106
|
+
console.log(` Uptime: ${formatUptime(worker.lastStartedAt)}`);
|
|
107
|
+
}
|
|
108
|
+
if (worker.errorMessage) {
|
|
109
|
+
console.log(` Error: ${chalk.red(worker.errorMessage)}`);
|
|
110
|
+
}
|
|
111
|
+
console.log();
|
|
112
|
+
}
|
|
113
|
+
console.log(chalk.gray(`Total: ${response.workers.length} worker(s)`));
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
spinner.fail('Failed to fetch workers');
|
|
117
|
+
console.error(chalk.red(error instanceof Error ? error.message : 'Unknown error'));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// gazill worker create <name> --command --restart --env
|
|
121
|
+
export async function workerCreateCommand(name, options) {
|
|
122
|
+
const auth = await getAuth();
|
|
123
|
+
if (!auth?.token) {
|
|
124
|
+
console.log(chalk.red('Not logged in. Run `gazill login` first.'));
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
if (!options?.command) {
|
|
128
|
+
console.log(chalk.red('Command is required. Use --command "node worker.js"'));
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
const spinner = ora('Creating worker...').start();
|
|
132
|
+
try {
|
|
133
|
+
const projectId = await getProjectId();
|
|
134
|
+
if (!projectId) {
|
|
135
|
+
spinner.stop();
|
|
136
|
+
console.log(chalk.red('No project found. Run from a project directory.'));
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
const body = {
|
|
140
|
+
name,
|
|
141
|
+
command: options.command,
|
|
142
|
+
environment: options.env || 'development',
|
|
143
|
+
};
|
|
144
|
+
if (options.restart) {
|
|
145
|
+
body.restartPolicy = options.restart;
|
|
146
|
+
}
|
|
147
|
+
const response = await workerApiRequest(`/api/projects/${projectId}/workers`, { method: 'POST', body });
|
|
148
|
+
spinner.succeed(`Created worker '${chalk.cyan(response.worker.name)}'`);
|
|
149
|
+
console.log();
|
|
150
|
+
console.log(chalk.gray(' Command:'), response.worker.command);
|
|
151
|
+
console.log(chalk.gray(' Restart:'), response.worker.restartPolicy);
|
|
152
|
+
console.log(chalk.gray(' Status:'), chalk.gray('stopped'));
|
|
153
|
+
console.log();
|
|
154
|
+
console.log(chalk.gray('Use `gazill worker start ' + name + '` to start the worker.'));
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
spinner.fail('Failed to create worker');
|
|
158
|
+
console.error(chalk.red(error instanceof Error ? error.message : 'Unknown error'));
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
// gazill worker update <name> --command --restart --env
|
|
162
|
+
export async function workerUpdateCommand(name, options) {
|
|
163
|
+
const auth = await getAuth();
|
|
164
|
+
if (!auth?.token) {
|
|
165
|
+
console.log(chalk.red('Not logged in. Run `gazill login` first.'));
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
const spinner = ora('Updating worker...').start();
|
|
169
|
+
try {
|
|
170
|
+
const projectId = await getProjectId();
|
|
171
|
+
if (!projectId) {
|
|
172
|
+
spinner.stop();
|
|
173
|
+
console.log(chalk.red('No project found. Run from a project directory.'));
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
// Find worker by name
|
|
177
|
+
const env = options?.env || 'development';
|
|
178
|
+
const listResponse = await workerApiRequest(`/api/projects/${projectId}/workers?environment=${env}`);
|
|
179
|
+
const worker = listResponse.workers.find(w => w.name === name);
|
|
180
|
+
if (!worker) {
|
|
181
|
+
spinner.fail(`Worker '${name}' not found in ${env} environment.`);
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
const body = {};
|
|
185
|
+
if (options?.command)
|
|
186
|
+
body.command = options.command;
|
|
187
|
+
if (options?.restart)
|
|
188
|
+
body.restartPolicy = options.restart;
|
|
189
|
+
const response = await workerApiRequest(`/api/projects/${projectId}/workers/${worker.id}`, { method: 'PATCH', body });
|
|
190
|
+
spinner.succeed(`Updated worker '${chalk.cyan(response.worker.name)}'`);
|
|
191
|
+
console.log(chalk.gray('Note: Worker was stopped. Use `gazill worker start ' + name + '` to restart.'));
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
spinner.fail('Failed to update worker');
|
|
195
|
+
console.error(chalk.red(error instanceof Error ? error.message : 'Unknown error'));
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// gazill worker delete <name> --env
|
|
199
|
+
export async function workerDeleteCommand(name, options) {
|
|
200
|
+
const auth = await getAuth();
|
|
201
|
+
if (!auth?.token) {
|
|
202
|
+
console.log(chalk.red('Not logged in. Run `gazill login` first.'));
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
const spinner = ora('Deleting worker...').start();
|
|
206
|
+
try {
|
|
207
|
+
const projectId = await getProjectId();
|
|
208
|
+
if (!projectId) {
|
|
209
|
+
spinner.stop();
|
|
210
|
+
console.log(chalk.red('No project found. Run from a project directory.'));
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
// Find worker by name
|
|
214
|
+
const env = options?.env || 'development';
|
|
215
|
+
const listResponse = await workerApiRequest(`/api/projects/${projectId}/workers?environment=${env}`);
|
|
216
|
+
const worker = listResponse.workers.find(w => w.name === name);
|
|
217
|
+
if (!worker) {
|
|
218
|
+
spinner.fail(`Worker '${name}' not found in ${env} environment.`);
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
await workerApiRequest(`/api/projects/${projectId}/workers/${worker.id}`, { method: 'DELETE' });
|
|
222
|
+
spinner.succeed(`Deleted worker '${chalk.cyan(name)}'`);
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
spinner.fail('Failed to delete worker');
|
|
226
|
+
console.error(chalk.red(error instanceof Error ? error.message : 'Unknown error'));
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
// gazill worker start <name> --env
|
|
230
|
+
export async function workerStartCommand(name, options) {
|
|
231
|
+
const auth = await getAuth();
|
|
232
|
+
if (!auth?.token) {
|
|
233
|
+
console.log(chalk.red('Not logged in. Run `gazill login` first.'));
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
const spinner = ora(`Starting worker '${name}'...`).start();
|
|
237
|
+
try {
|
|
238
|
+
const projectId = await getProjectId();
|
|
239
|
+
if (!projectId) {
|
|
240
|
+
spinner.stop();
|
|
241
|
+
console.log(chalk.red('No project found. Run from a project directory.'));
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
// Find worker by name
|
|
245
|
+
const env = options?.env || 'development';
|
|
246
|
+
const listResponse = await workerApiRequest(`/api/projects/${projectId}/workers?environment=${env}`);
|
|
247
|
+
const worker = listResponse.workers.find(w => w.name === name);
|
|
248
|
+
if (!worker) {
|
|
249
|
+
spinner.fail(`Worker '${name}' not found in ${env} environment.`);
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
const response = await workerApiRequest(`/api/projects/${projectId}/workers/${worker.id}/start`, { method: 'POST' });
|
|
253
|
+
spinner.succeed(`Started worker '${chalk.cyan(response.worker.name)}'`);
|
|
254
|
+
console.log(chalk.gray(' Container:'), response.worker.containerId?.substring(0, 12));
|
|
255
|
+
console.log(chalk.gray(' Status:'), chalk.green('running'));
|
|
256
|
+
}
|
|
257
|
+
catch (error) {
|
|
258
|
+
spinner.fail('Failed to start worker');
|
|
259
|
+
console.error(chalk.red(error instanceof Error ? error.message : 'Unknown error'));
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
// gazill worker stop <name> --env
|
|
263
|
+
export async function workerStopCommand(name, options) {
|
|
264
|
+
const auth = await getAuth();
|
|
265
|
+
if (!auth?.token) {
|
|
266
|
+
console.log(chalk.red('Not logged in. Run `gazill login` first.'));
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
const spinner = ora(`Stopping worker '${name}'...`).start();
|
|
270
|
+
try {
|
|
271
|
+
const projectId = await getProjectId();
|
|
272
|
+
if (!projectId) {
|
|
273
|
+
spinner.stop();
|
|
274
|
+
console.log(chalk.red('No project found. Run from a project directory.'));
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
// Find worker by name
|
|
278
|
+
const env = options?.env || 'development';
|
|
279
|
+
const listResponse = await workerApiRequest(`/api/projects/${projectId}/workers?environment=${env}`);
|
|
280
|
+
const worker = listResponse.workers.find(w => w.name === name);
|
|
281
|
+
if (!worker) {
|
|
282
|
+
spinner.fail(`Worker '${name}' not found in ${env} environment.`);
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
const response = await workerApiRequest(`/api/projects/${projectId}/workers/${worker.id}/stop`, { method: 'POST' });
|
|
286
|
+
spinner.succeed(`Stopped worker '${chalk.cyan(response.worker.name)}'`);
|
|
287
|
+
console.log(chalk.gray(' Status:'), chalk.gray('stopped'));
|
|
288
|
+
}
|
|
289
|
+
catch (error) {
|
|
290
|
+
spinner.fail('Failed to stop worker');
|
|
291
|
+
console.error(chalk.red(error instanceof Error ? error.message : 'Unknown error'));
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
// gazill worker restart <name> --env
|
|
295
|
+
export async function workerRestartCommand(name, options) {
|
|
296
|
+
const auth = await getAuth();
|
|
297
|
+
if (!auth?.token) {
|
|
298
|
+
console.log(chalk.red('Not logged in. Run `gazill login` first.'));
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
const spinner = ora(`Restarting worker '${name}'...`).start();
|
|
302
|
+
try {
|
|
303
|
+
const projectId = await getProjectId();
|
|
304
|
+
if (!projectId) {
|
|
305
|
+
spinner.stop();
|
|
306
|
+
console.log(chalk.red('No project found. Run from a project directory.'));
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
// Find worker by name
|
|
310
|
+
const env = options?.env || 'development';
|
|
311
|
+
const listResponse = await workerApiRequest(`/api/projects/${projectId}/workers?environment=${env}`);
|
|
312
|
+
const worker = listResponse.workers.find(w => w.name === name);
|
|
313
|
+
if (!worker) {
|
|
314
|
+
spinner.fail(`Worker '${name}' not found in ${env} environment.`);
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
const response = await workerApiRequest(`/api/projects/${projectId}/workers/${worker.id}/restart`, { method: 'POST' });
|
|
318
|
+
spinner.succeed(`Restarted worker '${chalk.cyan(response.worker.name)}'`);
|
|
319
|
+
console.log(chalk.gray(' Container:'), response.worker.containerId?.substring(0, 12));
|
|
320
|
+
console.log(chalk.gray(' Status:'), chalk.green('running'));
|
|
321
|
+
}
|
|
322
|
+
catch (error) {
|
|
323
|
+
spinner.fail('Failed to restart worker');
|
|
324
|
+
console.error(chalk.red(error instanceof Error ? error.message : 'Unknown error'));
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
// gazill worker logs <name> --lines --follow --env
|
|
328
|
+
export async function workerLogsCommand(name, options) {
|
|
329
|
+
const auth = await getAuth();
|
|
330
|
+
if (!auth?.token) {
|
|
331
|
+
console.log(chalk.red('Not logged in. Run `gazill login` first.'));
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
const spinner = ora('Fetching logs...').start();
|
|
335
|
+
try {
|
|
336
|
+
const projectId = await getProjectId();
|
|
337
|
+
if (!projectId) {
|
|
338
|
+
spinner.stop();
|
|
339
|
+
console.log(chalk.red('No project found. Run from a project directory.'));
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
// Find worker by name
|
|
343
|
+
const env = options?.env || 'development';
|
|
344
|
+
const listResponse = await workerApiRequest(`/api/projects/${projectId}/workers?environment=${env}`);
|
|
345
|
+
const worker = listResponse.workers.find(w => w.name === name);
|
|
346
|
+
if (!worker) {
|
|
347
|
+
spinner.fail(`Worker '${name}' not found in ${env} environment.`);
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
const lines = options?.lines || '100';
|
|
351
|
+
const response = await workerApiRequest(`/api/projects/${projectId}/workers/${worker.id}/logs?lines=${lines}`);
|
|
352
|
+
spinner.stop();
|
|
353
|
+
if (response.logs.length === 0) {
|
|
354
|
+
console.log(chalk.yellow('No logs available.'));
|
|
355
|
+
if (worker.status !== 'running') {
|
|
356
|
+
console.log(chalk.gray('Worker is not running. Start it with `gazill worker start ' + name + '`'));
|
|
357
|
+
}
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
// Print logs
|
|
361
|
+
for (const line of response.logs) {
|
|
362
|
+
// Docker logs have 8-byte header, try to clean it up
|
|
363
|
+
const cleanLine = line.replace(/^[\x00-\x1F]+/, '').trim();
|
|
364
|
+
if (cleanLine) {
|
|
365
|
+
console.log(cleanLine);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
// Note: --follow is not implemented in this version
|
|
369
|
+
// Would require WebSocket or SSE connection
|
|
370
|
+
if (options?.follow) {
|
|
371
|
+
console.log();
|
|
372
|
+
console.log(chalk.yellow('Note: --follow is not yet supported. Showing recent logs only.'));
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
catch (error) {
|
|
376
|
+
spinner.fail('Failed to fetch logs');
|
|
377
|
+
console.error(chalk.red(error instanceof Error ? error.message : 'Unknown error'));
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
//# sourceMappingURL=worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/commands/worker.ts"],"names":[],"mappings":"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"}
|