@topgroup/diginext
Version:
A BUILD SERVER & CLI to deploy apps to any Kubernetes clusters.
474 lines (473 loc) • 20.4 kB
JavaScript
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const dist_1 = require("tsoa/dist");
const interfaces_1 = require("../interfaces");
const k8s_1 = __importDefault(require("../modules/k8s"));
const controller_parser_1 = require("../plugins/controller-parser");
const mongodb_1 = require("../plugins/mongodb");
const services_1 = require("../services");
const MonitorService_1 = require("../services/MonitorService");
let MonitorController = class MonitorController {
constructor() {
this.service = new MonitorService_1.MonitorService();
}
/**
* Parse the filter & option from the URL
*/
parseFilter(req, res, next) {
const parsed = (0, controller_parser_1.parseFilterAndOptions)(req);
// assign to controller:
this.options = parsed.options;
this.filter = parsed.filter;
if (next)
next();
}
/**
* List of nodes in a cluster
*/
async getNodes(queryParams) {
const { DB } = await Promise.resolve().then(() => __importStar(require("../modules/api/DB")));
// console.log("this.filter :>> ", this.filter);
const clusterSvc = new services_1.ClusterService(this.ownership);
let { cluster: clusterSlugOrId, ...restFilter } = this.filter;
let data = [];
if (!clusterSlugOrId) {
const clusters = await clusterSvc.find({ workspace: this.workspace._id, ...restFilter });
const ls = await Promise.all(clusters.map(async (cluster) => {
const { contextName: context, isVerified } = cluster;
if (!context || isVerified === false)
return [];
// authenticate cluster
try {
await k8s_1.default.authCluster(cluster, { ownership: this.ownership, shouldSwitchContextToThisCluster: false });
}
catch (e) {
console.error(`[ERROR] MonitorController > getNodes() :>>`, e);
return [];
}
// fetch list
let nodeList = await k8s_1.default.getAllNodes({ context });
nodeList = nodeList.map((ns) => {
ns.workspace = mongodb_1.MongoDB.toString(this.workspace._id);
ns.clusterSlug = cluster.slug;
ns.cluster = mongodb_1.MongoDB.toString(cluster._id);
return ns;
});
return nodeList;
}));
ls.map((nsList) => nsList.map((ns) => data.push(ns)));
}
else {
const cluster = await clusterSvc.findOne({
$or: [{ slug: clusterSlugOrId }, { _id: clusterSlugOrId }],
workspace: this.workspace._id,
...restFilter,
});
if (!cluster)
return (0, interfaces_1.respondFailure)(`Cluster "${clusterSlugOrId}" not found.`);
const { contextName: context, isVerified } = cluster;
if (!context || isVerified === false)
return (0, interfaces_1.respondFailure)(`Unverified cluster: "${clusterSlugOrId}"`);
// authenticate cluster
try {
await k8s_1.default.authCluster(cluster, { ownership: this.ownership, shouldSwitchContextToThisCluster: false });
}
catch (e) {
console.error(`[ERROR] MonitorController > getNodes() :>>`, e);
return [];
}
// fetch list
data = await k8s_1.default.getAllNodes({ context });
data = data.map((ns) => {
ns.workspace = mongodb_1.MongoDB.toString(this.workspace._id);
ns.clusterSlug = cluster.slug;
ns.cluster = mongodb_1.MongoDB.toString(cluster._id);
return ns;
});
}
// process
return (0, interfaces_1.respondSuccess)({ data });
}
/**
* List of namespaces in a cluster
*/
async getNamespaces(queryParams) {
const { MonitorNamespaceService } = await Promise.resolve().then(() => __importStar(require("../services/MonitorService")));
const nsSvc = new MonitorNamespaceService(this.ownership);
const data = await nsSvc.find(this.filter, this.options);
// process
return (0, interfaces_1.respondSuccess)({ data });
}
/**
* List of all resources of a namespace in a cluster
*/
async allNamespaceResources(queryParams) {
const { MonitorNamespaceService } = await Promise.resolve().then(() => __importStar(require("../services/MonitorService")));
const nsSvc = new MonitorNamespaceService(this.ownership);
const data = await nsSvc.allResources(this.filter, this.options);
// process
return (0, interfaces_1.respondSuccess)({ data });
// return respondSuccess({ data: 1 });
}
/**
* Create namespace in a cluster
*/
async createNamespace(body) {
const { MonitorNamespaceService } = await Promise.resolve().then(() => __importStar(require("../services/MonitorService")));
const nsSvc = new MonitorNamespaceService(this.ownership);
const data = await nsSvc.create(body);
// process
return (0, interfaces_1.respondSuccess)({ data });
}
/**
* Create namespace in a cluster
*/
async deleteNamespace(body, queryParams) {
const { MonitorNamespaceService } = await Promise.resolve().then(() => __importStar(require("../services/MonitorService")));
const nsSvc = new MonitorNamespaceService(this.ownership);
const data = await nsSvc.delete({ ...this.filter, ...body });
// process
return (0, interfaces_1.respondSuccess)({ data });
}
/**
* List of K8S services
*/
async getServices(queryParams) {
const { MonitorServiceService } = await Promise.resolve().then(() => __importStar(require("../services/MonitorService")));
const serviceSvc = new MonitorServiceService(this.ownership);
const data = await serviceSvc.find(this.filter, this.options);
// process
return (0, interfaces_1.respondSuccess)({ data });
}
/**
* Create service in a namespace
*/
async createService(body, queryParams) {
const { MonitorServiceService } = await Promise.resolve().then(() => __importStar(require("../services/MonitorService")));
const serviceSvc = new MonitorServiceService(this.ownership);
const data = await serviceSvc.create(this.filter, body);
return (0, interfaces_1.respondSuccess)({ data });
}
/**
* Delete service in a namespace
*/
async deleteService(body, queryParams) {
const { MonitorServiceService } = await Promise.resolve().then(() => __importStar(require("../services/MonitorService")));
const serviceSvc = new MonitorServiceService(this.ownership);
const data = await serviceSvc.delete({ ...this.filter, ...body });
return (0, interfaces_1.respondSuccess)({ data });
}
/**
* List of K8S Ingress
*/
async getIngresses(queryParams) {
const { MonitorIngressService } = await Promise.resolve().then(() => __importStar(require("../services/MonitorService")));
const ingressSvc = new MonitorIngressService(this.ownership);
const data = await ingressSvc.find(this.filter, this.options);
// process
return (0, interfaces_1.respondSuccess)({ data });
}
/**
* Delete K8S Ingress
*/
async deleteIngresses(body, queryParams) {
const { MonitorIngressService } = await Promise.resolve().then(() => __importStar(require("../services/MonitorService")));
const ingressSvc = new MonitorIngressService(this.ownership);
const data = await ingressSvc.delete({ ...this.filter, ...body });
// process
return (0, interfaces_1.respondSuccess)({ data });
}
/**
* List of K8S Deployment
*/
async getDeploys(queryParams) {
const { MonitorDeploymentService } = await Promise.resolve().then(() => __importStar(require("../services/MonitorService")));
const deploymentSvc = new MonitorDeploymentService(this.ownership);
const data = await deploymentSvc.find(this.filter, this.options);
// process
return (0, interfaces_1.respondSuccess)({ data });
}
/**
* Delete K8S Deployment
*/
async deleteDeploys(body, queryParams) {
const { MonitorDeploymentService } = await Promise.resolve().then(() => __importStar(require("../services/MonitorService")));
const deploymentSvc = new MonitorDeploymentService(this.ownership);
const data = await deploymentSvc.delete({ ...this.filter, ...body });
// process
return (0, interfaces_1.respondSuccess)({ data });
}
/**
* List of K8S StatefulSet
*/
async getStatefulSets(queryParams) {
const { MonitorStatefulSetService } = await Promise.resolve().then(() => __importStar(require("../services/MonitorService")));
const statefulSetSvc = new MonitorStatefulSetService(this.ownership);
const data = await statefulSetSvc.find(this.filter, this.options);
// process
return (0, interfaces_1.respondSuccess)({ data });
}
/**
* Delete K8S StatefulSet
*/
async deleteStatefulSets(body, queryParams) {
const { MonitorStatefulSetService } = await Promise.resolve().then(() => __importStar(require("../services/MonitorService")));
const statefulSetSvc = new MonitorStatefulSetService(this.ownership);
const data = await statefulSetSvc.delete({ ...this.filter, ...body });
// process
return (0, interfaces_1.respondSuccess)({ data });
}
/**
* List of K8S Pod
*/
async getPods(queryParams) {
const { MonitorPodService } = await Promise.resolve().then(() => __importStar(require("../services/MonitorService")));
const podSvc = new MonitorPodService(this.ownership);
const data = await podSvc.find(this.filter, this.options);
// process
return (0, interfaces_1.respondSuccess)({ data });
}
/**
* Delete K8S Pod
*/
async deletePods(body, queryParams) {
const { MonitorPodService } = await Promise.resolve().then(() => __importStar(require("../services/MonitorService")));
const podSvc = new MonitorPodService(this.ownership);
const data = await podSvc.delete({ ...this.filter, ...body });
// process
return (0, interfaces_1.respondSuccess)({ data });
}
/**
* List of K8S Secret
*/
async getSecrets(queryParams) {
const { MonitorSecretService } = await Promise.resolve().then(() => __importStar(require("../services/MonitorService")));
const secretSvc = new MonitorSecretService(this.ownership);
const data = await secretSvc.find(this.filter, this.options);
// process
return (0, interfaces_1.respondSuccess)({ data });
}
/**
* Delete K8S Secret
*/
async deleteSecrets(body, queryParams) {
const { MonitorSecretService } = await Promise.resolve().then(() => __importStar(require("../services/MonitorService")));
const secretSvc = new MonitorSecretService(this.ownership);
const data = await secretSvc.delete({ ...this.filter, ...body });
// process
return (0, interfaces_1.respondSuccess)({ data });
}
};
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Get)("/nodes"),
__param(0, (0, dist_1.Queries)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", Promise)
], MonitorController.prototype, "getNodes", null);
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Get)("/namespaces"),
__param(0, (0, dist_1.Queries)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", Promise)
], MonitorController.prototype, "getNamespaces", null);
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Get)("/namespaces/all"),
__param(0, (0, dist_1.Queries)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", Promise)
], MonitorController.prototype, "allNamespaceResources", null);
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Post)("/namespaces"),
__param(0, (0, dist_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", Promise)
], MonitorController.prototype, "createNamespace", null);
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Delete)("/namespaces"),
__param(0, (0, dist_1.Body)()),
__param(1, (0, dist_1.Queries)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object]),
__metadata("design:returntype", Promise)
], MonitorController.prototype, "deleteNamespace", null);
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Get)("/services"),
__param(0, (0, dist_1.Queries)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", Promise)
], MonitorController.prototype, "getServices", null);
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Post)("/services"),
__param(0, (0, dist_1.Body)()),
__param(1, (0, dist_1.Queries)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object]),
__metadata("design:returntype", Promise)
], MonitorController.prototype, "createService", null);
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Delete)("/services"),
__param(0, (0, dist_1.Body)()),
__param(1, (0, dist_1.Queries)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object]),
__metadata("design:returntype", Promise)
], MonitorController.prototype, "deleteService", null);
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Get)("/ingresses"),
__param(0, (0, dist_1.Queries)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", Promise)
], MonitorController.prototype, "getIngresses", null);
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Delete)("/ingresses"),
__param(0, (0, dist_1.Body)()),
__param(1, (0, dist_1.Queries)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object]),
__metadata("design:returntype", Promise)
], MonitorController.prototype, "deleteIngresses", null);
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Get)("/deployments"),
__param(0, (0, dist_1.Queries)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", Promise)
], MonitorController.prototype, "getDeploys", null);
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Delete)("/deployments"),
__param(0, (0, dist_1.Body)()),
__param(1, (0, dist_1.Queries)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object]),
__metadata("design:returntype", Promise)
], MonitorController.prototype, "deleteDeploys", null);
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Get)("/statefulsets"),
__param(0, (0, dist_1.Queries)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", Promise)
], MonitorController.prototype, "getStatefulSets", null);
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Delete)("/statefulsets"),
__param(0, (0, dist_1.Body)()),
__param(1, (0, dist_1.Queries)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object]),
__metadata("design:returntype", Promise)
], MonitorController.prototype, "deleteStatefulSets", null);
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Get)("/pods"),
__param(0, (0, dist_1.Queries)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", Promise)
], MonitorController.prototype, "getPods", null);
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Delete)("/pods"),
__param(0, (0, dist_1.Body)()),
__param(1, (0, dist_1.Queries)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object]),
__metadata("design:returntype", Promise)
], MonitorController.prototype, "deletePods", null);
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Get)("/secrets"),
__param(0, (0, dist_1.Queries)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", Promise)
], MonitorController.prototype, "getSecrets", null);
__decorate([
(0, dist_1.Security)("api_key"),
(0, dist_1.Security)("jwt"),
(0, dist_1.Delete)("/secrets"),
__param(0, (0, dist_1.Body)()),
__param(1, (0, dist_1.Queries)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object]),
__metadata("design:returntype", Promise)
], MonitorController.prototype, "deleteSecrets", null);
MonitorController = __decorate([
(0, dist_1.Tags)("Monitor"),
(0, dist_1.Route)("monitor")
], MonitorController);
exports.default = MonitorController;