Refactor alarm page for v6 protocol
diff --git a/.roadhogrc.mock.js b/.roadhogrc.mock.js
index 9e34ccf..9fa1e25 100644
--- a/.roadhogrc.mock.js
+++ b/.roadhogrc.mock.js
@@ -5,7 +5,7 @@
 import { getAllApplication, getApplication } from './mock/application';
 import { searchServer, getServer } from './mock/server';
 import { searchService, getService } from './mock/service';
-import { getAlarm, getNoticeAlarm, AlarmTrend } from './mock/alarm';
+import { Alarms, getNoticeAlarm, AlarmTrend } from './mock/alarm';
 import { TraceBrief, Trace } from './mock/trace'
 import { makeExecutableSchema, addMockFunctionsToSchema } from 'graphql-tools';
 import { graphql } from 'graphql';
@@ -39,6 +39,7 @@
     ClusterBrief,
     Thermodynamic,
     AlarmTrend,
+    Alarms,
     TraceBrief,
     Trace,
   },
@@ -58,7 +59,6 @@
   'POST /api/service/search': searchService,
   'POST /api/service': getService,
   'POST /api/service/options': getAllApplication,
-  'POST /api/alarm': getAlarm,
   'POST /api/notice': getNoticeAlarm,
   'POST /api/login/account': (req, res) => {
     const { password, userName } = req.body;
diff --git a/mock/alarm.js b/mock/alarm.js
index 2358bfe..7af3253 100644
--- a/mock/alarm.js
+++ b/mock/alarm.js
@@ -50,6 +50,15 @@
       }
     ));
   },
+  Alarms: () => mockjs.mock({
+    'msgs|10': [{
+        'id|+1': 1,
+        message: '@paragraph(1)',
+        startTime: '@datetime("yyyy-MM-dd HH:mm:ss")',
+        scope: 'SERVICE',
+      }],
+      total: '@natural(5, 50)',
+  }),
   getAlarm(req, res) {
     const { variables: { alarmType } } = req.body;
     switch (alarmType) {
diff --git a/query-protocol b/query-protocol
index 9a6bb77..c6ee5d1 160000
--- a/query-protocol
+++ b/query-protocol
@@ -1 +1 @@
-Subproject commit 9a6bb77ac06f36ab4949ea193b152f22d09ab8a8
+Subproject commit c6ee5d15f38024c3be61be579eac4035ffbfd4bf
diff --git a/src/models/alarm.js b/src/models/alarm.js
index 576dda9..4b0fe44 100644
--- a/src/models/alarm.js
+++ b/src/models/alarm.js
@@ -16,80 +16,78 @@
  */
 
 
-import { generateModal } from '../utils/models';
+import { base } from '../utils/models';
 
 const dataQuery = `
-  query Alarm($keyword: String, $alarmType: AlarmType, $duration:Duration!, $paging: Pagination!){
-    loadAlarmList(keyword: $keyword, alarmType: $alarmType, duration: $duration, paging: $paging) {
-      items {
+  query Alarm($keyword: String, $scope: Scope, $duration:Duration!, $paging: Pagination!){
+    getAlarm(keyword: $keyword, scope: $scope, duration: $duration, paging: $paging) {
+      msgs {
         key: id
-        title
-        content
+        message
         startTime
-        causeType
       }
       total
     }
   }
 `;
 
-export default generateModal({
+export default base({
   namespace: 'alarm',
   state: {
-    applicationAlarmList: {
-      items: [],
-      total: 0,
-    },
-    serverAlarmList: {
-      items: [],
-      total: 0,
-    },
     serviceAlarmList: {
-      items: [],
+      msgs: [],
+      total: 0,
+    },
+    serviceInstanceAlarmList: {
+      msgs: [],
+      total: 0,
+    },
+    endpointAlarmList: {
+      msgs: [],
       total: 0,
     },
   },
   dataQuery,
   reducers: {
-    saveApplicationAlarmList(preState, { payload }) {
-      if (!payload) {
-        return preState;
-      }
-      const { loadAlarmList } = payload;
-      const { data } = preState;
-      return {
-        ...preState,
-        data: {
-          ...data,
-          applicationAlarmList: loadAlarmList,
-        },
-      };
-    },
-    saveServerAlarmList(preState, { payload }) {
-      if (!payload) {
-        return preState;
-      }
-      const { loadAlarmList } = payload;
-      const { data } = preState;
-      return {
-        ...preState,
-        data: {
-          ...data,
-          serverAlarmList: loadAlarmList,
-        },
-      };
-    },
     saveServiceAlarmList(preState, { payload }) {
       if (!payload) {
         return preState;
       }
-      const { loadAlarmList } = payload;
+      const { getAlarm } = payload;
       const { data } = preState;
       return {
         ...preState,
         data: {
           ...data,
-          serviceAlarmList: loadAlarmList,
+          serviceAlarmList: getAlarm,
+        },
+      };
+    },
+    saveServiceInstanceAlarmList(preState, { payload }) {
+      if (!payload) {
+        return preState;
+      }
+      const { getAlarm } = payload;
+      const { data } = preState;
+      return {
+        ...preState,
+        data: {
+          ...data,
+          serviceInstanceAlarmList: getAlarm,
+        },
+      };
+    },
+    saveEndpointAlarmList(preState, { payload }) {
+      if (!payload) {
+        return preState;
+      }
+      const { getAlarm } = payload;
+      const { data } = preState;
+      return {
+        ...preState,
+        data: {
+          ...data,
+          endpointAlarmList: getAlarm,
         },
       };
     },
@@ -101,7 +99,7 @@
           dispatch({
             type: 'saveVariables',
             payload: { values: {
-              alarmType: state.type.toUpperCase(),
+              scope: state.type.toUpperCase(),
             } },
           });
         }
diff --git a/src/routes/Alarm/Alarm.js b/src/routes/Alarm/Alarm.js
index 2443229..06d989b 100644
--- a/src/routes/Alarm/Alarm.js
+++ b/src/routes/Alarm/Alarm.js
@@ -30,6 +30,12 @@
   needTotal: true,
 };
 
+const funcMap = {
+  "SERVICE": "saveServiceAlarmList",
+  "SERVICE_INSTANCE": "saveServiceInstanceAlarmList",
+  "ENDPOINT": "saveEndpointAlarmList",
+}
+
 @connect(state => ({
   alarm: state.alarm,
   globalVariables: state.global.globalVariables,
@@ -38,11 +44,11 @@
 export default class Alarm extends PureComponent {
   componentDidMount() {
     const { alarm: { variables: { values } } } = this.props;
-    if (!values.alarmType) {
+    if (!values.scope) {
       this.props.dispatch({
         type: 'alarm/saveVariables',
         payload: { values: {
-          alarmType: 'APPLICATION',
+          scope: 'SERVICE',
           paging: defaultPaging,
         } },
       });
@@ -72,26 +78,25 @@
     });
   }
 
-  changeAlarmType = (alarmType) => {
+  changeScope = (scope) => {
     this.props.dispatch({
       type: 'alarm/saveVariables',
       payload: { values: {
-        alarmType,
+        scope,
         paging: defaultPaging,
       } },
     });
   }
 
   handleChange = (variables) => {
-    const type = variables.alarmType.charAt(0) + variables.alarmType.slice(1).toLowerCase();
     const { paging = defaultPaging } = variables;
     this.props.dispatch({
       type: 'alarm/fetchData',
-      payload: { variables: { ...variables, paging }, reducer: `save${type}AlarmList` },
+      payload: { variables: { ...variables, paging }, reducer: funcMap[variables.scope] },
     });
   }
 
-  renderList = ({ items, total }) => {
+  renderList = ({ msgs, total }) => {
     const { alarm: { variables: { values: { paging = defaultPaging } } }, loading } = this.props;
     const pagination = {
       pageSize: paging.pageSize,
@@ -104,20 +109,19 @@
         className="demo-loadmore-list"
         loading={loading}
         itemLayout="horizontal"
-        dataSource={items}
+        dataSource={msgs}
         pagination={pagination}
-        renderItem={item => (
+        renderItem={msg => (
           <List.Item>
             <List.Item.Meta
               avatar={
                 <Avatar
-                  style={item.causeType === 'LOW_SUCCESS_RATE' ? { backgroundColor: '#e68a00' } : { backgroundColor: '#b32400' }}
-                  icon={item.causeType === 'LOW_SUCCESS_RATE' ? 'clock-circle-o' : 'close'}
+                  style={{ backgroundColor: '#b32400' }}
+                  icon='close'
                 />}
-              title={item.title}
-              description={item.content}
+              description={msg.message}
             />
-            <div>{item.startTime}</div>
+            <div>{msg.startTime}</div>
           </List.Item>
         )}
       />);
@@ -145,10 +149,10 @@
           bordered={false}
           extra={extraContent}
         >
-          <Tabs activeKey={values.alarmType} onChange={this.changeAlarmType}>
-            <TabPane tab="Application" key="APPLICATION">{this.renderList(data.applicationAlarmList)}</TabPane>
-            <TabPane tab="Server" key="SERVER">{this.renderList(data.serverAlarmList)}</TabPane>
+          <Tabs activeKey={values.scope} onChange={this.changeScope}>
             <TabPane tab="Service" key="SERVICE">{this.renderList(data.serviceAlarmList)}</TabPane>
+            <TabPane tab="ServiceInstance" key="SERVICE_INSTANCE">{this.renderList(data.serviceInstanceAlarmList)}</TabPane>
+            <TabPane tab="Endpoint" key="ENDPOINT">{this.renderList(data.endpointAlarmList)}</TabPane>
           </Tabs>
         </Card>
       </Panel>