clusters_store.js 2.72 KB
Newer Older
1
import { s__ } from '../../locale';
2
import { INGRESS, JUPYTER } from '../constants';
3 4 5 6 7

export default class ClusterStore {
  constructor() {
    this.state = {
      helpPath: null,
8
      ingressHelpPath: null,
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
      status: null,
      statusReason: null,
      applications: {
        helm: {
          title: s__('ClusterIntegration|Helm Tiller'),
          status: null,
          statusReason: null,
          requestStatus: null,
          requestReason: null,
        },
        ingress: {
          title: s__('ClusterIntegration|Ingress'),
          status: null,
          statusReason: null,
          requestStatus: null,
          requestReason: null,
25
          externalIp: null,
26 27 28 29 30 31 32 33
        },
        runner: {
          title: s__('ClusterIntegration|GitLab Runner'),
          status: null,
          statusReason: null,
          requestStatus: null,
          requestReason: null,
        },
34 35 36 37 38 39 40
        prometheus: {
          title: s__('ClusterIntegration|Prometheus'),
          status: null,
          statusReason: null,
          requestStatus: null,
          requestReason: null,
        },
41 42 43 44 45 46 47 48
        jupyter: {
          title: s__('ClusterIntegration|JupyterHub'),
          status: null,
          statusReason: null,
          requestStatus: null,
          requestReason: null,
          hostname: null,
        },
49 50 51 52
      },
    };
  }

53
  setHelpPaths(helpPath, ingressHelpPath, ingressDnsHelpPath) {
54
    this.state.helpPath = helpPath;
55
    this.state.ingressHelpPath = ingressHelpPath;
56
    this.state.ingressDnsHelpPath = ingressDnsHelpPath;
57 58
  }

59 60 61 62
  setManagePrometheusPath(managePrometheusPath) {
    this.state.managePrometheusPath = managePrometheusPath;
  }

63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
  updateStatus(status) {
    this.state.status = status;
  }

  updateStatusReason(reason) {
    this.state.statusReason = reason;
  }

  updateAppProperty(appId, prop, value) {
    this.state.applications[appId][prop] = value;
  }

  updateStateFromServer(serverState = {}) {
    this.state.status = serverState.status;
    this.state.statusReason = serverState.status_reason;
78

79 80 81 82 83 84 85 86 87 88 89 90
    serverState.applications.forEach((serverAppEntry) => {
      const {
        name: appId,
        status,
        status_reason: statusReason,
      } = serverAppEntry;

      this.state.applications[appId] = {
        ...(this.state.applications[appId] || {}),
        status,
        statusReason,
      };
91

Filipa Lacerda's avatar
Filipa Lacerda committed
92
      if (appId === INGRESS) {
93
        this.state.applications.ingress.externalIp = serverAppEntry.external_ip;
94
      } else if (appId === JUPYTER) {
Filipa Lacerda's avatar
Filipa Lacerda committed
95 96 97 98 99
        this.state.applications.jupyter.hostname =
          serverAppEntry.hostname ||
          (this.state.applications.ingress.externalIp
            ? `jupyter.${this.state.applications.ingress.externalIp}.xip.io`
            : '');
100
      }
101 102 103
    });
  }
}