Resourcemanagement/server/socket-handlers/aws-socket-handler.js
vickytechkey 8760d39ff0
All checks were successful
Deploy Beta (NATIVE) / deploy (push) Successful in 14s
feat: add AWS SDK dependencies and database migration for aws_account table
2026-10-23 20:29:22 +05:30

169 lines
5.4 KiB
JavaScript

const { checkLogin } = require("../util-server");
const { AWSAccount } = require("../aws");
const { sendAwsAccountList } = require("../client");
const { log } = require("../../src/util");
/**
* Socket handlers for AWS EC2 and CloudWatch resource monitoring
* @param {Socket} socket Socket.io instance
* @returns {void}
*/
module.exports.awsSocketHandler = (socket) => {
// Save or update an AWS account
socket.on("saveAwsAccount", async (account, accountID, callback) => {
try {
checkLogin(socket);
const saved = await AWSAccount.save(account, accountID, socket.userID);
await sendAwsAccountList(socket);
if (typeof callback === "function") {
callback({
ok: true,
msg: "Saved.",
msgi18n: true,
account: saved,
});
}
} catch (e) {
log.error("aws", `Failed to save AWS account: ${e.message}`);
if (typeof callback === "function") {
callback({
ok: false,
msg: e.message,
});
}
}
});
// Delete an AWS account
socket.on("deleteAwsAccount", async (accountID, callback) => {
try {
checkLogin(socket);
await AWSAccount.delete(accountID);
await sendAwsAccountList(socket);
if (typeof callback === "function") {
callback({
ok: true,
msg: "successDeleted",
msgi18n: true,
});
}
} catch (e) {
log.error("aws", `Failed to delete AWS account: ${e.message}`);
if (typeof callback === "function") {
callback({
ok: false,
msg: e.message,
});
}
}
});
// Test AWS connection
socket.on("testAwsAccount", async (account, callback) => {
try {
checkLogin(socket);
// If account has an ID and masked secret, fill in the actual secret from DB
if (account.id && (!account.secretAccessKey || account.secretAccessKey.startsWith("••••"))) {
const raw = await AWSAccount.getAccountRaw(account.id);
account.secret_access_key = raw.secret_access_key;
account.access_key_id = raw.access_key_id;
account.session_token = raw.session_token;
}
const result = await AWSAccount.testConnection(account, account.region);
if (typeof callback === "function") {
callback({
ok: true,
...result,
});
}
} catch (e) {
if (typeof callback === "function") {
callback({
ok: false,
msg: e.message,
});
}
}
});
// Fetch EC2 instances
socket.on("getEc2Instances", async (accountID, region, callback) => {
try {
checkLogin(socket);
const rawAccount = await AWSAccount.getAccountRaw(accountID);
const instances = await AWSAccount.getEc2Instances(rawAccount, region);
if (typeof callback === "function") {
callback({
ok: true,
instances,
});
}
} catch (e) {
log.error("aws", `Failed to get EC2 instances: ${e.message}`);
if (typeof callback === "function") {
callback({
ok: false,
msg: e.message,
});
}
}
});
// Fetch live metrics (CPU, Memory, Network, Status) for specified instances
socket.on("getEc2LiveMetrics", async (accountID, region, instanceIds, callback) => {
try {
checkLogin(socket);
const rawAccount = await AWSAccount.getAccountRaw(accountID);
const metrics = await AWSAccount.getLiveInstanceMetrics(rawAccount, region, instanceIds);
if (typeof callback === "function") {
callback({
ok: true,
metrics,
});
}
} catch (e) {
log.error("aws", `Failed to get live metrics: ${e.message}`);
if (typeof callback === "function") {
callback({
ok: false,
msg: e.message,
});
}
}
});
// Fetch historical metric series for an instance deep-dive chart
socket.on("getEc2InstanceHistory", async (accountID, region, instanceId, hours, callback) => {
try {
checkLogin(socket);
const rawAccount = await AWSAccount.getAccountRaw(accountID);
const history = await AWSAccount.getInstanceHistory(rawAccount, region, instanceId, hours);
if (typeof callback === "function") {
callback({
ok: true,
history,
});
}
} catch (e) {
log.error("aws", `Failed to get instance history: ${e.message}`);
if (typeof callback === "function") {
callback({
ok: false,
msg: e.message,
});
}
}
});
};