summaryrefslogtreecommitdiff
path: root/src/store/modules/Settings/SnmpAlertsStore.js
blob: 0871c8d855b0ce010f5233e36299d6008ea98e2c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import api, { getResponseCount } from '@/store/api';
import i18n from '@/i18n';

const SnmpAlertsStore = {
  namespaced: true,
  state: {
    allSnmpDetails: [],
  },
  getters: {
    allSnmpDetails(state) {
      return state.allSnmpDetails;
    },
  },
  mutations: {
    setSnmpDetails(state, allSnmpDetails) {
      state.allSnmpDetails = allSnmpDetails;
    },
  },
  actions: {
    async getSnmpAlertUrl() {
      return await api
        .get('/redfish/v1/')
        .then((response) => api.get(response.data.EventService['@odata.id']))
        .then((response) => api.get(response.data.Subscriptions['@odata.id']))
        .then((response) => response.data['@odata.id'])
        .catch((error) => console.log('Error', error));
    },
    async getSnmpDetails({ commit, dispatch }) {
      const snmpAlertUrl = await dispatch('getSnmpAlertUrl');
      return await api
        .get(snmpAlertUrl)
        .then((response) =>
          response.data.Members.map((user) => user['@odata.id']),
        )
        .then((userIds) => api.all(userIds.map((user) => api.get(user))))
        .then((users) => {
          const snmpDetailsData = users.map((user) => user.data);
          commit('setSnmpDetails', snmpDetailsData);
        })
        .catch((error) => {
          console.log(error);
          const message = i18n.t('pageSnmpAlerts.toast.errorLoadSnmpDetails');
          throw new Error(message);
        });
    },
    async deleteDestination({ dispatch }, id) {
      const snmpAlertUrl = await dispatch('getSnmpAlertUrl');
      return await api
        .delete(`${snmpAlertUrl}/${id}`)
        .then(() => dispatch('getSnmpDetails'))
        .then(() =>
          i18n.t('pageSnmpAlerts.toast.successDeleteDestination', {
            id,
          }),
        )
        .catch((error) => {
          console.log(error);
          const message = i18n.t(
            'pageSnmpAlerts.toast.errorDeleteDestination',
            {
              id,
            },
          );
          throw new Error(message);
        });
    },
    async deleteMultipleDestinations({ dispatch }, destination) {
      const snmpAlertUrl = await dispatch('getSnmpAlertUrl');
      const promises = destination.map(({ id }) => {
        return api.delete(`${snmpAlertUrl}/${id}`).catch((error) => {
          console.log(error);
          return error;
        });
      });
      return await api
        .all(promises)
        .then((response) => {
          dispatch('getSnmpDetails');
          return response;
        })
        .then(
          api.spread((...responses) => {
            const { successCount, errorCount } = getResponseCount(responses);
            let toastMessages = [];

            if (successCount) {
              const message = i18n.tc(
                'pageSnmpAlerts.toast.successBatchDelete',
                successCount,
              );
              toastMessages.push({ type: 'success', message });
            }

            if (errorCount) {
              const message = i18n.tc(
                'pageSnmpAlerts.toast.errorBatchDelete',
                errorCount,
              );
              toastMessages.push({ type: 'error', message });
            }

            return toastMessages;
          }),
        );
    },
    async addDestination({ dispatch }, { data }) {
      const snmpAlertUrl = await dispatch('getSnmpAlertUrl');
      return await api
        .post(snmpAlertUrl, data)
        .then(() => dispatch('getSnmpDetails'))
        .then(() => i18n.t('pageSnmpAlerts.toast.successAddDestination'))
        .catch((error) => {
          console.log(error);
          const message = i18n.t('pageSnmpAlerts.toast.errorAddDestination');
          throw new Error(message);
        });
    },
  },
};

export default SnmpAlertsStore;