krsyer-server-monitor-pro 1.0.27 → 1.0.29
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/monitor.js +7 -0
- package/package.json +9 -4
- package/DEPLOY_GUIDE.md +0 -68
- package/bin/cli.js +0 -84
- package/guestguru-api/.idea/guestguru-api.iml +0 -9
- package/guestguru-api/.idea/misc.xml +0 -6
- package/guestguru-api/.idea/modules.xml +0 -8
- package/guestguru-api/.idea/vcs.xml +0 -6
- package/guestguru-api/API_DESIGN_GUIDE.md +0 -140
- package/guestguru-api/API_DOCUMENTATION.md +0 -504
- package/guestguru-api/API_REQUIREMENTS_TENANTS.md +0 -110
- package/guestguru-api/AVAILABLE_TENANT_ENDPOINTS.md +0 -137
- package/guestguru-api/BACKEND_INSTRUCTIONS.md +0 -77
- package/guestguru-api/DINING_MODULE_INTEGRATION.md +0 -175
- package/guestguru-api/FRONTEND_FINANCE_MODULE.md +0 -151
- package/guestguru-api/README.md +0 -93
- package/guestguru-api/app.json +0 -12
- package/guestguru-api/database.sqlite +0 -0
- package/guestguru-api/eas.json +0 -21
- package/guestguru-api/ecosystem.config.js +0 -19
- package/guestguru-api/fix_db_schema.js +0 -77
- package/guestguru-api/list_columns.js +0 -27
- package/guestguru-api/package.json +0 -34
- package/guestguru-api/postman_backend_v2.json +0 -1745
- package/guestguru-api/postman_collection.json +0 -477
- package/guestguru-api/postman_environment.json +0 -17
- package/guestguru-api/public/icon.png +0 -0
- package/guestguru-api/public/icon_b64.txt +0 -1
- package/guestguru-api/readd_column.js +0 -27
- package/guestguru-api/server.js +0 -263
- package/guestguru-api/test_cashfree_connection.js +0 -52
- package/lib/controllers/cloudflareController.js +0 -1
- package/lib/controllers/dockerController.js +0 -1
- package/lib/controllers/networkController.js +0 -1
- package/lib/controllers/serverController.js +0 -1
- package/lib/ecosystem.config.js +0 -1
- package/lib/middleware/saasAuth.js +0 -1
- package/lib/public/login.html +0 -99
- package/lib/public/payment.html +0 -152
- package/lib/public/script.js +0 -1180
- package/lib/public/style.css +0 -1045
- package/lib/routes/cloudflareRoutes.js +0 -1
- package/lib/routes/dockerRoutes.js +0 -1
- package/lib/routes/networkRoutes.js +0 -1
- package/lib/routes/serverRoutes.js +0 -1
- package/lib/server.js +0 -1
- package/lib/services/cashfreeService.js +0 -1
- package/lib/views/activate.html +0 -109
- package/lib/views/index.html +0 -552
- package/license-portal/.env.example +0 -15
- package/license-portal/README.md +0 -93
- package/license-portal/ecosystem.config.js +0 -16
- package/license-portal/package.json +0 -22
- package/license-portal/server.js +0 -306
- package/license-portal/services/emailService.js +0 -126
- package/license-portal/views/pricing.html +0 -358
- package/temp_cf_method.js +0 -48
package/lib/views/index.html
DELETED
|
@@ -1,552 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
|
|
4
|
-
<head>
|
|
5
|
-
<meta charset="UTF-8">
|
|
6
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
7
|
-
<title>Server Monitor Dashboard</title>
|
|
8
|
-
<link rel="stylesheet" href="style.css">
|
|
9
|
-
<!-- Ionicons -->
|
|
10
|
-
<script type="module" src="https://cdn.jsdelivr.net/npm/ionicons@7.1.0/dist/ionicons/ionicons.esm.js"></script>
|
|
11
|
-
<script nomodule src="https://cdn.jsdelivr.net/npm/ionicons@7.1.0/dist/ionicons/ionicons.js"></script>
|
|
12
|
-
<!-- Terminal -->
|
|
13
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/xterm@5.3.0/css/xterm.css" />
|
|
14
|
-
<script src="https://cdn.jsdelivr.net/npm/xterm@5.3.0/lib/xterm.js"></script>
|
|
15
|
-
<script src="https://cdn.jsdelivr.net/npm/xterm-addon-fit@0.8.0/lib/xterm-addon-fit.js"></script>
|
|
16
|
-
<script src="/socket.io/socket.io.js"></script>
|
|
17
|
-
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
|
18
|
-
</head>
|
|
19
|
-
|
|
20
|
-
<body>
|
|
21
|
-
<div class="app-layout">
|
|
22
|
-
<!-- Sidebar -->
|
|
23
|
-
<nav class="sidebar">
|
|
24
|
-
<div class="sidebar-header">
|
|
25
|
-
<h2><ion-icon name="flash"></ion-icon> <span>Monitor Pro</span></h2>
|
|
26
|
-
<div id="license-info-header"
|
|
27
|
-
style="margin-top: 10px; font-size: 0.8rem; color: #000000; display: none;">
|
|
28
|
-
<span id="license-plan-badge"
|
|
29
|
-
style="background: #e2e8f0; color: #000000; padding: 2px 8px; border-radius: 12px; font-weight: bold; border: 1px solid #cbd5e1;">Pro</span>
|
|
30
|
-
<span id="license-expiry-display"
|
|
31
|
-
style="color: #000000; margin-left: 8px; font-size: 0.75rem; font-weight: 600;"></span>
|
|
32
|
-
</div>
|
|
33
|
-
</div>
|
|
34
|
-
<ul class="nav-links">
|
|
35
|
-
<li><a href="#" class="nav-link active" data-target="view-server">
|
|
36
|
-
<ion-icon name="grid-outline"></ion-icon> <span>Dashboard</span></a></li>
|
|
37
|
-
<li><a href="#" class="nav-link" data-target="view-network">
|
|
38
|
-
<ion-icon name="globe-outline"></ion-icon> <span>Networks</span></a></li>
|
|
39
|
-
<li><a href="#" class="nav-link" data-target="view-cloudflare">
|
|
40
|
-
<ion-icon name="shield-checkmark-outline"></ion-icon> <span>Cloudflare</span></a></li>
|
|
41
|
-
<li><a href="#" class="nav-link" data-target="view-databases">
|
|
42
|
-
<ion-icon name="server-outline"></ion-icon> <span>Databases</span></a></li>
|
|
43
|
-
<li><a href="#" class="nav-link" data-target="view-docker">
|
|
44
|
-
<ion-icon name="logo-docker"></ion-icon> <span>Docker</span></a></li>
|
|
45
|
-
<li><a href="#" class="nav-link" data-target="view-apps">
|
|
46
|
-
<ion-icon name="apps-outline"></ion-icon> <span>Applications</span></a></li>
|
|
47
|
-
<li><a href="#" class="nav-link" data-target="view-terminal">
|
|
48
|
-
<ion-icon name="terminal-outline"></ion-icon> <span>Terminal</span></a></li>
|
|
49
|
-
<li><a href="#" class="nav-link" onclick="showChangePasswordModal()">
|
|
50
|
-
<ion-icon name="key-outline"></ion-icon> <span>Change Password</span></a></li>
|
|
51
|
-
</ul>
|
|
52
|
-
<div class="sidebar-footer">
|
|
53
|
-
<button onclick="logout()" class="logout-btn-sidebar">
|
|
54
|
-
<ion-icon name="log-out-outline"></ion-icon> <span>Sign Out</span>
|
|
55
|
-
</button>
|
|
56
|
-
<div style="margin-top: 15px; font-size: 0.75rem; color: #64748b; text-align: center;">
|
|
57
|
-
<span id="license-plan">Pro Plan</span>
|
|
58
|
-
<br>
|
|
59
|
-
<span id="license-expiry" style="font-size: 0.7rem;"></span>
|
|
60
|
-
</div>
|
|
61
|
-
</div>
|
|
62
|
-
</nav>
|
|
63
|
-
|
|
64
|
-
<!-- Main Content -->
|
|
65
|
-
<main class="main-content">
|
|
66
|
-
<header>
|
|
67
|
-
<div style="display: flex; justify-content: space-between; align-items: center;">
|
|
68
|
-
<div>
|
|
69
|
-
<h1 id="page-title">Dashboard</h1>
|
|
70
|
-
<p>System status and resource monitoring</p>
|
|
71
|
-
</div>
|
|
72
|
-
</div>
|
|
73
|
-
</header>
|
|
74
|
-
|
|
75
|
-
<div class="views-container">
|
|
76
|
-
<!-- [PAGE] Server Info -->
|
|
77
|
-
<div id="view-server" class="view-section active">
|
|
78
|
-
<div class="dashboard-grid">
|
|
79
|
-
<!-- System Card -->
|
|
80
|
-
<div class="card">
|
|
81
|
-
<div class="card-header">
|
|
82
|
-
<div class="card-title"><ion-icon name="hardware-chip-outline"
|
|
83
|
-
class="card-icon"></ion-icon> System Details</div>
|
|
84
|
-
</div>
|
|
85
|
-
<div class="card-content">
|
|
86
|
-
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 1.5rem;">
|
|
87
|
-
<div>
|
|
88
|
-
<div class="info-label">Hostname</div>
|
|
89
|
-
<div class="info-value" id="server-hostname">...</div>
|
|
90
|
-
</div>
|
|
91
|
-
<div>
|
|
92
|
-
<div class="info-label">Platform</div>
|
|
93
|
-
<div class="info-value" id="server-platform" style="font-size: 0.85rem;">...
|
|
94
|
-
</div>
|
|
95
|
-
</div>
|
|
96
|
-
<div>
|
|
97
|
-
<div class="info-label">Node JS</div>
|
|
98
|
-
<div class="info-value" id="node-version">...</div>
|
|
99
|
-
</div>
|
|
100
|
-
<div>
|
|
101
|
-
<div class="info-label">Uptime</div>
|
|
102
|
-
<div class="info-value" id="server-uptime">...</div>
|
|
103
|
-
</div>
|
|
104
|
-
</div>
|
|
105
|
-
</div>
|
|
106
|
-
</div>
|
|
107
|
-
|
|
108
|
-
<!-- OS Details Card -->
|
|
109
|
-
<div class="card">
|
|
110
|
-
<div class="card-header">
|
|
111
|
-
<div class="card-title"><ion-icon name="laptop-outline" class="card-icon"></ion-icon>
|
|
112
|
-
Operating System</div>
|
|
113
|
-
</div>
|
|
114
|
-
<div class="card-content">
|
|
115
|
-
<div style="margin-bottom: 1rem;">
|
|
116
|
-
<div class="info-label">OS Name</div>
|
|
117
|
-
<div class="info-value" id="os-name"
|
|
118
|
-
style="font-size: 1.1rem; color: var(--primary);">
|
|
119
|
-
Loading...</div>
|
|
120
|
-
</div>
|
|
121
|
-
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 1rem;">
|
|
122
|
-
<div>
|
|
123
|
-
<div class="info-label">Kernel</div>
|
|
124
|
-
<div class="info-value" id="os-kernel" style="font-size: 0.9rem;">...</div>
|
|
125
|
-
</div>
|
|
126
|
-
<div>
|
|
127
|
-
<div class="info-label">Architecture</div>
|
|
128
|
-
<div class="info-value" id="os-arch" style="font-size: 0.9rem;">...</div>
|
|
129
|
-
</div>
|
|
130
|
-
</div>
|
|
131
|
-
</div>
|
|
132
|
-
</div>
|
|
133
|
-
|
|
134
|
-
<!-- CPU Metrics -->
|
|
135
|
-
<div class="card">
|
|
136
|
-
<div class="card-header">
|
|
137
|
-
<div class="card-title"><ion-icon name="speedometer-outline"
|
|
138
|
-
class="card-icon"></ion-icon>
|
|
139
|
-
CPU Load</div>
|
|
140
|
-
</div>
|
|
141
|
-
<div class="card-content">
|
|
142
|
-
<div class="info-row">
|
|
143
|
-
<span class="info-label">Cores</span>
|
|
144
|
-
<span class="info-value" id="cpu-cores">...</span>
|
|
145
|
-
</div>
|
|
146
|
-
<div style="height: 150px; width: 100%;">
|
|
147
|
-
<canvas id="cpu-chart"></canvas>
|
|
148
|
-
</div>
|
|
149
|
-
<div id="cpu-model"
|
|
150
|
-
style="font-size: 0.75rem; color: var(--text-muted); margin-top: 0.5rem;">...</div>
|
|
151
|
-
</div>
|
|
152
|
-
</div>
|
|
153
|
-
|
|
154
|
-
<!-- RAM Metrics -->
|
|
155
|
-
<div class="card">
|
|
156
|
-
<div class="card-header">
|
|
157
|
-
<div class="card-title"><ion-icon name="analytics-outline" class="card-icon"></ion-icon>
|
|
158
|
-
Memory</div>
|
|
159
|
-
</div>
|
|
160
|
-
<div class="card-content">
|
|
161
|
-
<div class="info-row">
|
|
162
|
-
<span class="info-label">Used / Total</span>
|
|
163
|
-
<span class="info-value" id="mem-used">...</span>
|
|
164
|
-
</div>
|
|
165
|
-
<div style="height: 150px; width: 100%;">
|
|
166
|
-
<canvas id="mem-chart"></canvas>
|
|
167
|
-
</div>
|
|
168
|
-
</div>
|
|
169
|
-
</div>
|
|
170
|
-
<div class="card">
|
|
171
|
-
<div class="card-header">
|
|
172
|
-
<div class="card-title"><ion-icon name="server-outline" class="card-icon"></ion-icon>
|
|
173
|
-
Storage (SSD/HDD)</div>
|
|
174
|
-
</div>
|
|
175
|
-
<div class="card-content">
|
|
176
|
-
<div class="info-row">
|
|
177
|
-
<span class="info-label">Drive</span>
|
|
178
|
-
<span class="info-value" id="disk-drive">...</span>
|
|
179
|
-
</div>
|
|
180
|
-
<div class="info-row">
|
|
181
|
-
<span class="info-label">Used / Available</span>
|
|
182
|
-
<span class="info-value" id="disk-info">...</span>
|
|
183
|
-
</div>
|
|
184
|
-
<div style="height: 150px; width: 100%;">
|
|
185
|
-
<canvas id="disk-chart"></canvas>
|
|
186
|
-
</div>
|
|
187
|
-
</div>
|
|
188
|
-
</div>
|
|
189
|
-
</div>
|
|
190
|
-
</div>
|
|
191
|
-
|
|
192
|
-
<!-- [PAGE] Network -->
|
|
193
|
-
<div id="view-network" class="view-section">
|
|
194
|
-
<div class="dashboard-grid">
|
|
195
|
-
<!-- Network Info -->
|
|
196
|
-
<div class="card">
|
|
197
|
-
<div class="card-header">
|
|
198
|
-
<div class="card-title"><ion-icon name="globe-outline" class="card-icon"></ion-icon>
|
|
199
|
-
Network</div>
|
|
200
|
-
</div>
|
|
201
|
-
<div class="card-content">
|
|
202
|
-
<div class="info-row"><span class="info-label">Public IP</span><span class="info-value"
|
|
203
|
-
id="net-public">Loading...</span></div>
|
|
204
|
-
<div class="info-row" style="align-items: flex-start;"><span class="info-label">Local
|
|
205
|
-
IPs</span><span class="info-value" id="net-local"
|
|
206
|
-
style="text-align: right;">Loading...</span></div>
|
|
207
|
-
</div>
|
|
208
|
-
</div>
|
|
209
|
-
<!-- Network Scan -->
|
|
210
|
-
<div class="card">
|
|
211
|
-
<div class="card-header">
|
|
212
|
-
<div class="card-title"><ion-icon name="git-network-outline"
|
|
213
|
-
class="card-icon"></ion-icon>
|
|
214
|
-
Network Servers</div>
|
|
215
|
-
<button class="action-btn restart-btn" onclick="scanNetwork()" title="Scan Network"
|
|
216
|
-
id="scan-btn"><ion-icon name="scan-outline"></ion-icon> Scan</button>
|
|
217
|
-
</div>
|
|
218
|
-
<div class="card-content">
|
|
219
|
-
<div id="network-list" class="network-list">
|
|
220
|
-
<div style="text-align:center; color: var(--text-secondary); font-size: 0.9rem;">
|
|
221
|
-
Click scan to find servers</div>
|
|
222
|
-
</div>
|
|
223
|
-
</div>
|
|
224
|
-
</div>
|
|
225
|
-
</div>
|
|
226
|
-
</div>
|
|
227
|
-
|
|
228
|
-
<!-- [PAGE] Cloudflare -->
|
|
229
|
-
<div id="view-cloudflare" class="view-section">
|
|
230
|
-
<div id="section-cloudflare" class="cloudflare-layout">
|
|
231
|
-
<!-- Column 1: Config Form -->
|
|
232
|
-
<div class="card">
|
|
233
|
-
<div class="card-header">
|
|
234
|
-
<div class="card-title"><ion-icon name="options-outline" class="card-icon"></ion-icon>
|
|
235
|
-
Add Route</div>
|
|
236
|
-
</div>
|
|
237
|
-
<div class="card-content">
|
|
238
|
-
<div id="cf-not-installed"
|
|
239
|
-
style="display: none; text-align: center; color: var(--danger); padding: 1rem;">
|
|
240
|
-
<p>cloudflared not detected</p>
|
|
241
|
-
</div>
|
|
242
|
-
<div class="config-form" id="cf-installed-content"
|
|
243
|
-
style="display: flex; flex-direction: column; gap: 1rem;">
|
|
244
|
-
<div class="form-group">
|
|
245
|
-
<label>Tunnel Name</label>
|
|
246
|
-
<select id="cf-tunnel" class="dark-input">
|
|
247
|
-
<option value="" disabled selected>Loading...</option>
|
|
248
|
-
</select>
|
|
249
|
-
</div>
|
|
250
|
-
<div class="form-group">
|
|
251
|
-
<label>Config File (.yml)</label>
|
|
252
|
-
<input type="text" id="cf-config" placeholder="Config File (.yml)"
|
|
253
|
-
class="dark-input">
|
|
254
|
-
</div>
|
|
255
|
-
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 1rem;">
|
|
256
|
-
<div class="form-group">
|
|
257
|
-
<label>Hostname</label>
|
|
258
|
-
<input type="text" id="cf-hostname" placeholder="e.g. app.example.com"
|
|
259
|
-
class="dark-input">
|
|
260
|
-
</div>
|
|
261
|
-
<div class="form-group">
|
|
262
|
-
<label>Local Port</label>
|
|
263
|
-
<input type="number" id="cf-port" placeholder="e.g. 3000"
|
|
264
|
-
class="dark-input">
|
|
265
|
-
</div>
|
|
266
|
-
</div>
|
|
267
|
-
<div class="form-group">
|
|
268
|
-
<label>Target IP</label>
|
|
269
|
-
<input type="text" id="cf-ip" placeholder="Target IP" class="dark-input"
|
|
270
|
-
value="localhost">
|
|
271
|
-
</div>
|
|
272
|
-
<button class="action-btn connect-btn" onclick="addCloudflareProxy()"
|
|
273
|
-
style="width: 100%; margin-top: 1rem;">
|
|
274
|
-
Add & Restart Tunnel
|
|
275
|
-
</button>
|
|
276
|
-
<div id="cf-logs" class="console-logs" style="display:none; margin-top: 1rem;">
|
|
277
|
-
</div>
|
|
278
|
-
</div>
|
|
279
|
-
</div>
|
|
280
|
-
</div>
|
|
281
|
-
|
|
282
|
-
<!-- Column 2: Routes List -->
|
|
283
|
-
<div class="card">
|
|
284
|
-
<div class="card-header">
|
|
285
|
-
<div class="card-title">
|
|
286
|
-
<ion-icon name="list-outline" class="card-icon"></ion-icon>
|
|
287
|
-
Active Routes
|
|
288
|
-
</div>
|
|
289
|
-
<div style="display:flex; gap: 0.5rem; align-items:center;">
|
|
290
|
-
<select id="cf-files-dropdown" class="dark-input"
|
|
291
|
-
style="padding: 0.4rem 2rem 0.4rem 0.6rem; font-size: 0.85rem;"
|
|
292
|
-
onchange="fetchCloudflareRoutes()">
|
|
293
|
-
<option value="" disabled selected>Loading...</option>
|
|
294
|
-
</select>
|
|
295
|
-
<button class="action-btn" onclick="fetchCloudflareRoutes()" title="Refresh Routes">
|
|
296
|
-
<ion-icon name="refresh-outline"></ion-icon>
|
|
297
|
-
</button>
|
|
298
|
-
</div>
|
|
299
|
-
</div>
|
|
300
|
-
<div class="card-content">
|
|
301
|
-
<div id="cf-routes-list" class="network-list">
|
|
302
|
-
<div style="text-align:center; color: var(--text-secondary); padding: 2rem;">
|
|
303
|
-
Loading routes...
|
|
304
|
-
</div>
|
|
305
|
-
</div>
|
|
306
|
-
</div>
|
|
307
|
-
</div>
|
|
308
|
-
</div>
|
|
309
|
-
</div>
|
|
310
|
-
</div>
|
|
311
|
-
|
|
312
|
-
<!-- [PAGE] Databases -->
|
|
313
|
-
<div id="view-databases" class="view-section">
|
|
314
|
-
<div class="card">
|
|
315
|
-
<div class="card-header" style="flex-wrap: wrap; gap: 1rem;">
|
|
316
|
-
<div class="card-title"><ion-icon name="server-outline" class="card-icon"></ion-icon> Active
|
|
317
|
-
Database Services</div>
|
|
318
|
-
<div style="flex: 1; min-width: 250px;">
|
|
319
|
-
<div class="input-wrapper" style="margin: 0;">
|
|
320
|
-
<ion-icon name="search-outline"></ion-icon>
|
|
321
|
-
<input type="text" id="search-databases" placeholder="Search databases..."
|
|
322
|
-
class="dark-input" onkeyup="filterDatabases()"
|
|
323
|
-
style="padding-top: 0.6rem; padding-bottom: 0.6rem;">
|
|
324
|
-
</div>
|
|
325
|
-
</div>
|
|
326
|
-
</div>
|
|
327
|
-
<table class="apps-table host-table">
|
|
328
|
-
<thead>
|
|
329
|
-
<tr>
|
|
330
|
-
<th>Service</th>
|
|
331
|
-
<th>Status</th>
|
|
332
|
-
<th>Memory</th>
|
|
333
|
-
<th>CPU</th>
|
|
334
|
-
<th>Uptime</th>
|
|
335
|
-
<th>Port</th>
|
|
336
|
-
<th>Actions</th>
|
|
337
|
-
</tr>
|
|
338
|
-
</thead>
|
|
339
|
-
<tbody id="database-services-list">
|
|
340
|
-
<!-- DB services inserted here -->
|
|
341
|
-
</tbody>
|
|
342
|
-
</table>
|
|
343
|
-
</div>
|
|
344
|
-
</div>
|
|
345
|
-
|
|
346
|
-
<!-- [PAGE] Docker -->
|
|
347
|
-
<div id="view-docker" class="view-section">
|
|
348
|
-
<div class="card">
|
|
349
|
-
<div class="card-header" style="flex-wrap: wrap; gap: 1rem;">
|
|
350
|
-
<div class="card-title"><ion-icon name="logo-docker" class="card-icon"></ion-icon> Docker
|
|
351
|
-
Containers</div>
|
|
352
|
-
<div style="flex: 1; min-width: 250px; display: flex; gap: 0.5rem; align-items: center;">
|
|
353
|
-
<div class="input-wrapper" style="margin: 0; flex: 1;">
|
|
354
|
-
<ion-icon name="search-outline"></ion-icon>
|
|
355
|
-
<input type="text" id="search-docker" placeholder="Search containers..."
|
|
356
|
-
class="dark-input" onkeyup="filterDocker()"
|
|
357
|
-
style="padding-top: 0.6rem; padding-bottom: 0.6rem;">
|
|
358
|
-
</div>
|
|
359
|
-
<button class="action-btn restart-btn" onclick="showCreateContainer()"
|
|
360
|
-
title="Create Container" style="height: 40px; white-space: nowrap;">
|
|
361
|
-
<ion-icon name="add-circle-outline"></ion-icon> Create
|
|
362
|
-
</button>
|
|
363
|
-
</div>
|
|
364
|
-
</div>
|
|
365
|
-
<div id="create-container-form"
|
|
366
|
-
style="display:none; padding: 2rem; border-bottom: 2px solid var(--card-border); background: rgba(79, 70, 229, 0.02);">
|
|
367
|
-
<div
|
|
368
|
-
style="display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1.5rem; margin-bottom: 1.5rem;">
|
|
369
|
-
<div class="form-group">
|
|
370
|
-
<label>Docker Image *</label>
|
|
371
|
-
<input type="text" id="docker-image" placeholder="e.g. nginx:latest" class="dark-input"
|
|
372
|
-
style="width: 100%;">
|
|
373
|
-
</div>
|
|
374
|
-
<div class="form-group">
|
|
375
|
-
<label>Container Name</label>
|
|
376
|
-
<input type="text" id="docker-name" placeholder="e.g. my-web-app" class="dark-input"
|
|
377
|
-
style="width: 100%;">
|
|
378
|
-
</div>
|
|
379
|
-
<div class="form-group">
|
|
380
|
-
<label>Port Mapping</label>
|
|
381
|
-
<input type="text" id="docker-ports" placeholder="e.g. 8080:80" class="dark-input"
|
|
382
|
-
style="width: 100%;">
|
|
383
|
-
</div>
|
|
384
|
-
<div class="form-group">
|
|
385
|
-
<label>Restart Policy</label>
|
|
386
|
-
<select id="docker-restart" class="dark-input" style="width: 100%; height: 46px;">
|
|
387
|
-
<option value="no">no</option>
|
|
388
|
-
<option value="always">always</option>
|
|
389
|
-
<option value="unless-stopped">unless-stopped</option>
|
|
390
|
-
<option value="on-failure">on-failure</option>
|
|
391
|
-
</select>
|
|
392
|
-
</div>
|
|
393
|
-
</div>
|
|
394
|
-
|
|
395
|
-
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 1.5rem; margin-bottom: 1.5rem;">
|
|
396
|
-
<div class="form-group">
|
|
397
|
-
<label>Environment Variables (One per line)</label>
|
|
398
|
-
<textarea id="docker-env" placeholder="NODE_ENV=production PORT=3000"
|
|
399
|
-
class="dark-input" style="width: 100%; height: 100px; resize: vertical;"></textarea>
|
|
400
|
-
</div>
|
|
401
|
-
<div class="form-group">
|
|
402
|
-
<label>Volumes (One per line)</label>
|
|
403
|
-
<textarea id="docker-volumes" placeholder="/host/path:/container/path my-vol:/data"
|
|
404
|
-
class="dark-input" style="width: 100%; height: 100px; resize: vertical;"></textarea>
|
|
405
|
-
</div>
|
|
406
|
-
</div>
|
|
407
|
-
|
|
408
|
-
<div style="display: flex; justify-content: space-between; align-items: flex-end; gap: 1.5rem;">
|
|
409
|
-
<div class="form-group" style="flex: 1;">
|
|
410
|
-
<label>Network</label>
|
|
411
|
-
<input type="text" id="docker-network" placeholder="e.g. bridge" class="dark-input"
|
|
412
|
-
style="width: 100%;">
|
|
413
|
-
</div>
|
|
414
|
-
<button class="action-btn connect-btn" onclick="createContainer()"
|
|
415
|
-
style="height: 46px; padding: 0 2rem; font-weight: 800;">
|
|
416
|
-
<ion-icon name="rocket-outline"></ion-icon> Deploy Container
|
|
417
|
-
</button>
|
|
418
|
-
</div>
|
|
419
|
-
|
|
420
|
-
<div id="docker-creation-logs" class="console-logs" style="display:none; margin-top: 1.5rem;">
|
|
421
|
-
</div>
|
|
422
|
-
</div>
|
|
423
|
-
<table class="apps-table">
|
|
424
|
-
<thead>
|
|
425
|
-
<tr>
|
|
426
|
-
<th>Names</th>
|
|
427
|
-
<th>Image</th>
|
|
428
|
-
<th>Status</th>
|
|
429
|
-
<th>Ports</th>
|
|
430
|
-
<th>Actions</th>
|
|
431
|
-
</tr>
|
|
432
|
-
</thead>
|
|
433
|
-
<tbody id="docker-list"><!-- Docker containers inserted here --></tbody>
|
|
434
|
-
</table>
|
|
435
|
-
</div>
|
|
436
|
-
|
|
437
|
-
<!-- Docker Images Section -->
|
|
438
|
-
<div class="card" style="margin-top: 2rem;">
|
|
439
|
-
<div class="card-header" style="flex-wrap: wrap; gap: 1rem;">
|
|
440
|
-
<div class="card-title"><ion-icon name="images-outline" class="card-icon"></ion-icon> Docker
|
|
441
|
-
Images</div>
|
|
442
|
-
<div style="flex: 1; min-width: 250px;">
|
|
443
|
-
<div class="input-wrapper" style="margin: 0;">
|
|
444
|
-
<ion-icon name="search-outline"></ion-icon>
|
|
445
|
-
<input type="text" id="search-docker-images" placeholder="Search images..."
|
|
446
|
-
class="dark-input" onkeyup="filterDockerImages()"
|
|
447
|
-
style="padding-top: 0.6rem; padding-bottom: 0.6rem;">
|
|
448
|
-
</div>
|
|
449
|
-
</div>
|
|
450
|
-
</div>
|
|
451
|
-
<table class="apps-table">
|
|
452
|
-
<thead>
|
|
453
|
-
<tr>
|
|
454
|
-
<th>Repository</th>
|
|
455
|
-
<th>Tag</th>
|
|
456
|
-
<th>Image ID</th>
|
|
457
|
-
<th>Size</th>
|
|
458
|
-
<th>Actions</th>
|
|
459
|
-
</tr>
|
|
460
|
-
</thead>
|
|
461
|
-
<tbody id="docker-images-list"><!-- Docker images inserted here --></tbody>
|
|
462
|
-
</table>
|
|
463
|
-
</div>
|
|
464
|
-
</div>
|
|
465
|
-
|
|
466
|
-
<!-- [PAGE] Apps -->
|
|
467
|
-
<div id="view-apps" class="view-section">
|
|
468
|
-
<div class="card">
|
|
469
|
-
<div class="card-header" style="flex-wrap: wrap; gap: 1rem;">
|
|
470
|
-
<div class="card-title"><ion-icon name="apps-outline" class="card-icon"></ion-icon> Active
|
|
471
|
-
Applications (PM2)</div>
|
|
472
|
-
<div style="flex: 1; min-width: 250px;">
|
|
473
|
-
<div class="input-wrapper" style="margin: 0;">
|
|
474
|
-
<ion-icon name="search-outline"></ion-icon>
|
|
475
|
-
<input type="text" id="search-apps" placeholder="Search applications..."
|
|
476
|
-
class="dark-input" onkeyup="filterApps()"
|
|
477
|
-
style="padding-top: 0.6rem; padding-bottom: 0.6rem;">
|
|
478
|
-
</div>
|
|
479
|
-
</div>
|
|
480
|
-
</div>
|
|
481
|
-
<table class="apps-table">
|
|
482
|
-
<thead>
|
|
483
|
-
<tr>
|
|
484
|
-
<th>Name</th>
|
|
485
|
-
<th>Status</th>
|
|
486
|
-
<th>Memory</th>
|
|
487
|
-
<th>CPU</th>
|
|
488
|
-
<th>Uptime</th>
|
|
489
|
-
<th>Actions</th>
|
|
490
|
-
</tr>
|
|
491
|
-
</thead>
|
|
492
|
-
<tbody id="apps-list"><!-- Apps will be inserted here --></tbody>
|
|
493
|
-
</table>
|
|
494
|
-
</div>
|
|
495
|
-
|
|
496
|
-
<div class="card">
|
|
497
|
-
<div class="card-header" style="flex-wrap: wrap; gap: 1rem;">
|
|
498
|
-
<div class="card-title"><ion-icon name="server-outline" class="card-icon"></ion-icon> Active
|
|
499
|
-
Host Services (Ports)</div>
|
|
500
|
-
<div style="flex: 1; min-width: 250px;">
|
|
501
|
-
<div class="input-wrapper" style="margin: 0;">
|
|
502
|
-
<ion-icon name="search-outline"></ion-icon>
|
|
503
|
-
<input type="text" id="search-host" placeholder="Search services..." class="dark-input"
|
|
504
|
-
onkeyup="filterHostServices()" style="padding-top: 0.6rem; padding-bottom: 0.6rem;">
|
|
505
|
-
</div>
|
|
506
|
-
</div>
|
|
507
|
-
</div>
|
|
508
|
-
<table class="apps-table host-table">
|
|
509
|
-
<thead>
|
|
510
|
-
<tr>
|
|
511
|
-
<th>Service</th>
|
|
512
|
-
<th>Status</th>
|
|
513
|
-
<th>Memory</th>
|
|
514
|
-
<th>CPU</th>
|
|
515
|
-
<th>Domain</th>
|
|
516
|
-
<th>Port</th>
|
|
517
|
-
<th>Access</th>
|
|
518
|
-
<th>Actions</th>
|
|
519
|
-
</tr>
|
|
520
|
-
</thead>
|
|
521
|
-
<tbody id="host-services-list">
|
|
522
|
-
<!-- Host services inserted here -->
|
|
523
|
-
</tbody>
|
|
524
|
-
</table>
|
|
525
|
-
</div>
|
|
526
|
-
</div>
|
|
527
|
-
|
|
528
|
-
<!-- [PAGE] Terminal -->
|
|
529
|
-
<div id="view-terminal" class="view-section">
|
|
530
|
-
<div class="card" style="height: calc(100vh - 140px); display: flex; flex-direction: column;">
|
|
531
|
-
<div class="card-header">
|
|
532
|
-
<div class="card-title"><ion-icon name="terminal-outline" class="card-icon"></ion-icon> Remote
|
|
533
|
-
Terminal</div>
|
|
534
|
-
<div style="margin-left: auto; display: flex; gap: 1rem; align-items: center;">
|
|
535
|
-
<span style="font-size: 0.8rem; color: var(--text-muted);">Use 'su user' to switch
|
|
536
|
-
users</span>
|
|
537
|
-
</div>
|
|
538
|
-
</div>
|
|
539
|
-
<div class="card-content"
|
|
540
|
-
style="flex: 1; padding: 0; background: #000; overflow: hidden; border-radius: 0 0 12px 12px;">
|
|
541
|
-
<div id="terminal-container" style="width: 100%; height: 100%;"></div>
|
|
542
|
-
</div>
|
|
543
|
-
</div>
|
|
544
|
-
</div>
|
|
545
|
-
|
|
546
|
-
</div>
|
|
547
|
-
</main>
|
|
548
|
-
</div>
|
|
549
|
-
<script src="script.js?v=7"></script>
|
|
550
|
-
</body>
|
|
551
|
-
|
|
552
|
-
</html>
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
PORT=4000
|
|
2
|
-
NODE_ENV=production
|
|
3
|
-
|
|
4
|
-
# Your Cashfree Keys (The same ones)
|
|
5
|
-
CASHFREE_APP_ID=1164413cb8a8b0f8c98da00bd0f3144611
|
|
6
|
-
CASHFREE_SECRET_KEY=cfsk_ma_prod_126e046813270a58359788647a1ae315_bbef541f
|
|
7
|
-
|
|
8
|
-
# Where this portal is hosted
|
|
9
|
-
APP_URL=https://mulasoft.in
|
|
10
|
-
|
|
11
|
-
# Database
|
|
12
|
-
DB_HOST=localhost
|
|
13
|
-
DB_USER=mulaorg
|
|
14
|
-
DB_PASSWORD=Krishika@9959
|
|
15
|
-
DB_NAME=license_portal
|