30c1efbc1e0c1d1a5e2ca84c773673dcefa6f48d
[netconf.git] / netconf / tools / netconf-testtool / src / main / java / org / opendaylight / netconf / test / tool / monitoring / MonitoringSession.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.netconf.test.tool.monitoring;
9
10 import com.google.common.base.Joiner;
11 import javax.xml.bind.annotation.XmlElement;
12 import javax.xml.bind.annotation.XmlTransient;
13 import org.opendaylight.mdsal.binding.spec.naming.BindingMapping;
14 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
15 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.extension.rev131210.Session1;
16 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.sessions.Session;
17 import org.opendaylight.yangtools.yang.common.QName;
18
19 final class MonitoringSession {
20
21     @XmlTransient
22     private Session managementSession;
23
24     MonitoringSession(final Session managementSession) {
25         this.managementSession = managementSession;
26     }
27
28     MonitoringSession() {
29     }
30
31     public void setManagementSession(final Session managementSession) {
32         this.managementSession = managementSession;
33     }
34
35     @XmlElement(name = "session-id")
36     public long getId() {
37         return managementSession.getSessionId().longValue();
38     }
39
40     @XmlElement(name = "source-host")
41     public String getSourceHost() {
42         final IpAddress ipAddress = managementSession.getSourceHost().getIpAddress();
43         if (ipAddress.getIpv4Address() != null) {
44             return ipAddress.getIpv4Address().getValue();
45         } else {
46             return ipAddress.getIpv6Address().getValue();
47         }
48     }
49
50     @XmlElement(name = "login-time")
51     public String getLoginTime() {
52         return managementSession.getLoginTime().getValue();
53     }
54
55     @XmlElement(name = "in-bad-rpcs")
56     public Long getInBadRpcs() {
57         return managementSession.getInBadRpcs().getValue().longValue();
58     }
59
60     @XmlElement(name = "in-rpcs")
61     public Long getInRpcs() {
62         return managementSession.getInRpcs().getValue().longValue();
63     }
64
65     @XmlElement(name = "out-notifications")
66     public Long getOutNotifications() {
67         return managementSession.getOutNotifications().getValue().longValue();
68     }
69
70     @XmlElement(name = "out-rpc-errors")
71     public Long getOutRpcErrors() {
72         return managementSession.getOutRpcErrors().getValue().longValue();
73     }
74
75     @XmlElement(name = "transport")
76     public String getTransport() {
77         try {
78             final QName qualifiedName = (QName) managementSession.getTransport().implementedInterface()
79                 .getField(BindingMapping.QNAME_STATIC_FIELD_NAME).get(null);
80             // Add extension prefix if transport type is from extension yang module
81             if (qualifiedName.getNamespace().toString().equals(MonitoringConstants.EXTENSION_NAMESPACE)) {
82                 return Joiner.on(':').join(MonitoringConstants.EXTENSION_NAMESPACE_PREFIX,
83                         qualifiedName.getLocalName());
84             } else {
85                 return qualifiedName.getLocalName();
86             }
87         } catch (final NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
88             throw new IllegalArgumentException("Unknown transport type " + managementSession.getTransport(), e);
89         }
90     }
91
92     @XmlElement(name = "session-identifier", namespace = MonitoringConstants.EXTENSION_NAMESPACE)
93     public String getSessionType() {
94         return managementSession.augmentation(Session1.class).getSessionIdentifier();
95     }
96
97     @XmlElement(name = "username")
98     public String getUsername() {
99         return managementSession.getUsername();
100     }
101 }