| /* |
| * Copyright 2017-present Open Networking Foundation |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package org.onosproject.drivers.server.impl.stats; |
| |
| import org.onosproject.drivers.server.stats.CpuStatistics; |
| |
| import org.onosproject.net.DeviceId; |
| import com.google.common.base.MoreObjects; |
| |
| import static com.google.common.base.Preconditions.checkNotNull; |
| import static com.google.common.base.Preconditions.checkArgument; |
| |
| /** |
| * Default implementation for CPU statistics. |
| */ |
| public final class DefaultCpuStatistics implements CpuStatistics { |
| |
| private static final float MIN_CPU_LOAD = (float) 0.0; |
| private static final float MAX_CPU_LOAD = (float) 1.0; |
| |
| // Upper limit of CPU cores in one machine |
| public static final int MAX_CPU_NB = 512; |
| |
| private final DeviceId deviceId; |
| |
| private final int id; |
| private final float load; |
| private final boolean isBusy; |
| |
| private DefaultCpuStatistics( |
| DeviceId deviceId, |
| int id, |
| float load, |
| boolean isBusy) { |
| checkNotNull(deviceId, "Device ID is NULL"); |
| checkArgument( |
| (id >= 0) && (id < MAX_CPU_NB), |
| "Invalid CPU core ID " + String.valueOf(id) + ", not in [0, " + String.valueOf(MAX_CPU_NB - 1) + "]" |
| ); |
| checkArgument( |
| (load >= MIN_CPU_LOAD) && (load <= MAX_CPU_LOAD), |
| "Invalid CPU load " + Float.toString(load) + ", not in [" + MIN_CPU_LOAD + ", " + MAX_CPU_LOAD + "]" |
| ); |
| |
| this.deviceId = deviceId; |
| this.id = id; |
| this.load = load; |
| this.isBusy = isBusy; |
| } |
| |
| // Constructor for serializer |
| private DefaultCpuStatistics() { |
| this.deviceId = null; |
| this.id = 0; |
| this.load = 0; |
| this.isBusy = false; |
| } |
| |
| /** |
| * Creates a builder for DefaultCpuStatistics object. |
| * |
| * @return builder object for DefaultCpuStatistics object |
| */ |
| public static DefaultCpuStatistics.Builder builder() { |
| return new Builder(); |
| } |
| |
| @Override |
| public int id() { |
| return this.id; |
| } |
| |
| @Override |
| public float load() { |
| return this.load; |
| } |
| |
| @Override |
| public boolean busy() { |
| return this.isBusy; |
| } |
| |
| @Override |
| public String toString() { |
| return MoreObjects.toStringHelper(this) |
| .omitNullValues() |
| .add("device", deviceId) |
| .add("id", id()) |
| .add("load", load()) |
| .add("isBusy", busy()) |
| .toString(); |
| } |
| |
| public static final class Builder { |
| |
| DeviceId deviceId; |
| int id; |
| float load; |
| boolean isBusy; |
| |
| private Builder() { |
| |
| } |
| |
| /** |
| * Sets the device identifier. |
| * |
| * @param deviceId device identifier |
| * @return builder object |
| */ |
| public Builder setDeviceId(DeviceId deviceId) { |
| this.deviceId = deviceId; |
| |
| return this; |
| } |
| |
| /** |
| * Sets the CPU ID. |
| * |
| * @param id the CPU ID |
| * @return builder object |
| */ |
| public Builder setId(int id) { |
| this.id = id; |
| |
| return this; |
| } |
| |
| /** |
| * Sets the CPU load. |
| * |
| * @param load CPU load |
| * @return builder object |
| */ |
| public Builder setLoad(float load) { |
| this.load = load; |
| |
| return this; |
| } |
| |
| /** |
| * Sets the CPU status (free or busy). |
| * |
| * @param isBusy CPU status |
| * @return builder object |
| */ |
| public Builder setIsBusy(boolean isBusy) { |
| this.isBusy = isBusy; |
| |
| return this; |
| } |
| |
| /** |
| * Creates a DefaultCpuStatistics object. |
| * |
| * @return DefaultCpuStatistics object |
| */ |
| public DefaultCpuStatistics build() { |
| return new DefaultCpuStatistics( |
| deviceId, |
| id, |
| load, |
| isBusy |
| ); |
| } |
| } |
| |
| } |