@alithya-oss/backstage-plugin-time-saver-backend
Version:
This plugin provides an implementation of charts and statistics related to your time savings that are coming from usage of your templates. Plugins is built from frontend and backend part. Backend plugin is responsible for scheduled stats parsing process a
78 lines (74 loc) • 2.63 kB
JavaScript
;
var scaffolderClient = require('../api/scaffolderClient.cjs.js');
var utils = require('../utils.cjs.js');
class TimeSaverHandler {
constructor(auth, logger, discovery, db) {
this.auth = auth;
this.logger = logger;
this.discovery = discovery;
this.db = db;
}
async fetchTemplates() {
const scaffolderClient$1 = new scaffolderClient.ScaffolderClient(
this.auth,
this.logger,
this.discovery
);
this.logger.info(`START - Collecting Time Savings data from templates...}`);
let templateTaskList = [];
try {
templateTaskList = await scaffolderClient$1.fetchTemplatesFromScaffolder();
} catch (error) {
return "FAIL";
}
this.logger.debug("Truncating database");
await this.db.truncate();
this.logger.debug(
`Template task list: ${JSON.stringify(templateTaskList)}`
);
templateTaskList = templateTaskList.filter(
(single) => single.status === "completed"
);
for (let i = 0; i < templateTaskList.length; i++) {
const singleTemplate = templateTaskList[i];
this.logger.debug(`Parsing template task ${singleTemplate.id}`);
const templateSubstituteData = singleTemplate.spec.templateInfo.entity.metadata.substitute || undefined;
if (templateSubstituteData) {
for (const key in templateSubstituteData.engineering) {
if (Object.prototype.hasOwnProperty.call(
templateSubstituteData.engineering,
key
)) {
const value = templateSubstituteData.engineering[key];
const createdAt = utils.dateTimeFromIsoDate(singleTemplate.createdAt);
if (!createdAt) {
this.logger.error(
`Found invalid date when parsing catalog DB. ${JSON.stringify(
singleTemplate
)}`
);
}
await this.db.insert({
team: key,
role: "",
timeSaved: value,
createdAt,
createdBy: singleTemplate.createdBy,
templateName: singleTemplate.spec.templateInfo.entityRef,
templateTaskStatus: singleTemplate.status,
templateTaskId: singleTemplate.id
});
}
}
} else {
this.logger.debug(
`Template ${singleTemplate.id} does not have substitute fields on its body`
);
}
}
this.logger.info(`STOP - Collecting Time Savings data from templates...}`);
return "SUCCESS";
}
}
exports.TimeSaverHandler = TimeSaverHandler;
//# sourceMappingURL=handler.cjs.js.map