blob: 5c1ba9905de6e4b8190c4ed09e5adbc9c2addc64 [file] [log] [blame]
Georgios Katsikas83600982017-05-28 20:41:45 +02001/*
2 * Copyright 2017-present Open Networking Foundation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.drivers.server.impl.stats;
18
19import org.onosproject.drivers.server.stats.CpuStatistics;
20import org.onosproject.drivers.server.stats.MonitoringStatistics;
21import org.onosproject.drivers.server.stats.TimingStatistics;
22
23import org.onosproject.net.DeviceId;
24import org.onosproject.net.device.PortStatistics;
25
26import com.google.common.base.MoreObjects;
27
28import java.util.Collection;
29
30import static com.google.common.base.Preconditions.checkNotNull;
31import static com.google.common.base.Preconditions.checkArgument;
32
33/**
34 * Default monitoring statistics for server devices.
35 * Includes CPU, NIC, and timing statistics.
36 */
37public final class DefaultMonitoringStatistics implements MonitoringStatistics {
38
39 private final DeviceId deviceId;
40
41 private final TimingStatistics timingStatistics;
42 private final Collection<CpuStatistics> cpuStatistics;
43 private final Collection<PortStatistics> nicStatistics;
44
45 private DefaultMonitoringStatistics(
46 DeviceId deviceId,
47 TimingStatistics timingStatistics,
48 Collection<CpuStatistics> cpuStatistics,
49 Collection<PortStatistics> nicStatistics) {
50 checkNotNull(deviceId, "Device ID is NULL");
51 checkNotNull(timingStatistics, "Timing statistics are NULL");
52 checkNotNull(cpuStatistics, "CPU statistics are NULL");
53 checkNotNull(nicStatistics, "NIC statistics are NULL");
54
55 this.deviceId = deviceId;
56 this.timingStatistics = timingStatistics;
57 this.cpuStatistics = cpuStatistics;
58 this.nicStatistics = nicStatistics;
59 }
60
61 // Constructor for serializer
62 private DefaultMonitoringStatistics() {
63 this.deviceId = null;
64 this.timingStatistics = null;
65 this.cpuStatistics = null;
66 this.nicStatistics = null;
67 }
68
69 /**
70 * Creates a builder for DefaultMonitoringStatistics object.
71 *
72 * @return builder object for DefaultMonitoringStatistics object
73 */
74 public static DefaultMonitoringStatistics.Builder builder() {
75 return new Builder();
76 }
77
78 @Override
79 public TimingStatistics timingStatistics() {
80 return this.timingStatistics;
81 }
82
83 @Override
84 public Collection<CpuStatistics> cpuStatisticsAll() {
85 return this.cpuStatistics;
86 }
87
88 @Override
89 public CpuStatistics cpuStatistics(int cpuId) {
90 checkArgument(
91 (cpuId >= 0) && (cpuId < DefaultCpuStatistics.MAX_CPU_NB),
92 "CPU core ID must be in [0, " +
93 String.valueOf(DefaultCpuStatistics.MAX_CPU_NB - 1) + "]"
94 );
95 for (CpuStatistics cs : this.cpuStatistics) {
96 if (cs.id() == cpuId) {
97 return cs;
98 }
99 }
100 return null;
101 }
102
103 @Override
104 public Collection<PortStatistics> nicStatisticsAll() {
105 return this.nicStatistics;
106 }
107
108 @Override
109 public PortStatistics nicStatistics(int nicId) {
110 checkArgument(nicId >= 0, "NIC ID must be a non-negative integer");
111 for (PortStatistics ns : this.nicStatistics) {
112 if (ns.port() == nicId) {
113 return ns;
114 }
115 }
116 return null;
117 }
118
119 @Override
120 public int numberOfNics() {
121 return this.nicStatistics.size();
122 }
123
124 @Override
125 public int numberOfCpus() {
126 return this.cpuStatistics.size();
127 }
128
129 @Override
130 public String toString() {
131 return MoreObjects.toStringHelper(this)
132 .omitNullValues()
133 .add("timingStatistics", timingStatistics())
134 .add("cpuStatistics", cpuStatisticsAll())
135 .add("nicStatistics", nicStatisticsAll())
136 .toString();
137 }
138
139 public static final class Builder {
140
141 DeviceId deviceId;
142 TimingStatistics timingStatistics;
143 Collection<CpuStatistics> cpuStatistics;
144 Collection<PortStatistics> nicStatistics;
145
146 private Builder() {
147
148 }
149
150 /**
151 * Sets the device identifier.
152 *
153 * @param deviceId device identifier
154 * @return builder object
155 */
156 public Builder setDeviceId(DeviceId deviceId) {
157 this.deviceId = deviceId;
158
159 return this;
160 }
161
162 /**
163 * Sets timing statistics.
164 *
165 * @param timingStatistics timing statistics
166 * @return builder object
167 */
168 public Builder setTimingStatistics(TimingStatistics timingStatistics) {
169 this.timingStatistics = timingStatistics;
170
171 return this;
172 }
173
174 /**
175 * Sets CPU statistics.
176 *
177 * @param cpuStatistics CPU statistics
178 * @return builder object
179 */
180 public Builder setCpuStatistics(Collection<CpuStatistics> cpuStatistics) {
181 this.cpuStatistics = cpuStatistics;
182
183 return this;
184 }
185
186 /**
187 * Sets NIC statistics.
188 *
189 * @param nicStatistics NIC statistics
190 * @return builder object
191 */
192 public Builder setNicStatistics(Collection<PortStatistics> nicStatistics) {
193 this.nicStatistics = nicStatistics;
194
195 return this;
196 }
197
198 /**
199 * Creates a MonitoringStatistics object.
200 *
201 * @return DefaultMonitoringStatistics object
202 */
203 public DefaultMonitoringStatistics build() {
204 return new DefaultMonitoringStatistics(
205 deviceId,
206 timingStatistics,
207 cpuStatistics,
208 nicStatistics
209 );
210 }
211
212 }
213
214}