1 // NAME
2 // $RCSfile: UpSincePdu.java,v $
3 // DESCRIPTION
4 // [given below in javadoc format]
5 // DELTA
6 // $Revision: 3.16 $
7 // CREATED
8 // $Date: 2006/11/29 16:12:50 $
9 // COPYRIGHT
10 // Westhawk Ltd
11 // TO DO
12 //
13
14 /*
15 * Copyright (C) 1996 - 1998 by Westhawk Ltd (www.westhawk.nl)
16 * Copyright (C) 1998 - 2006 by Westhawk Ltd
17 * <a href="www.westhawk.co.uk">www.westhawk.co.uk</a>
18 *
19 * Permission to use, copy, modify, and distribute this software
20 * for any purpose and without fee is hereby granted, provided
21 * that the above copyright notices appear in all copies and that
22 * both the copyright notice and this permission notice appear in
23 * supporting documentation.
24 * This software is provided "as is" without express or implied
25 * warranty.
26 * author <a href="mailto:snmp@westhawk.co.uk">Tim Panton</a>
27 */
28
29 package uk.co.westhawk.snmp.pdu;
30
31 /*-
32 * ╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲
33 * SNMP Java Client
34 * ჻჻჻჻჻჻
35 * Copyright 2023 MetricsHub, Westhawk
36 * ჻჻჻჻჻჻
37 * This program is free software: you can redistribute it and/or modify
38 * it under the terms of the GNU Lesser General Public License as
39 * published by the Free Software Foundation, either version 3 of the
40 * License, or (at your option) any later version.
41 *
42 * This program is distributed in the hope that it will be useful,
43 * but WITHOUT ANY WARRANTY; without even the implied warranty of
44 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
45 * GNU General Lesser Public License for more details.
46 *
47 * You should have received a copy of the GNU General Lesser Public
48 * License along with this program. If not, see
49 * <http://www.gnu.org/licenses/lgpl-3.0.html>.
50 * ╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱
51 */
52 import uk.co.westhawk.snmp.stack.*;
53 import java.util.*;
54
55 /**
56 * The UpSincePdu class will send a Get request for the sysUpTime and
57 * will calculate that date the system rebooted the last time.
58 *
59 * @author <a href="mailto:snmp@westhawk.co.uk">Tim Panton</a>
60 * @version $Revision: 3.16 $ $Date: 2006/11/29 16:12:50 $
61 */
62 public class UpSincePdu extends GetPdu {
63 private static final String version_id = "@(#)$Id: UpSincePdu.java,v 3.16 2006/11/29 16:12:50 birgit Exp $ Copyright Westhawk Ltd";
64
65 Date since;
66 /**
67 * The oid of sysUpTime
68 */
69 public final static String SYSUPTIME = "1.3.6.1.2.1.1.3.0";
70
71 /**
72 * Constructor that will send the request immediately.
73 *
74 * @param con The context of the request
75 * @param o the Observer that will be notified when the answer is received
76 */
77 public UpSincePdu(SnmpContextBasisFace con, Observer o)
78 throws PduException, java.io.IOException {
79 super(con);
80 addOid(SYSUPTIME);
81 if (o != null) {
82 addObserver(o);
83 }
84 send();
85 }
86
87 /**
88 * Returns the date when the system went up, (sysUpTime).
89 *
90 * @return the date
91 */
92 public Date getDate() {
93 return since;
94 }
95
96 /**
97 * The value of the request is set. This will be called by
98 * Pdu.fillin().
99 *
100 * @param n the index of the value
101 * @param res the value
102 * @see Pdu#new_value
103 */
104 protected void new_value(int n, varbind res) {
105 // given the uptime in centi seconds and the time now,
106 // calculate the time it rebooted
107
108 AsnObject val = res.getValue();
109 if (val instanceof AsnUnsInteger) {
110 AsnUnsInteger va = (AsnUnsInteger) res.getValue();
111 if (n == 0) {
112 long value = va.getValue();
113 Date now = new Date();
114 long then = now.getTime();
115 then -= 10 * value;
116 since = new Date(then);
117 }
118 } else {
119 since = null;
120 }
121 }
122
123 /**
124 * This method notifies all observers.
125 * This will be called by Pdu.fillin().
126 *
127 * <p>
128 * Unless an exception occurred the Object to the update() method of the
129 * Observer will be a Date.
130 * In the case of an exception, that exception will be passed.
131 * </p>
132 */
133 protected void tell_them() {
134 notifyObservers(since);
135 }
136
137 }