async putDashboard()

in source/services/dashboardHandler/lib/CWHelperAbstract.ts [46:93]


  async putDashboard(startTime: string, dashboardName: string): Promise<void> {
    let instances = [];
    const tag = process.env.TAG_SCHEMA as string;
    const workload = process.env.WORKLOAD as string;
    try {
      // validate tag
      if (!this.isTagValid(tag)) throw new Error("invalid tag");

      // validate instances
      instances = await SSMHelper.getParameter(
        process.env.SSM_PARAMETER as string
      );
      if (instances.length === 0) {
        logger.debug({
          label: "CWHelper/putDashboard",
          message: "no instances found",
        });
        // if no instances found, delete dashboard
        await this.deleteDashboard(dashboardName).catch(() => {
          // do nothing
        });
        throw new Error("no instances found");
      }

      // generate widgets
      const dashboard: IDashboard = { start: "", widgets: [] };
      dashboard.start = startTime;
      dashboard.widgets = this.factoryMethod().get(workload, instances, tag);

      // put dashboard
      const cw = new CloudWatch({
        apiVersion: config.cw,
        customUserAgent: config.customUserAgent,
      });
      await cw
        .putDashboard({
          DashboardBody: JSON.stringify(dashboard),
          DashboardName: dashboardName,
        })
        .promise();
    } catch (e) {
      logger.error({
        label: "CWHelper/putDashboard",
        message: e,
      });
      throw new Error("dashboard put failed");
    }
  }