anycloud 0.0.3 → 0.0.5

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.
Files changed (68) hide show
  1. package/dist/cli/commands/config/edit.js +15 -0
  2. package/dist/cli/commands/config/edit.js.map +1 -1
  3. package/dist/cli/commands/config/list.js +53 -18
  4. package/dist/cli/commands/config/list.js.map +1 -1
  5. package/dist/cli/commands/config/new.js +21 -0
  6. package/dist/cli/commands/config/new.js.map +1 -1
  7. package/dist/cli/commands/config/remove.js +10 -0
  8. package/dist/cli/commands/config/remove.js.map +1 -1
  9. package/dist/cli/commands/credentials/delete.js +10 -0
  10. package/dist/cli/commands/credentials/delete.js.map +1 -1
  11. package/dist/cli/commands/credentials/edit.js +16 -0
  12. package/dist/cli/commands/credentials/edit.js.map +1 -1
  13. package/dist/cli/commands/credentials/list.js +35 -13
  14. package/dist/cli/commands/credentials/list.js.map +1 -1
  15. package/dist/cli/commands/credentials/new.js +25 -0
  16. package/dist/cli/commands/credentials/new.js.map +1 -1
  17. package/dist/cli/commands/daemon/index.js +8 -6
  18. package/dist/cli/commands/daemon/index.js.map +1 -1
  19. package/dist/cli/commands/list.js +70 -19
  20. package/dist/cli/commands/list.js.map +1 -1
  21. package/dist/cli/commands/login.js +10 -0
  22. package/dist/cli/commands/login.js.map +1 -1
  23. package/dist/cli/commands/logs.js +95 -10
  24. package/dist/cli/commands/logs.js.map +1 -1
  25. package/dist/cli/commands/run.js +110 -0
  26. package/dist/cli/commands/run.js.map +1 -0
  27. package/dist/cli/commands/serve.js +15 -0
  28. package/dist/cli/commands/serve.js.map +1 -0
  29. package/dist/cli/commands/status.js +113 -0
  30. package/dist/cli/commands/status.js.map +1 -0
  31. package/dist/cli/commands/terminate.js +122 -8
  32. package/dist/cli/commands/terminate.js.map +1 -1
  33. package/dist/cli/commands/upgrade.js +66 -8
  34. package/dist/cli/commands/upgrade.js.map +1 -1
  35. package/dist/cli/index.js +6 -4
  36. package/dist/cli/index.js.map +1 -1
  37. package/dist/cli/services/api-client.js +51 -49
  38. package/dist/cli/services/api-client.js.map +1 -1
  39. package/dist/cli/services/config.js +2 -0
  40. package/dist/cli/services/config.js.map +1 -1
  41. package/dist/cli/services/non-interactive.js +3 -3
  42. package/dist/cli/services/non-interactive.js.map +1 -1
  43. package/dist/cli/services/oauth.js +4 -5
  44. package/dist/cli/services/oauth.js.map +1 -1
  45. package/dist/cli/utils/env-parser.js +27 -0
  46. package/dist/cli/utils/env-parser.js.map +1 -0
  47. package/dist/cli/utils/output.js +42 -0
  48. package/dist/cli/utils/output.js.map +1 -1
  49. package/dist/daemon/cluster.js +122 -17
  50. package/dist/daemon/cluster.js.map +1 -1
  51. package/dist/daemon/docker.js +62 -21
  52. package/dist/daemon/docker.js.map +1 -1
  53. package/dist/daemon/preemption.js +127 -0
  54. package/dist/daemon/preemption.js.map +1 -0
  55. package/dist/daemon/server.js +128 -16
  56. package/dist/daemon/server.js.map +1 -1
  57. package/dist/shared/assets/clouds/azure/regions-per-type.json +21584 -1117
  58. package/dist/shared/id-generator.js +20 -0
  59. package/dist/shared/id-generator.js.map +1 -0
  60. package/dist/shared/types.js +5 -1
  61. package/dist/shared/types.js.map +1 -1
  62. package/package.json +16 -8
  63. package/dist/cli/commands/daemon/start.js +0 -32
  64. package/dist/cli/commands/daemon/start.js.map +0 -1
  65. package/dist/cli/commands/job.js +0 -71
  66. package/dist/cli/commands/job.js.map +0 -1
  67. package/dist/cli/commands/new.js +0 -15
  68. package/dist/cli/commands/new.js.map +0 -1
@@ -7,17 +7,17 @@ import { log } from './logger.js';
7
7
  import { generateSelfSignedCert } from './cert.js';
8
8
  import { DockerManager } from './docker.js';
9
9
  import { MetricsCollector } from './metrics.js';
10
- import { ClusterCoordinator } from './cluster.js';
11
- const CONTROL_PORT = 4142;
10
+ import { Coordinator } from './cluster.js';
11
+ export const CONTROL_PORT = 4142;
12
12
  let dockerManager;
13
13
  let metricsCollector;
14
14
  let clusterCoordinator;
15
15
  /**
16
- * Middleware to authenticate requests with cluster secret
16
+ * Middleware to authenticate requests with deployment secret
17
17
  */
18
- function authenticateRequest(clusterSecret) {
18
+ function authenticateRequest(deploymentSecret) {
19
19
  return (req, res, next) => {
20
- const providedSecret = req.headers[clusterSecret.toLowerCase()];
20
+ const providedSecret = req.headers[deploymentSecret.toLowerCase()];
21
21
  if (providedSecret !== 'true') {
22
22
  log.warn('Unauthorized request', { path: req.path, ip: req.ip });
23
23
  return res.status(401).json({ error: 'Unauthorized' });
@@ -25,18 +25,22 @@ function authenticateRequest(clusterSecret) {
25
25
  next();
26
26
  };
27
27
  }
28
+ // ============================================================================
29
+ // Application Factory
30
+ // ============================================================================
28
31
  /**
29
- * Start the daemon HTTP server
32
+ * Creates and configures the Express application.
33
+ * Exported for testability - doesn't start the server.
30
34
  */
31
- export async function startServer(clusterSecret, conductorUrl) {
35
+ export function createApp(deploymentSecret, conductorUrl) {
32
36
  const app = express();
33
37
  app.use(express.json({ limit: '100mb' }));
34
38
  // Authentication middleware
35
- app.use(authenticateRequest(clusterSecret));
39
+ app.use(authenticateRequest(deploymentSecret));
36
40
  // Initialize managers
37
41
  dockerManager = new DockerManager();
38
42
  metricsCollector = new MetricsCollector();
39
- clusterCoordinator = new ClusterCoordinator(clusterSecret, conductorUrl);
43
+ clusterCoordinator = new Coordinator(deploymentSecret, conductorUrl);
40
44
  /**
41
45
  * GET /health
42
46
  * Basic health check - is the daemon alive?
@@ -45,10 +49,10 @@ export async function startServer(clusterSecret, conductorUrl) {
45
49
  res.json({ status: 'healthy', timestamp: Date.now() });
46
50
  });
47
51
  /**
48
- * GET /clusterHealth
52
+ * GET /deploymentHealth
49
53
  * Check if the application container is running and healthy
50
54
  */
51
- app.get('/clusterHealth', async (req, res) => {
55
+ app.get('/deploymentHealth', async (req, res) => {
52
56
  try {
53
57
  const isHealthy = await dockerManager.isContainerHealthy();
54
58
  const metrics = await metricsCollector.collect();
@@ -69,6 +73,25 @@ export async function startServer(clusterSecret, conductorUrl) {
69
73
  res.status(500).json({ status: 'error', error: String(error) });
70
74
  }
71
75
  });
76
+ /**
77
+ * GET /logs
78
+ * Get Docker container logs
79
+ */
80
+ app.get('/logs', async (req, res) => {
81
+ try {
82
+ const tail = req.query.tail ? parseInt(req.query.tail) : 100;
83
+ log.info('Fetching container logs', { tail });
84
+ const logs = await dockerManager.getLogs(tail);
85
+ res.json(logs);
86
+ }
87
+ catch (error) {
88
+ log.error('Failed to fetch logs', error);
89
+ const errorResponse = {
90
+ error: error instanceof Error ? error.message : String(error),
91
+ };
92
+ res.status(500).json(errorResponse);
93
+ }
94
+ });
72
95
  /**
73
96
  * POST /start
74
97
  * Receive deployment configuration and start the container
@@ -77,21 +100,24 @@ export async function startServer(clusterSecret, conductorUrl) {
77
100
  try {
78
101
  const props = req.body;
79
102
  log.info('Received start command', {
80
- clusterId: props.clusterId,
103
+ id: props.id,
81
104
  image: props.image,
82
105
  });
83
106
  if (!props.image) {
84
107
  throw new Error('Image parameter is required');
85
108
  }
86
109
  // Pull and run container from image
87
- await dockerManager.runFromImage(props.clusterId, props.image, props.domain, props.deploymentType);
88
- // Start cluster coordination (metrics, scaling, etc.)
110
+ await dockerManager.runFromImage(props);
111
+ // Start deployment coordination (metrics, scaling, etc.)
89
112
  await clusterCoordinator.start(props);
90
- res.json({ status: 'started', clusterId: props.clusterId });
113
+ res.sendStatus(200);
91
114
  }
92
115
  catch (error) {
93
116
  log.error('Failed to start', error);
94
- res.status(500).json({ error: String(error) });
117
+ const errorResponse = {
118
+ error: error instanceof Error ? error.message : String(error),
119
+ };
120
+ res.status(500).json(errorResponse);
95
121
  }
96
122
  });
97
123
  /**
@@ -101,10 +127,82 @@ export async function startServer(clusterSecret, conductorUrl) {
101
127
  log.error('Unhandled error', err);
102
128
  res.status(500).json({ error: err.message });
103
129
  });
130
+ return app;
131
+ }
132
+ // ============================================================================
133
+ // Process-Level Error Handlers
134
+ // ============================================================================
135
+ /**
136
+ * Sets up process-level error handlers for graceful degradation.
137
+ * Exported for testability.
138
+ */
139
+ export function setupProcessHandlers() {
140
+ // Process-level error handlers to prevent crashes
141
+ process.on('uncaughtException', (error) => {
142
+ log.error('Uncaught exception - shutting down gracefully', {
143
+ error: error.message,
144
+ stack: error.stack,
145
+ });
146
+ // For uncaught exceptions, we should exit as the process is in an unknown state
147
+ // Give time for logs to flush
148
+ setTimeout(() => {
149
+ process.exit(1);
150
+ }, 1000);
151
+ });
152
+ process.on('unhandledRejection', (reason) => {
153
+ log.warn('Unhandled promise rejection', {
154
+ reason: String(reason),
155
+ });
156
+ // Log but don't exit - might be a background task
157
+ // Note: Future Node.js versions will exit on unhandled rejections
158
+ });
159
+ }
160
+ // ============================================================================
161
+ // Cluster Coordinator Access
162
+ // ============================================================================
163
+ /**
164
+ * Get the cluster coordinator instance.
165
+ * Exported for shutdown sequence.
166
+ */
167
+ export function getCoordinator() {
168
+ return clusterCoordinator;
169
+ }
170
+ // ============================================================================
171
+ // Server Startup
172
+ // ============================================================================
173
+ /**
174
+ * Start the daemon HTTPS server.
175
+ * Used by CLI for backwards compatibility.
176
+ */
177
+ export async function startServer(deploymentSecret, conductorUrl) {
178
+ // Setup process handlers first
179
+ setupProcessHandlers();
180
+ const app = createApp(deploymentSecret, conductorUrl);
104
181
  // Generate self-signed SSL certificate
105
182
  const { cert, key } = generateSelfSignedCert();
106
183
  // Start HTTPS server
107
184
  const server = https.createServer({ cert, key }, app);
185
+ // Graceful shutdown handlers
186
+ const shutdown = async () => {
187
+ log.info('Shutdown signal received, shutting down gracefully');
188
+ // Stop coordinator intervals
189
+ const coordinator = getCoordinator();
190
+ if (coordinator) {
191
+ await coordinator.stop();
192
+ }
193
+ // Close server
194
+ server.close(() => {
195
+ log.info('HTTPS server closed');
196
+ process.exit(0);
197
+ });
198
+ // Force exit if graceful shutdown takes too long
199
+ setTimeout(() => {
200
+ log.error('Graceful shutdown timed out, forcing exit');
201
+ process.exit(1);
202
+ }, 10000);
203
+ };
204
+ process.on('SIGTERM', shutdown);
205
+ process.on('SIGINT', shutdown);
108
206
  await new Promise((resolve) => {
109
207
  server.listen(CONTROL_PORT, () => {
110
208
  log.info(`Daemon control port listening on https://0.0.0.0:${CONTROL_PORT}`);
@@ -112,4 +210,18 @@ export async function startServer(clusterSecret, conductorUrl) {
112
210
  });
113
211
  });
114
212
  }
213
+ // ============================================================================
214
+ // Server Startup (only when run directly)
215
+ // ============================================================================
216
+ // Only start server if this file is run directly (not imported)
217
+ if (import.meta.url === `file://${process.argv[1]}`) {
218
+ // Parse command line arguments
219
+ const deploymentSecret = process.argv[2];
220
+ const conductorUrl = process.argv[3];
221
+ if (!deploymentSecret || !conductorUrl) {
222
+ console.error('Usage: node server.js <deploymentSecret> <conductorUrl>');
223
+ process.exit(1);
224
+ }
225
+ await startServer(deploymentSecret, conductorUrl);
226
+ }
115
227
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/daemon/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/daemon/server.ts"],"names":[],"mappings":"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"}