001 /* 002 * Copyright (c) 2007-2014 Concurrent, Inc. All Rights Reserved. 003 * 004 * Project and contact information: http://www.cascading.org/ 005 * 006 * This file is part of the Cascading project. 007 * 008 * Licensed under the Apache License, Version 2.0 (the "License"); 009 * you may not use this file except in compliance with the License. 010 * You may obtain a copy of the License at 011 * 012 * http://www.apache.org/licenses/LICENSE-2.0 013 * 014 * Unless required by applicable law or agreed to in writing, software 015 * distributed under the License is distributed on an "AS IS" BASIS, 016 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 017 * See the License for the specific language governing permissions and 018 * limitations under the License. 019 */ 020 021 package cascading.stats; 022 023 import java.util.ArrayList; 024 import java.util.Collection; 025 import java.util.HashSet; 026 import java.util.List; 027 import java.util.Map; 028 import java.util.Set; 029 030 import cascading.flow.Flow; 031 import cascading.management.state.ClientState; 032 import cascading.property.AppProps; 033 034 035 /** Class FlowStats collects {@link cascading.flow.Flow} specific statistics. */ 036 public class FlowStats extends CascadingStats 037 { 038 final Flow flow; 039 final List<FlowStepStats> flowStepStatsList = new ArrayList<FlowStepStats>(); 040 041 public FlowStats( Flow flow, ClientState clientState ) 042 { 043 super( flow.getName(), clientState ); 044 this.flow = flow; 045 } 046 047 public Map<Object, Object> getFlowProperties() 048 { 049 return flow.getConfigAsProperties(); 050 } 051 052 public String getAppID() 053 { 054 return AppProps.getApplicationID( getFlowProperties() ); 055 } 056 057 public String getAppName() 058 { 059 return AppProps.getApplicationName( getFlowProperties() ); 060 } 061 062 @Override 063 public String getID() 064 { 065 return flow.getID(); 066 } 067 068 @Override 069 public synchronized void recordInfo() 070 { 071 clientState.recordFlow( flow ); 072 } 073 074 public void addStepStats( FlowStepStats flowStepStats ) 075 { 076 flowStepStatsList.add( flowStepStats ); 077 } 078 079 /** 080 * Method getStepStats returns the stepStats owned by this FlowStats. 081 * 082 * @return the stepStats (type List<StepStats>) of this FlowStats object. 083 */ 084 public List<FlowStepStats> getFlowStepStats() 085 { 086 return flowStepStatsList; 087 } 088 089 /** 090 * Method getStepsCount returns the number of steps this Flow executed. 091 * 092 * @return the stepsCount (type int) of this FlowStats object. 093 */ 094 public int getStepsCount() 095 { 096 return flowStepStatsList.size(); 097 } 098 099 @Override 100 public Collection<String> getCounterGroups() 101 { 102 Set<String> results = new HashSet<String>(); 103 104 for( FlowStepStats flowStepStats : flowStepStatsList ) 105 results.addAll( flowStepStats.getCounterGroups() ); 106 107 return results; 108 } 109 110 @Override 111 public Collection<String> getCounterGroupsMatching( String regex ) 112 { 113 Set<String> results = new HashSet<String>(); 114 115 for( FlowStepStats flowStepStats : flowStepStatsList ) 116 results.addAll( flowStepStats.getCounterGroupsMatching( regex ) ); 117 118 return results; 119 } 120 121 @Override 122 public Collection<String> getCountersFor( String group ) 123 { 124 Set<String> results = new HashSet<String>(); 125 126 for( FlowStepStats flowStepStats : flowStepStatsList ) 127 results.addAll( flowStepStats.getCountersFor( group ) ); 128 129 return results; 130 } 131 132 @Override 133 public long getCounterValue( Enum counter ) 134 { 135 long value = 0; 136 137 for( FlowStepStats flowStepStats : flowStepStatsList ) 138 value += flowStepStats.getCounterValue( counter ); 139 140 return value; 141 } 142 143 @Override 144 public long getCounterValue( String group, String counter ) 145 { 146 long value = 0; 147 148 for( FlowStepStats flowStepStats : flowStepStatsList ) 149 value += flowStepStats.getCounterValue( group, counter ); 150 151 return value; 152 } 153 154 @Override 155 public void captureDetail() 156 { 157 for( FlowStepStats flowStepStats : flowStepStatsList ) 158 flowStepStats.captureDetail(); 159 } 160 161 @Override 162 public Collection getChildren() 163 { 164 return getFlowStepStats(); 165 } 166 167 @Override 168 protected String getStatsString() 169 { 170 return super.getStatsString() + ", stepsCount=" + getStepsCount(); 171 } 172 173 @Override 174 public String toString() 175 { 176 return "Flow{" + getStatsString() + '}'; 177 } 178 }