Coverage Report - org.apache.giraph.metrics.GiraphMetrics
 
Classes in this File Line Coverage Branch Coverage Complexity
GiraphMetrics
0%
0/36
0%
0/2
1.083
 
 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  
 package org.apache.giraph.metrics;
 19  
 
 20  
 import org.apache.giraph.conf.GiraphConfiguration;
 21  
 import org.apache.giraph.utils.GcTracker;
 22  
 
 23  
 import com.google.common.collect.Lists;
 24  
 
 25  
 import java.io.PrintStream;
 26  
 import java.util.List;
 27  
 
 28  
 import static org.apache.giraph.bsp.BspService.INPUT_SUPERSTEP;
 29  
 
 30  
 /**
 31  
  * Top level metrics class for using Yammer's metrics in Giraph.
 32  
  */
 33  
 public class GiraphMetrics {
 34  
   /** Singleton instance for everyone to use */
 35  0
   private static GiraphMetrics INSTANCE = new GiraphMetrics();
 36  
 
 37  
   /** registry for per-superstep metrics */
 38  
   private final SuperstepMetricsRegistry perSuperstep;
 39  
 
 40  
   /** registry for optional per-job metrics */
 41  
   private final GiraphMetricsRegistry perJobOptional;
 42  
 
 43  
   /** registry for required per-job metrics */
 44  
   private final GiraphMetricsRegistry perJobRequired;
 45  
 
 46  
   /** Garbage collection tracker */
 47  
   private final GcTracker gcTracker;
 48  
 
 49  
   /** observer for per-superstep metrics re-initialization */
 50  0
   private final List<ResetSuperstepMetricsObserver> observers =
 51  0
       Lists.newArrayList();
 52  
 
 53  
   /**
 54  
    * Initialize no-op registry that creates no-op metrics.
 55  
    */
 56  0
   private GiraphMetrics() {
 57  0
     perJobOptional = GiraphMetricsRegistry.createFake();
 58  0
     perSuperstep = SuperstepMetricsRegistry.createFake();
 59  0
     perJobRequired = GiraphMetricsRegistry.createWithOptional("giraph", "job");
 60  0
     gcTracker = new GcTracker();
 61  0
   }
 62  
 
 63  
   /**
 64  
    * Initialize GiraphMetrics with Hadoop Context
 65  
    *
 66  
    * @param conf GiraphConfiguration to use.
 67  
    */
 68  0
   private GiraphMetrics(GiraphConfiguration conf) {
 69  0
     perJobOptional = GiraphMetricsRegistry.create(conf, "giraph", "job");
 70  0
     perSuperstep = SuperstepMetricsRegistry.create(conf, INPUT_SUPERSTEP);
 71  0
     perJobRequired = GiraphMetricsRegistry.createWithOptional("giraph", "job");
 72  0
     gcTracker = new GcTracker(conf);
 73  0
   }
 74  
 
 75  
   /**
 76  
    * Get singleton instance of GiraphMetrics.
 77  
    *
 78  
    * @return GiraphMetrics singleton instance
 79  
    */
 80  
   public static GiraphMetrics get() {
 81  0
     return INSTANCE;
 82  
   }
 83  
 
 84  
   /**
 85  
    * Initialize singleton instance of GiraphMetrics.
 86  
    *
 87  
    * @param conf GiraphConfiguration to use.
 88  
    */
 89  
   public static void init(GiraphConfiguration conf) {
 90  0
     INSTANCE = new GiraphMetrics(conf);
 91  0
   }
 92  
 
 93  
   /**
 94  
    * Get per-job optional metrics.
 95  
    *
 96  
    * @return per-job optional {@link GiraphMetricsRegistry}
 97  
    */
 98  
   public GiraphMetricsRegistry perJobOptional() {
 99  0
     return perJobOptional;
 100  
   }
 101  
 
 102  
   /**
 103  
    * Get per-job required metrics.
 104  
    *
 105  
    * @return per-job require {@link GiraphMetricsRegistry}
 106  
    */
 107  
   public GiraphMetricsRegistry perJobRequired() {
 108  0
     return perJobRequired;
 109  
   }
 110  
 
 111  
   /**
 112  
    * Get per-superstep metrics.
 113  
    *
 114  
    * @return per-superstep GiraphMetricsRegistry
 115  
    */
 116  
   public SuperstepMetricsRegistry perSuperstep() {
 117  0
     return perSuperstep;
 118  
   }
 119  
 
 120  
   /**
 121  
    * Get GC tracker
 122  
    *
 123  
    * @return Gc tracker
 124  
    */
 125  
   public GcTracker getGcTracker() {
 126  0
     return gcTracker;
 127  
   }
 128  
 
 129  
   /**
 130  
    * Anyone using per-superstep counters needs to re-initialize their Metrics
 131  
    * object on each new superstep. Otherwise they will always be updating just
 132  
    * one counter. This method allows people to easily register a callback for
 133  
    * when they should do the re-initializing.
 134  
    *
 135  
    * @param observer SuperstepObserver to watch
 136  
    */
 137  
   public synchronized void addSuperstepResetObserver(
 138  
       ResetSuperstepMetricsObserver observer) {
 139  0
     observers.add(observer);
 140  0
   }
 141  
 
 142  
   /**
 143  
    * Reset the per-superstep MetricsRegistry
 144  
    *
 145  
    * @param superstep long number of superstep
 146  
    */
 147  
   public synchronized void resetSuperstepMetrics(long superstep) {
 148  0
     perSuperstep.setSuperstep(superstep);
 149  0
     for (ResetSuperstepMetricsObserver observer : observers) {
 150  0
       observer.newSuperstep(perSuperstep);
 151  0
     }
 152  0
   }
 153  
 
 154  
   /**
 155  
    * Dump all metrics to output stream provided.
 156  
    *
 157  
    * @param out PrintStream to dump to.
 158  
    */
 159  
   public void dumpToStream(PrintStream out) {
 160  0
     perJobOptional.printToStream(out);
 161  0
     perJobRequired.printToStream(out);
 162  0
   }
 163  
 
 164  
   /**
 165  
    * Stop using metrics (for cleanup)
 166  
    */
 167  
   public void shutdown() {
 168  0
     perJobOptional.shutdown();
 169  0
     perJobRequired.shutdown();
 170  0
     perSuperstep.shutdown();
 171  0
   }
 172  
 }