/*
* 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
*
* 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.streams.local.counters;
import org.apache.streams.local.builders.LocalStreamBuilder;
import org.apache.streams.util.ComponentUtils;
import net.jcip.annotations.ThreadSafe;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.concurrent.atomic.AtomicLong;
/**
*
*/
@ThreadSafe
public class DatumStatusCounter implements DatumStatusCounterMXBean{
public static final String NAME_TEMPLATE = "org.apache.streams.local:type=DatumCounter,name=%s,identifier=%s,startedAt=%s";
private static final Logger LOGGER = LoggerFactory.getLogger(DatumStatusCounter.class);
private AtomicLong failed;
private AtomicLong passed;
public DatumStatusCounter(String id) {
this(id, LocalStreamBuilder.DEFAULT_STREAM_IDENTIFIER, -1);
}
public DatumStatusCounter(String id, String streamIdentifier, long startedAt) {
this.failed = new AtomicLong(0);
this.passed = new AtomicLong(0);
ComponentUtils.registerLocalMBean(String.format(NAME_TEMPLATE, id, streamIdentifier, startedAt), this);
}
public void incrementFailedCount() {
this.incrementFailedCount(1);
}
public void incrementFailedCount(long delta) {
this.failed.addAndGet(delta);
}
public void incrementPassedCount() {
this.incrementPassedCount(1);
}
public void incrementPassedCount(long delta) {
this.passed.addAndGet(delta);
}
@Override
public double getFailRate() {
double failed = this.failed.get();
double passed = this.passed.get();
if(failed == 0.0 && passed == 0) {
return 0.0;
}
return failed / (passed + failed);
}
@Override
public long getNumFailed() {
return this.failed.get();
}
@Override
public long getNumPassed() {
return this.passed.get();
}
}