001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 package org.apache.commons.monitoring.jta; 018 019 import org.apache.commons.monitoring.Role; 020 import org.apache.commons.monitoring.configuration.Configuration; 021 import org.apache.commons.monitoring.counters.Unit; 022 import org.apache.commons.monitoring.gauges.Gauge; 023 import org.apache.commons.monitoring.gauges.GaugeFactory; 024 025 import java.util.concurrent.atomic.AtomicLong; 026 027 public class JTAGauges implements GaugeFactory { 028 public static final Role JTA_COMMITED = new Role("jta-commited", Unit.UNARY); 029 public static final Role JTA_ROLLBACKED = new Role("jta-rollbacked", Unit.UNARY); 030 public static final Role JTA_ACTIVE = new Role("jta-active", Unit.UNARY); 031 032 static final AtomicLong ACTIVE = new AtomicLong(0); 033 static final AtomicLong COMMITTED = new AtomicLong(0); 034 static final AtomicLong ROLLBACKED = new AtomicLong(0); 035 036 @Override 037 public Gauge[] gauges() { 038 final long period = Configuration.getInteger(Configuration.COMMONS_MONITORING_PREFIX + "gauge.jta.period", 4000); 039 return new Gauge[] { 040 new JTAGauge(JTA_COMMITED, COMMITTED, period), 041 new JTAGauge(JTA_ROLLBACKED, ROLLBACKED, period), 042 new JTAActiveGauge(JTA_ACTIVE, ACTIVE, period) 043 }; 044 } 045 046 protected static class JTAGauge implements Gauge { 047 private final Role role; 048 private final long period; 049 protected final AtomicLong counter; 050 051 protected JTAGauge(final Role role, final AtomicLong counter, final long period) { 052 this.role = role; 053 this.counter = counter; 054 this.period = period; 055 } 056 057 @Override 058 public Role role() { 059 return role; 060 } 061 062 @Override 063 public double value() { 064 return counter.getAndSet(0); 065 } 066 067 @Override 068 public long period() { 069 return period; 070 } 071 } 072 073 protected static class JTAActiveGauge extends JTAGauge { 074 protected JTAActiveGauge(final Role role, final AtomicLong counter, final long period) { 075 super(role, counter, period); 076 } 077 078 @Override 079 public double value() { 080 return counter.get(); 081 } 082 } 083 }