Basic and Advanced Monitoring Rules
Crosswork Service Health monitoring provides two options for monitoring: Basic Monitoring and Advanced Monitoring. The table below outlines the monitoring functions of each rule and sub-services, as well as the metric dependencies for both Basic and Advanced monitoring rules included in the system-defined Heuristic Package:
Rule Name (Type) | Monitoring Functionality | Metrics and Subservices |
---|---|---|
Rule-L2VPN-NM- Basic |
|
subservice.device.health subservice.vpws.ctrlplane.health metric.l2vpn.xconnect.state metric.l2vpn.xconnect.ac.state metric.l2vpn.xconnect.pw.state |
Rule-L2VPN-NM (Advanced) |
|
subservice.bgp.nbr.health subservice.bgp.evpn.nexthop.health subservice.device.health subservice.evpn.health (one for each endpoint) subservice.fallback.path.health subservice.interface.health (one for each interface) subservice.l2vpn.y1731.health subservice.path.reachability.to.peer (local to remote and remote to local) subservice.path.sla subservice.pcep.session.health (one for each endpoint device) subservice.plain.lsp.path.health subservice.sr.policy.pce.health (one for each endpoint) subservice.vpws.ctrlplane.health (local, remote) subservice.path.reachability.to.peer subservice.fallback.path.health subservice.mpls.rsvpte.tunnel.pm.health subservice.l2vpn.y1731.health subservice.vpws.ctrlplane.health subservice.interface.health subservice.device.health subservice.interface.health.summary subservice.path.sla.summary metric.bgp.router.id metric.cef.route.labeled.lsp metric.l2vpn.xconnect.ac.state metric.l2vpn.xconnect.pw.state metric.l2vpn.xconnect.state metric.device.xconnect.ac.in.packets metric.device.xconnect.pw.out.packet metric.l2vpn.y1731.connect.cross.check. status metric.interface.oper metric.interface.in.errors metric.device.cpu.load metric.device.memory.free |
Rule-L2VPN-NM- P2P-Basic |
|
subservice.device.health subservice.vpws.ctrlplane.health |
Rule-L2VPN-NM- P2P (Advanced) |
|
subservice.device.health subservice.interface.health (one for each interface) subservice.l2vpn.y1731.health subservice.p2p.fallback.path.health subservice.p2p.path.reachability.to.peer (path reachability between endpoints) subservice.p2p.plain.lsp.path.health subservice.path.sla subservice.pcep.session.health (one for each endpoint device) subservice.sr.policy.pcc.health subservice.sr.policy.pce.health (one for each endpoint) subservice.vpws.ctrlplane.health (local, remote) metric.cef.route.labeled.lsp metric.l2vpn.xconnect.ac.state metric.l2vpn.xconnect.pw.state metric.l2vpn.xconnect.state |
Rule-L2VPN-MP- Basic |
|
subservice.device.summary subservice.bridge.domain.summary subservice.device.health subservice.bridge.domain.state |
Rule-L2VPN-MP (Advanced) |
|
subservice.device.summary subservice.device.health subservice.pcep.session.health.summary subservice.pcep.session.health subservice.evpn.summary subservice.bgp.nbr.health subservice.mac.learning subservice.bridge.domain.summary subservice.bridge.domain.state subservice.interface.health subservice.transport.summary subservice.sr.policy.pcc.pm.health subservice.sr.policy.pce.pm.health subservice.mpls.rsvpte.tunnel.pm.health subservice.l2vpn.sr.odn.policy.dynamic metric.device.memory.free (supports XR only) metric.device.cpu.load (supports XR only) metric.sr.te.pcc.peer.state (supports XR only) metric.sr.te.pcc.peer.addrs (supports XR only) metric.bgp.session.state (supports XR only) metric.bgp.neighbors.ipaddr.list (supports XR only) metric.mac.learning.nexthops (supports XR only) metric.l2vpn.bridge.ac.state (supports XR only) metric.l2vpn.bridge.ac.list (supports XR only) metric.l2vpn.bridge.domain.state (supports XR only) metric.interface.oper (supports both XR and XE) metric.interface.in.errors (supports both XR and XE) metric.interface.out.errors (supports both XR and XE) metric.interface.in.discards (supports both XR and XE) metric.interface.out.discards (supports both XR and XE) metric.sr.policy.pcc.admin.state (supports XR only) metric.sr.policy.pcc.oper.state (supports XR only) metric.sr.policy.pcc.oper.up.time (supports XR only) metric.sr.policy.pm.delay.measurement (supports XR only) metric.sr.pm.delay (supports XR only) metric.sr.pm.variance (supports XR only) metric.sr.policy.pm.liveness.detection (supports XR only) metric.sr.pm.liveness.state (supports XR only) metric.sr.policy.pce.admin.state (supports XR only) metric.sr.policy.pce.oper.state (supports XR only) metric.sr.policy.pce.oper.up.time (supports XR only) metric.sr.policy.pce.ietf.policy.name (supports XR only) metric.sr.policy.pm.delay.measurement (supports XR only) metric.sr.pm.delay (supports XR only) metric.sr.pm.variance (supports XR only) metric.sr.policy.pm.liveness.detection (supports XR only) metric.sr.pm.liveness.state (supports XR only) metric.mpls.rsvpte.tunnel.oper.state (supports XR only) metric.mpls.rsvpte.tunnel.admin.state (supports XR only) metric.mpls.rsvpte.tunnel.frr.configured (supports XR only) metric.mpls.rsvpte.tunnel.frr.status (supports XR only) metric.mpls.te.pm.delay.measurement (supports XR only) metric.mpls.rsvp.te.delay (supports XR only) metric.mpls.rsvp.te.variance (supports XR only) metric.l2vpn.odn.sr.policies.list (supports XR only) metric.bgp.router.id (supports both XR and XE) |
Rule-L3VPN-NM- Basic |
|
subservice.ce.pe.route.health subservice.device.health |
Rule-L3VPN-NM (Advanced) |
|
subservice.ce.pe.route.health.summary subservice.ce.pe.route.health subservice.ebgp.nbr.health subservice.interface.health.summary subservice.interface.health subservice.device.summary subservice.device.health subservice.vrf.path.reachability.to.peer. summary subservice.vrf.path.reachability.to.peers subservice.transport.summary subservice.dynamic.l3vpn.sr.policy subservice.vrf.plain.lsp.reachability subservice.pcep.session.health.summary subservice.pcep.session.health subservice.bgp.nbr.health.summary subservice.bgp.nbr.health subservice.bgp.evpn.nexthop.health subservice.bgp.nbr.health subservice.ce.pe.route.health subservice.device.health subservice.ebgp.nbr.health subservice.evpn.health subservice.fallback.path.health subservice.interface.health subservice.l2vpn.y1731.health subservice.p2p.fallback.path.health subservice.p2p.path.reachability.to.peer subservice.p2p.plain.lsp.path.health subservice.path.reachability.to.peer subservice.path.sla subservice.pcep.session.health subservice.plain.lsp.path.health subservice.sr.policy.pcc.health subservice.sr.policy.pce.health subservice.vpws.ctrlplane.health subservice.vrf.path.reachability.to.peers subservice.vrf.plain.lsp.reachability subservice.bridge.domain.summary subservice.l3vpn.sr.odn.policy.dynamic subservice.l2vpn.sr.odn.policy.dynamic subservice.mac.learning subservice.mpls.rsvpte.tunnel.pm.health subservice.vrf.path.reachability.to.peer. summary subservice.path.sla.summary subservice.pcep.session.health.summary subservice.transport.summary subservice.interface.health.summary subservice.vpws.ctrlplane.health.summary subservice.bridge.domain.state metric.route.vrf.connected (supports XR and XR IPv6) metric.route.vrf.local (supports XR and XR IPv6) metric.bgp.vrf.session.state (supports XR only) metric.interface.oper (supports both XR and XE) metric.interface.in.errors (supports both XR and XE) metric.interface.out.errors (supports both XR and XE) metric.interface.in.discards (supports both XR and XE) metric.interface.out.discards (supports both XR and XE) metric.device.memory.free (supports XR only) metric.device.cpu.load (supports XR only) metric.l3vpn.sr.policies.list (supports XR and XR IPv6) metric.cef.vrf.route.prefix (supports XR and XR IPv6) metric.sr.te.pcc.peer.state (supports XR only) metric.sr.te.pcc.peer.addrs (supports XR only) metric.bgp.session.state (supports XR only) metric.bgp.neighbors.ipaddr.list (supports XR only) metric.bgp.route.l2vpn.evpn.nexthops metric.bgp.router.id metric.cef.route.labeled.lsp metric.bgp.session.state metric.bgp.neighbors.ipaddr.list metric.route.vrf.connected metric.route.vrf.local metric.device.memory.free metric.device.cpu.load metric.bgp.vrf.session.state metric.l2vpn.xconnect.pw.state metric.cef.route.labeled.lsp metric.bgp.router.id metric.interface.oper metric.interface.in.errors metric.interface.out.errors metric.interface.in.discards metric.interface.out.discards metric.l2vpn.y1731.connect.cross.check. status metric.l2vpn.y1731.connect.peer.mep.status metric.l2vpn.y1731.latency.rt metric.l2vpn.y1731.jitter.rt metric.l2vpn.y1731.pktloss.1way.sd metric.l2vpn.y1731.pktloss.1way.ds metric.cef.route.labeled.lsp metric.cef.route.labeled.lsp metric.device.xconnect.ac.in.packets metric.device.xconnect.pw.out.packets metric.device.xconnect.pw.in.packets metric.device.xconnect.ac.out.packets metric.sr.te.pcc.ipv4.peer.state metric.sr.te.pcc.ipv4.peer.addrs metric.cef.route.labeled.lsp metric.bgp.router.id metric.sr.policy.pcc.oper.state metric.sr.policy.pcc.oper.up.time metric.sr.policy.pcc.admin.state metric.sr.policy.pm.delay.measurement metric.sr.pm.delay metric.sr.pm.variance metric.sr.policy.pm.liveness.detection metric.sr.pm.liveness.state metric.sr.policy.pce.oper.up.time metric.sr.policy.pce.oper.state metric.sr.policy.pce.admin.state metric.l2vpn.xconnect.state metric.l2vpn.xconnect.ac.state metric.l2vpn.xconnect.pw.state metric.cef.vrf.route.prefix metric.l3vpn.odn.sr.policies.dynamic.list metric.l2vpn.odn.sr.policies.list metric.bgp.router.id metric.mac.learning.nexthops metric.mpls.rsvpte.tunnel.oper.state metric.mpls.rsvpte.tunnel.admin.state metric.mpls.rsvpte.tunnel.frr.configured metric.mpls.rsvpte.tunnel.frr.status metric.mpls.te.pm.delay.measurement metric.mpls.rsvp.te.delay metric.l2vpn.bridge.ac.state metric.l2vpn.bridge.ac.list metric.l2vpn.bridge.domain.state |
Example
The given example explains the relationship between the 'Rule-L2VPN-NM-P2P-Basic' and its dependent sub-services, specifically 'subservice.vpws.ctrlplane.health' and 'subservice.device.health'. Additonally, the sub-service definitions are also listed below to highlight the metric dependencies and symptoms generated by these sub-services.
Rule-L2VPN-NM-P2P-Basic
{
"name": "Rule-L2VPN-NM-P2P-Basic",
"namespace": "system",
"id": "Rule-L2VPN-NM-P2P-Basic system",
"description": "Rule to generate Assurance Graph for Basic L2VPN NM P2P Services.",
"matchCriteria": [
{
"configSource": "SOURCE_TYPE_NSO",
"configSubSource": [
"SUBSOURCE_SERVICE_CONFIG"
],
"matchType": "MATCH_TYPE_XPATH",
"matchExpression": "//vpn-service[@xmlns='urn:ietf:params:xml:ns:yang:ietf-l2vpn-ntw']/vpn-svc-type[text()='vpn-common:t-ldp']",
"matchPrefix": "",
"matchParams": []
},
{
"configSource": "SOURCE_TYPE_NSO",
"configSubSource": [
"SUBSOURCE_SERVICE_CONFIG"
],
"matchType": "MATCH_TYPE_XPATH",
"matchExpression": "//flat-L2vpn/service-type[text()='p2p']",
"matchPrefix": "",
"matchParams": []
},
{
"configSource": "SOURCE_TYPE_NSO",
"configSubSource": [
"SUBSOURCE_SERVICE_CONFIG"
],
"matchType": "MATCH_TYPE_XPATH",
"matchExpression": "//vpn-service[@xmlns='urn:ietf:params:xml:ns:yang:ietf-l2vpn-ntw']/vpn-type[text()='vpn-common:t-ldp']",
"matchPrefix": "",
"matchParams": []
},
{
"configSource": "SOURCE_TYPE_NSO",
"configSubSource": [
"SUBSOURCE_SERVICE_CONFIG"
],
"matchType": "MATCH_TYPE_XPATH",
"matchExpression": "//vpn-service[not(//bridge-group)]/vpn-type[contains(text(), ':mpls-evpn')]",
"matchPrefix": "",
"matchParams": []
},
{
"configSource": "SOURCE_TYPE_NSO",
"configSubSource": [
"SUBSOURCE_SERVICE_CONFIG"
],
"matchType": "MATCH_TYPE_XPATH",
"matchExpression": "//vpn-service[@xmlns='urn:ietf:params:xml:ns:yang:ietf-l2vpn-ntw']/vpn-type[text()='x:vpws']",
"matchPrefix": "",
"matchParams": []
},
{
"configSource": "SOURCE_TYPE_NSO",
"configSubSource": [
"SUBSOURCE_SERVICE_CONFIG"
],
"matchType": "MATCH_TYPE_XPATH",
"matchExpression": "//vpn-service[@xmlns='urn:ietf:params:xml:ns:yang:ietf-l2vpn-ntw']/vpn-type[text()='ietf-vpn-common:vpws']",
"matchPrefix": "",
"matchParams": []
}
],
"dependencies": [
{
"name": "VPWS-ControlPlane-Health-Summary",
"id": "subservice.vpws.ctrlplane.health.summary system",
"ssClass": "subservice.vpws.ctrlplane.health.summary",
"namespace": "system",
"type": "DEP_TYPE_NON_LIST",
"optional": false,
"paramExtractionMechanism": {
"mode": "EXTRACT_MODE_XPATH",
"name": "",
"namespace": "",
"version": "",
"validationHash": "0",
"pluginMethod": "",
"extractedParams": [],
"nativeMethod": ""
},
"parameters": [
{
"name": "vpnServiceId",
"iterator": false,
"defaultValue": "",
"extractionMethod": "DEP_PARAM_XPATH",
"extractionDetails": [
{
"description": "",
"extractValue": "//vpn-service/vpn-id"
},
{
"description": "Flat Model",
"extractValue": "//flat-L2vpn[/flat-L2vpn-p2p]/key"
}
]
}
],
"subDependencies": [
"VPWS-ControlPlane-Health-Local-Site",
"VPWS-ControlPlane-Health-Remote-Site"
],
"softSubDependencies": []
},
{
"name": "VPWS-ControlPlane-Health-Local-Site",
"id": "subservice.vpws.ctrlplane.health system",
"ssClass": "subservice.vpws.ctrlplane.health",
"namespace": "system",
"type": "DEP_TYPE_NON_LIST",
"optional": false,
"paramExtractionMechanism": {
"mode": "EXTRACT_MODE_XPATH",
"name": "",
"namespace": "",
"version": "",
"validationHash": "0",
"pluginMethod": "",
"extractedParams": [],
"nativeMethod": ""
},
"parameters": [
{
"name": "device",
"iterator": false,
"defaultValue": "",
"extractionMethod": "DEP_PARAM_XPATH",
"extractionDetails": [
{
"description": "",
"extractValue": "//vpn-nodes/vpn-node[1]/vpn-node-id"
}
]
},
{
"name": "groupName",
"iterator": false,
"defaultValue": "",
"extractionMethod": "DEP_PARAM_XPATH",
"extractionDetails": [
{
"description": "",
"extractValue": "//vpn-service/vpn-id"
},
{
"description": "Flat Model",
"extractValue": "//flat-L2vpn/flat-L2vpn-p2p/local-site/xconnect-group-name"
}
]
},
{
"name": "xconnectName",
"iterator": false,
"defaultValue": "",
"extractionMethod": "DEP_PARAM_XPATH",
"extractionDetails": [
{
"description": "",
"extractValue": "//vpn-service/vpn-id"
},
{
"description": "Flat Model",
"extractValue": "//flat-L2vpn/flat-L2vpn-p2p/local-site/xconnect-group-name"
}
]
}
],
"subDependencies": [],
"softSubDependencies": [
"device1"
]
},
{
"name": "VPWS-ControlPlane-Health-Remote-Site",
"id": "subservice.vpws.ctrlplane.health system",
"ssClass": "subservice.vpws.ctrlplane.health",
"namespace": "system",
"type": "DEP_TYPE_NON_LIST",
"optional": false,
"paramExtractionMechanism": {
"mode": "EXTRACT_MODE_XPATH",
"name": "",
"namespace": "",
"version": "",
"validationHash": "0",
"pluginMethod": "",
"extractedParams": [],
"nativeMethod": ""
},
"parameters": [
{
"name": "device",
"iterator": false,
"defaultValue": "",
"extractionMethod": "DEP_PARAM_XPATH",
"extractionDetails": [
{
"description": "",
"extractValue": "//vpn-nodes/vpn-node[2]/vpn-node-id"
}
]
},
{
"name": "groupName",
"iterator": false,
"defaultValue": "",
"extractionMethod": "DEP_PARAM_XPATH",
"extractionDetails": [
{
"description": "",
"extractValue": "//vpn-service/vpn-id"
},
{
"description": "Flat Model",
"extractValue": "//flat-L2vpn/flat-L2vpn-p2p/remote-site/xconnect-group-name"
}
]
},
{
"name": "xconnectName",
"iterator": false,
"defaultValue": "",
"extractionMethod": "DEP_PARAM_XPATH",
"extractionDetails": [
{
"description": "",
"extractValue": "//vpn-service/vpn-id"
},
{
"description": "Flat Model",
"extractValue": "//flat-L2vpn/flat-L2vpn-p2p/remote-site/xconnect-group-name"
}
]
}
],
"subDependencies": [],
"softSubDependencies": [
"device2"
]
},
{
"name": "device1",
"id": "subservice.device.health system",
"ssClass": "subservice.device.health",
"namespace": "system",
"type": "DEP_TYPE_NON_LIST",
"optional": false,
"paramExtractionMechanism": {
"mode": "EXTRACT_MODE_XPATH",
"name": "",
"namespace": "",
"version": "",
"validationHash": "0",
"pluginMethod": "",
"extractedParams": [],
"nativeMethod": ""
},
"parameters": [
{
"name": "device",
"iterator": false,
"defaultValue": "",
"extractionMethod": "DEP_PARAM_XPATH",
"extractionDetails": [
{
"description": "",
"extractValue": "//vpn-nodes/vpn-node[1]/vpn-node-id"
}
]
}
],
"subDependencies": [],
"softSubDependencies": []
},
{
"name": "device2",
"id": "subservice.device.health system",
"ssClass": "subservice.device.health",
"namespace": "system",
"type": "DEP_TYPE_NON_LIST",
"optional": false,
"paramExtractionMechanism": {
"mode": "EXTRACT_MODE_XPATH",
"name": "",
"namespace": "",
"version": "",
"validationHash": "0",
"pluginMethod": "",
"extractedParams": [],
"nativeMethod": ""
},
"parameters": [
{
"name": "device",
"iterator": false,
"defaultValue": "",
"extractionMethod": "DEP_PARAM_XPATH",
"extractionDetails": [
{
"description": "",
"extractValue": "//vpn-nodes/vpn-node[2]/vpn-node-id"
}
]
}
],
"subDependencies": [],
"softSubDependencies": []
}
],
"softRootDependencies": [],
"createTimestamp": "1697841637567500247",
"updateTimestamp": "0",
"monitoringType": "BASIC",
"version": "1.1"
}
Sub service: 'subservice.vpws.ctrlplane.health'
{
"id": "subservice.vpws.ctrlplane.health.summary system",
"name": "subservice.vpws.ctrlplane.health.summary",
"namespace": "system",
"description": "Groups together all the VPWS Ctrlplane health subservices.",
"params": [
{
"name": "vpnServiceId",
"description": "",
"type": "PARAM_TYPE_NON_LIST"
}
],
"liveMetrics": {},
"rootExpressions": [],
"dynamicConfig": null,
"symptom": null,
"dependencies": [],
"exprCid": "",
"createTimestamp": "1697841637373426164",
"updateTimestamp": "0",
"tags": [],
"version": "1.0"
}
{
"id": "subservice.vpws.ctrlplane.health system",
"name": "subservice.vpws.ctrlplane.health",
"namespace": "system",
"description": "check the health of the VPWS state",
"params": [
{
"name": "device",
"description": "",
"type": "PARAM_TYPE_NON_LIST"
},
{
"name": "groupName",
"description": "",
"type": "PARAM_TYPE_NON_LIST"
},
{
"name": "xconnectName",
"description": "",
"type": "PARAM_TYPE_NON_LIST"
}
],
"liveMetrics": {},
"rootExpressions": [
{
"evalExpression": "xconnect_state == 'up' && ac_state == 'up' && evpn_state == 'up'",
"activateCondition": ""
}
],
"dynamicConfig": null,
"symptom": {
"formatString": "VPWS State degraded. Device: {device}, XConnectGroup: {groupName}, XconnectName: {xconnectName}",
"level": "DEGRADED",
"priority": 15,
"condition": false
},
"dependencies": [
{
"type": "DEP_TYPE_METRIC",
"label": "xconnect_state",
"evalExpression": "metric.l2vpn.xconnect.state",
"namespace": "",
"symptom": null,
"paramMap": {
"device": "device",
"groupName": "groupName",
"xconnectName": "xconnectName"
},
"id": ""
},
{
"type": "DEP_TYPE_METRIC",
"label": "ac_state",
"evalExpression": "metric.l2vpn.xconnect.ac.state",
"namespace": "",
"symptom": null,
"paramMap": {
"device": "device",
"groupName": "groupName",
"xconnectName": "xconnectName"
},
"id": ""
},
{
"type": "DEP_TYPE_METRIC",
"label": "evpn_state",
"evalExpression": "metric.l2vpn.xconnect.pw.state",
"namespace": "",
"symptom": null,
"paramMap": {
"device": "device",
"groupName": "groupName",
"xconnectName": "xconnectName"
},
"id": ""
}
],
"exprCid": "",
"createTimestamp": "1697841637370064741",
"updateTimestamp": "0",
"tags": [],
"version": "1.0"
}
Sub service: 'subservice.device.health'
{
"id": "subservice.device.health system",
"name": "subservice.device.health",
"namespace": "system",
"description": "Monitor the health of the device.",
"params": [
{
"name": "device",
"description": "",
"type": "PARAM_TYPE_NON_LIST"
}
],
"liveMetrics": {},
"rootExpressions": [
{
"evalExpression": "cpu_healthy && memory_healthy",
"activateCondition": ""
}
],
"dynamicConfig": null,
"symptom": {
"formatString": "Heavier than expected resource consumption on the Device: {device}",
"level": "DEGRADED",
"priority": 100,
"condition": false
},
"dependencies": [
{
"type": "DEP_TYPE_EXPRESSION",
"label": "cpu_healthy",
"evalExpression": "ListElemsAverage(cpu_load) <= CPU_THRESHOLD_MAX",
"namespace": "",
"symptom": null,
"paramMap": {},
"id": ""
},
{
"type": "DEP_TYPE_EXPRESSION",
"label": "memory_healthy",
"evalExpression": "ListElemsSum(memory_free) > MEMFREE_THRESHOLD_MIN",
"namespace": "",
"symptom": null,
"paramMap": {},
"id": ""
},
{
"type": "DEP_TYPE_METRIC",
"label": "cpu_load",
"evalExpression": "metric.device.cpu.load",
"namespace": "",
"symptom": null,
"paramMap": {
"device": "device"
},
"id": ""
},
{
"type": "DEP_TYPE_METRIC",
"label": "memory_free",
"evalExpression": "metric.device.memory.free",
"namespace": "",
"symptom": null,
"paramMap": {
"device": "device"
},
"id": ""
}
],
"exprCid": "",
"createTimestamp": "1697841637256704609",
"updateTimestamp": "0",
"tags": [
"DEVICE_SUBSERVICES"
],
"version": "1.1"
}
{
"id": "subservice.device.summary system",
"name": "subservice.device.summary",
"namespace": "system",
"description": "Groups together all the Device subservices",
"params": [
{
"name": "vpnServiceId",
"description": "",
"type": "PARAM_TYPE_NON_LIST"
}
],
"liveMetrics": {},
"rootExpressions": [],
"dynamicConfig": null,
"symptom": null,
"dependencies": [],
"exprCid": "",
"createTimestamp": "1697841637260108075",
"updateTimestamp": "0",
"tags": [],
"version": "1.0"
}