This project has retired. For details please refer to its Attic page.
GiraphTimer xref
View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *     http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
17   */
18  
19  package org.apache.giraph.metrics;
20  
21  import com.google.common.collect.ImmutableMap;
22  
23  import java.util.concurrent.TimeUnit;
24  
25  /**
26   * A timer to record duration of an event in a given TimeUnit.
27   * GiraphTimer is actually just a single-value Yammer Gauge that has some
28   * methods to make timing things easier.
29   */
30  public class GiraphTimer extends ValueGauge<Long> {
31    /** Mapping from TimeUnit to abbreviation used for printing */
32    private static final ImmutableMap<TimeUnit, String> TIME_UNIT_TO_ABBREV =
33        ImmutableMap.<TimeUnit, String>builder().
34            put(TimeUnit.DAYS, "days").
35            put(TimeUnit.HOURS, "hours").
36            put(TimeUnit.MICROSECONDS, "us").
37            put(TimeUnit.MILLISECONDS, "ms").
38            put(TimeUnit.MINUTES, "mins").
39            put(TimeUnit.NANOSECONDS, "ns").
40            put(TimeUnit.SECONDS, "secs").build();
41  
42    /** dimension to measure things by */
43    private TimeUnit timeUnit;
44  
45    /**
46     * Create new timer, add it to the registry.
47     *
48     * @param registry GiraphMetricsRegistry to add timer to
49     * @param name String name of timer
50     * @param timeUnit TimeUnit to measure in
51     */
52    public GiraphTimer(GiraphMetricsRegistry registry, String name,
53                       TimeUnit timeUnit) {
54      super(registry, name);
55      this.timeUnit = timeUnit;
56      set(0L);
57    }
58  
59    /**
60     * Get TimeUnit used.
61     *
62     * @return TimeUnit being used.
63     */
64    public TimeUnit getTimeUnit() {
65      return timeUnit;
66    }
67  
68    /**
69     * Begin timing an event.
70     *
71     * @return GiraphTimerContext. Use stop() to end timing the event.
72     */
73    public GiraphTimerContext time() {
74      return new GiraphTimerContext(this);
75    }
76  
77    /**
78     * Set value from a given TimeUnit, converting to our TimeUnit.
79     *
80     * @param value long measurement taken.
81     * @param valueTimeUnit TimeUnit measurement is in.
82     * @return this
83     */
84    public GiraphTimer set(long value, TimeUnit valueTimeUnit) {
85      set(timeUnit.convert(value, valueTimeUnit));
86      return this;
87    }
88  
89    /**
90     * Get abbreviated string of TimeUnit.
91     *
92     * @return TimeUnit abbreviation.
93     */
94    public String getTimeUnitAbbrev() {
95      return TIME_UNIT_TO_ABBREV.get(timeUnit);
96    }
97  
98    /**
99     * Get string representation of value
100    *
101    * @return String value and abbreviated time unit
102    */
103   public String valueAndUnit() {
104     return "" + value() + " " + getTimeUnitAbbrev();
105   }
106 }