UNPKG

@topgroup/diginext

Version:

A BUILD SERVER & CLI to deploy apps to any Kubernetes clusters.

474 lines (473 loc) 20.4 kB
"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;