+
+ @Override
+ protected void sessionUp() {
+ super.sessionUp();
+ Preconditions.checkState(loginTime == null, "Session is already up");
+ this.loginTime = new Date();
+ }
+
+ public void onIncommingRpcSuccess() {
+ inRpcSuccess++;
+ }
+
+ public void onIncommingRpcFail() {
+ inRpcFail++;
+ }
+
+ public void onOutgoingRpcError() {
+ outRpcError++;
+ }
+
+ public static final String ISO_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX";
+
+ private static final String dateTimePatternString = DateAndTime.PATTERN_CONSTANTS.get(0);
+ private static final Pattern dateTimePattern = Pattern.compile(dateTimePatternString);
+
+ @Override
+ public Session toManagementSession() {
+ SessionBuilder builder = new SessionBuilder();
+
+ builder.setSessionId(getSessionId());
+ builder.setSourceHost(new Host(new DomainName(header.getAddress())));
+
+ Preconditions.checkState(DateAndTime.PATTERN_CONSTANTS.size() == 1);
+ String formattedDateTime = formatDateTime(loginTime);
+
+ Matcher matcher = dateTimePattern.matcher(formattedDateTime);
+ Preconditions.checkState(matcher.matches(), "Formatted datetime %s does not match pattern %s", formattedDateTime, dateTimePattern);
+ builder.setLoginTime(new DateAndTime(formattedDateTime));
+
+ builder.setInBadRpcs(new ZeroBasedCounter32(inRpcFail));
+ builder.setInRpcs(new ZeroBasedCounter32(inRpcSuccess));
+ builder.setOutRpcErrors(new ZeroBasedCounter32(outRpcError));
+
+ builder.setUsername(header.getUserName());
+ builder.setTransport(getTransportForString(header.getTransport()));
+
+ builder.setOutNotifications(new ZeroBasedCounter32(0L));
+
+ builder.setKey(new SessionKey(getSessionId()));
+
+ Session1Builder builder1 = new Session1Builder();
+ builder1.setSessionIdentifier(header.getSessionIdentifier());
+ builder.addAugmentation(Session1.class, builder1.build());
+
+ return builder.build();
+ }
+
+ private Class<? extends Transport> getTransportForString(String transport) {
+ switch(transport) {
+ case "ssh" : return NetconfSsh.class;
+ case "tcp" : return NetconfTcp.class;
+ default: throw new IllegalArgumentException("Unknown transport type " + transport);
+ }
+ }
+
+ private String formatDateTime(Date loginTime) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat(ISO_DATE_FORMAT);
+ return dateFormat.format(loginTime);
+ }
+
+ @Override
+ protected NetconfServerSession thisInstance() {
+ return this;
+ }