diff --git a/html/includes/graphs/device/junos_jsrx_spu_sessions.inc.php b/html/includes/graphs/device/junos_jsrx_spu_sessions.inc.php
new file mode 100644
index 0000000000..95c2b7f0c0
--- /dev/null
+++ b/html/includes/graphs/device/junos_jsrx_spu_sessions.inc.php
@@ -0,0 +1,18 @@
+ RrdDefinition::make()->addDataset('spu_flow_sessions', 'GAUGE', 0),
+ );
+ $fields = array(
+ 'spu_flow_sessions' => $junos[0]['jnxJsSPUMonitoringCurrentFlowSession'],
+ );
+
+ data_update($device, 'junos_jsrx_spu_sessions', $tags, $fields);
+
+ $graphs['junos_jsrx_spu_sessions'] = true;
+ echo ' Flow Sessions';
+}
+
$version = snmp_get($device, 'jnxVirtualChassisMemberSWVersion.0', '-Oqv', 'JUNIPER-VIRTUALCHASSIS-MIB');
if (empty($version)) {
preg_match('/\[(.+)\]/', snmp_get($device, '.1.3.6.1.2.1.25.6.3.1.2.2', '-Oqv', 'HOST-RESOURCES-MIB'), $jun_ver);
diff --git a/mibs/junos/JUNIPER-SRX5000-SPU-MONITORING-MIB b/mibs/junos/JUNIPER-SRX5000-SPU-MONITORING-MIB
new file mode 100644
index 0000000000..80b3a24688
--- /dev/null
+++ b/mibs/junos/JUNIPER-SRX5000-SPU-MONITORING-MIB
@@ -0,0 +1,350 @@
+--
+-- Juniper Enterprise specific MIB: SRX5000 SPU monitoring MIB
+--
+-- Copyright (c) 2008-2010, Juniper Networks, Inc.
+-- All rights reserved.
+--
+-- The contents of this document are subject to change without notice.
+--
+
+JUNIPER-SRX5000-SPU-MONITORING-MIB DEFINITIONS ::= BEGIN
+
+IMPORTS
+ MODULE-IDENTITY, OBJECT-TYPE, Gauge32, Unsigned32
+ FROM SNMPv2-SMI
+ CounterBasedGauge64
+ FROM HCNUM-TC
+ DisplayString
+ FROM SNMPv2-TC
+ jnxJsSPUMonitoringRoot
+ FROM JUNIPER-JS-SMI;
+
+jnxJsSPUMonitoringMIB MODULE-IDENTITY
+ LAST-UPDATED "201003250000Z" -- Mar 25 00:00:00 2010 UTC
+ ORGANIZATION "Juniper Networks, Inc."
+ CONTACT-INFO
+ " Juniper Technical Assistance Center
+ Juniper Networks, Inc.
+ 1194 N. Mathilda Avenue
+ Sunnyvale, CA 94089
+ E-mail: support@juniper.net"
+ DESCRIPTION
+ "This is Juniper Networks' implementation of enterprise
+ specific MIB for SRX5000 SPU monitoring."
+ REVISION
+ "201207040000Z" -- Jul 04 00:00:00 2012 UTC
+ DESCRIPTION
+ "add MIB for session counters of IPv4 and IPv6 respectively."
+
+ ::= { jnxJsSPUMonitoringRoot 1 }
+
+ jnxJsSPUMonitoringObjectsTable OBJECT-TYPE
+ SYNTAX SEQUENCE OF JnxJsSPUMonitoringObjectsEntry
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION
+ "This table exposes SPUs utilization statistics."
+ ::= { jnxJsSPUMonitoringMIB 1 }
+
+ jnxJsSPUMonitoringObjectsEntry OBJECT-TYPE
+ SYNTAX JnxJsSPUMonitoringObjectsEntry
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION
+ "Each entry collects CPU/Memory utilization for a SPU."
+ INDEX { jnxJsSPUMonitoringIndex }
+ ::= { jnxJsSPUMonitoringObjectsTable 1 }
+
+ JnxJsSPUMonitoringObjectsEntry ::= SEQUENCE
+ {
+ jnxJsSPUMonitoringIndex Unsigned32,
+ jnxJsSPUMonitoringFPCIndex Unsigned32,
+ jnxJsSPUMonitoringSPUIndex Unsigned32,
+ jnxJsSPUMonitoringCPUUsage Unsigned32,
+ jnxJsSPUMonitoringMemoryUsage Unsigned32,
+ jnxJsSPUMonitoringCurrentFlowSession Unsigned32,
+ jnxJsSPUMonitoringMaxFlowSession Unsigned32,
+ jnxJsSPUMonitoringCurrentCPSession Unsigned32,
+ jnxJsSPUMonitoringMaxCPSession Unsigned32,
+ jnxJsSPUMonitoringNodeIndex Unsigned32,
+ jnxJsSPUMonitoringNodeDescr DisplayString,
+ jnxJsSPUMonitoringFlowSessIPv4 Unsigned32,
+ jnxJsSPUMonitoringFlowSessIPv6 Unsigned32,
+ jnxJsSPUMonitoringCPSessIPv4 Unsigned32,
+ jnxJsSPUMonitoringCPSessIPv6 Unsigned32
+ }
+
+ jnxJsSPUMonitoringIndex OBJECT-TYPE
+ SYNTAX Unsigned32
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION
+ "SPU's overall index in platform."
+ ::= { jnxJsSPUMonitoringObjectsEntry 1 }
+
+ jnxJsSPUMonitoringFPCIndex OBJECT-TYPE
+ SYNTAX Unsigned32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Which FPC SPU is on."
+ ::= { jnxJsSPUMonitoringObjectsEntry 2 }
+
+ jnxJsSPUMonitoringSPUIndex OBJECT-TYPE
+ SYNTAX Unsigned32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "SPU'Index inside the FPC."
+ ::= { jnxJsSPUMonitoringObjectsEntry 3 }
+
+ jnxJsSPUMonitoringCPUUsage OBJECT-TYPE
+ SYNTAX Unsigned32
+ UNITS "percent"
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Current SPU(CPU) Utilization in percentage."
+ ::= { jnxJsSPUMonitoringObjectsEntry 4 }
+
+ jnxJsSPUMonitoringMemoryUsage OBJECT-TYPE
+ SYNTAX Unsigned32
+ UNITS "percent"
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Current memory usage of SPU(CPU) in percentage."
+ ::= { jnxJsSPUMonitoringObjectsEntry 5 }
+
+ jnxJsSPUMonitoringCurrentFlowSession OBJECT-TYPE
+ SYNTAX Unsigned32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Current flow session number of SPU."
+ ::= { jnxJsSPUMonitoringObjectsEntry 6 }
+
+ jnxJsSPUMonitoringMaxFlowSession OBJECT-TYPE
+ SYNTAX Unsigned32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Max flow session number of SPU."
+ ::= { jnxJsSPUMonitoringObjectsEntry 7 }
+
+ jnxJsSPUMonitoringCurrentCPSession OBJECT-TYPE
+ SYNTAX Unsigned32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Current CP session number of SPU."
+ ::= { jnxJsSPUMonitoringObjectsEntry 8 }
+
+ jnxJsSPUMonitoringMaxCPSession OBJECT-TYPE
+ SYNTAX Unsigned32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Max CP session number of SPU."
+ ::= { jnxJsSPUMonitoringObjectsEntry 9 }
+
+ jnxJsSPUMonitoringNodeIndex OBJECT-TYPE
+ SYNTAX Unsigned32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "This attribute is used to identify a chassis. A chassis can
+ be configured in a single or cluster mode. When it is in a
+ cluster mode, the chassis can be denote as a cluster node."
+ ::= { jnxJsSPUMonitoringObjectsEntry 10 }
+
+ jnxJsSPUMonitoringNodeDescr OBJECT-TYPE
+ SYNTAX DisplayString (SIZE(1..255))
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "This attribute is used to describe the chassis/cluster
+ node information. Chassis can be configured as a single, or
+ cluster node. When it is cluster mode, the chassis can be
+ denoted as a cluster node."
+ ::= { jnxJsSPUMonitoringObjectsEntry 11 }
+
+ jnxJsSPUMonitoringFlowSessIPv4 OBJECT-TYPE
+ SYNTAX Unsigned32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Current IPv4 flow session number of SPU."
+ ::= { jnxJsSPUMonitoringObjectsEntry 12 }
+
+
+ jnxJsSPUMonitoringFlowSessIPv6 OBJECT-TYPE
+ SYNTAX Unsigned32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Current IPv6 flow session number of SPU."
+ ::= { jnxJsSPUMonitoringObjectsEntry 13 }
+
+
+ jnxJsSPUMonitoringCPSessIPv4 OBJECT-TYPE
+ SYNTAX Unsigned32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Current IPv4 CP session number of SPU."
+ ::= { jnxJsSPUMonitoringObjectsEntry 14 }
+
+
+ jnxJsSPUMonitoringCPSessIPv6 OBJECT-TYPE
+ SYNTAX Unsigned32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Current IPv6 CP session number of SPU."
+ ::= { jnxJsSPUMonitoringObjectsEntry 15 }
+
+
+ jnxJsSPUMonitoringCurrentTotalSession OBJECT-TYPE
+ SYNTAX Unsigned32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "System level total session in use."
+ ::= { jnxJsSPUMonitoringMIB 2 }
+
+
+ jnxJsSPUMonitoringMaxTotalSession OBJECT-TYPE
+ SYNTAX Unsigned32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "System level max session possible."
+ ::= { jnxJsSPUMonitoringMIB 3 }
+
+
+ jnxSPUClusterObjectsTable OBJECT-TYPE
+ SYNTAX SEQUENCE OF JnxSPUClusterObjectsEntry
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION
+ "This table exposes SPU monitoring objects in HA cluster."
+ ::= { jnxJsSPUMonitoringMIB 4 }
+
+
+ jnxSPUClusterObjectsEntry OBJECT-TYPE
+ SYNTAX JnxSPUClusterObjectsEntry
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION
+ "Each entry collects SPU monitoring contents in HA cluster."
+ INDEX { jnxJsClusterMonitoringNodeIndex }
+ ::= { jnxSPUClusterObjectsTable 1 }
+
+ JnxSPUClusterObjectsEntry ::= SEQUENCE
+ {
+ jnxJsClusterMonitoringNodeIndex Unsigned32,
+ jnxJsClusterMonitoringNodeDescr DisplayString,
+ jnxJsNodeCurrentTotalSession Unsigned32,
+ jnxJsNodeMaxTotalSession Unsigned32,
+ jnxJsNodeSessionCreationPerSecond CounterBasedGauge64,
+ jnxJsNodeSessCreationPerSecIPv4 CounterBasedGauge64,
+ jnxJsNodeSessCreationPerSecIPv6 CounterBasedGauge64,
+ jnxJsNodeCurrentTotalSessIPv4 Unsigned32,
+ jnxJsNodeCurrentTotalSessIPv6 Unsigned32
+ }
+
+ jnxJsClusterMonitoringNodeIndex OBJECT-TYPE
+ SYNTAX Unsigned32
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION
+ "This attribute is used to identify a chassis. A chassis can
+ be configured in a single or cluster mode. When it is in a
+ cluster mode, the chassis can be denote as a cluster node."
+ ::= { jnxSPUClusterObjectsEntry 1 }
+
+ jnxJsClusterMonitoringNodeDescr OBJECT-TYPE
+ SYNTAX DisplayString (SIZE(1..255))
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "This attribute is used to describe the chassis/cluster
+ node information. Chassis can be configured as a single, or
+ cluster node. When it is cluster mode, the chassis can be
+ denoted as a cluster node."
+ ::= { jnxSPUClusterObjectsEntry 2 }
+
+ jnxJsNodeCurrentTotalSession OBJECT-TYPE
+ SYNTAX Unsigned32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Node total session in use."
+ ::= { jnxSPUClusterObjectsEntry 3 }
+
+ jnxJsNodeMaxTotalSession OBJECT-TYPE
+ SYNTAX Unsigned32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Node max session possible."
+ ::= { jnxSPUClusterObjectsEntry 4 }
+
+ jnxJsNodeSessionCreationPerSecond OBJECT-TYPE
+ SYNTAX CounterBasedGauge64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Node average session created in last 96 seconds."
+ ::= { jnxSPUClusterObjectsEntry 5 }
+
+
+ jnxJsNodeSessCreationPerSecIPv4 OBJECT-TYPE
+ SYNTAX CounterBasedGauge64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Node average IPv4 session created in last 96 seconds."
+ ::= { jnxSPUClusterObjectsEntry 6 }
+
+ jnxJsNodeSessCreationPerSecIPv6 OBJECT-TYPE
+ SYNTAX CounterBasedGauge64
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Node average IPv6 session created in last 96 seconds."
+ ::= { jnxSPUClusterObjectsEntry 7 }
+
+ jnxJsNodeCurrentTotalSessIPv4 OBJECT-TYPE
+ SYNTAX Unsigned32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Node total IPv4 session in use."
+ ::= { jnxSPUClusterObjectsEntry 8 }
+
+ jnxJsNodeCurrentTotalSessIPv6 OBJECT-TYPE
+ SYNTAX Unsigned32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "Node total IPv6 session in use."
+ ::= { jnxSPUClusterObjectsEntry 9 }
+
+ jnxJsSPUMonitoringTotalSessIPv4 OBJECT-TYPE
+ SYNTAX Unsigned32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "System level total IPv4 session in use."
+ ::= { jnxJsSPUMonitoringMIB 5 }
+
+ jnxJsSPUMonitoringTotalSessIPv6 OBJECT-TYPE
+ SYNTAX Unsigned32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "System level total IPv6 session in use."
+ ::= { jnxJsSPUMonitoringMIB 6 }
+END
diff --git a/sql-schema/252.sql b/sql-schema/252.sql
new file mode 100644
index 0000000000..db74654b94
--- /dev/null
+++ b/sql-schema/252.sql
@@ -0,0 +1 @@
+INSERT INTO `graph_types`(`graph_type`, `graph_subtype`, `graph_section`, `graph_descr`, `graph_order`) VALUES ('device', 'junos_jsrx_spu_flows', 'network', 'SPU Flows', 0);
diff --git a/tests/data/junos_srx340.json b/tests/data/junos_srx340.json
new file mode 100644
index 0000000000..83f131b0d9
--- /dev/null
+++ b/tests/data/junos_srx340.json
@@ -0,0 +1,40 @@
+{
+ "os": {
+ "discovery": {
+ "devices": [
+ {
+ "sysName": "",
+ "sysObjectID": ".1.3.6.1.4.1.2636.1.1.1.2.135",
+ "sysDescr": "Juniper Networks, Inc. srx340 internet router, kernel JUNOS 15.1X49-D120.3, Build date: 2017-11-04 21:55:34 UTC Copyright (c) 1996-2017 Juniper Networks, Inc.",
+ "sysContact": null,
+ "version": null,
+ "hardware": "",
+ "features": null,
+ "location": null,
+ "os": "junos",
+ "type": "network",
+ "serial": null,
+ "icon": "junos.png"
+ }
+ ]
+ },
+ "poller": {
+ "devices": [
+ {
+ "sysName": "",
+ "sysObjectID": ".1.3.6.1.4.1.2636.1.1.1.2.135",
+ "sysDescr": "Juniper Networks, Inc. srx340 internet router, kernel JUNOS 15.1X49-D120.3, Build date: 2017-11-04 21:55:34 UTC Copyright (c) 1996-2017 Juniper Networks, Inc.",
+ "sysContact": "",
+ "version": "15.1X49-D120.3",
+ "hardware": "Juniper SRX340",
+ "features": null,
+ "location": "",
+ "os": "junos",
+ "type": "network",
+ "serial": "",
+ "icon": "junos.png"
+ }
+ ]
+ }
+ }
+}
diff --git a/tests/snmpsim/junos_srx340.snmprec b/tests/snmpsim/junos_srx340.snmprec
new file mode 100644
index 0000000000..3ce17beb85
--- /dev/null
+++ b/tests/snmpsim/junos_srx340.snmprec
@@ -0,0 +1,11 @@
+1.3.6.1.2.1.1.1.0|4|Juniper Networks, Inc. srx340 internet router, kernel JUNOS 15.1X49-D120.3, Build date: 2017-11-04 21:55:34 UTC Copyright (c) 1996-2017 Juniper Networks, Inc.
+1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.2636.1.1.1.2.135
+1.3.6.1.2.1.1.3.0|67|1240463251
+1.3.6.1.2.1.1.4.0|4|
+1.3.6.1.2.1.1.5.0|4|
+1.3.6.1.2.1.1.6.0|4|
+1.3.6.1.2.1.25.1.1.0|67|1240504129
+1.3.6.1.2.1.25.6.3.1.2.2|4|JUNOS Software Release [15.1X49-D120.3]
+1.3.6.1.4.1.2636.3.1.3.0|4|
+1.3.6.1.4.1.2636.3.39.1.12.1.1.1.6.0|66|109
+1.3.6.1.6.3.10.2.1.3.0|2|12404632