blob: a3addc929b391e3bbfb1b5db6cd7090e248824ca [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.storm.metrics.sigar;
import org.hyperic.sigar.Sigar;
import org.hyperic.sigar.ProcCpu;
import backtype.storm.metric.api.IMetric;
import java.util.HashMap;
/**
* A metric using Sigar to get User and System CPU utilization for a worker.
*/
public class CPUMetric implements IMetric {
private long _prevUser = 0;
private long _prevSys = 0;
private final Sigar _sigar;
private final long _pid;
public CPUMetric() {
_sigar = new Sigar();
_pid = _sigar.getPid();
}
@Override
public Object getValueAndReset() {
try {
ProcCpu cpu = _sigar.getProcCpu(_pid);
long userTotal = cpu.getUser();
long sysTotal = cpu.getSys();
long user = userTotal - _prevUser;
long sys = sysTotal - _prevSys;
_prevUser = userTotal;
_prevSys = sysTotal;
HashMap<String, Long> ret = new HashMap<String, Long>();
ret.put("user-ms", user);
ret.put("sys-ms", sys);
return ret;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}