1fb3fb4f3Stomee /* 2fb3fb4f3Stomee * CDDL HEADER START 3fb3fb4f3Stomee * 4fb3fb4f3Stomee * The contents of this file are subject to the terms of the 5fb3fb4f3Stomee * Common Development and Distribution License (the "License"). 6fb3fb4f3Stomee * You may not use this file except in compliance with the License. 7fb3fb4f3Stomee * 8fb3fb4f3Stomee * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9fb3fb4f3Stomee * or http://www.opensolaris.org/os/licensing. 10fb3fb4f3Stomee * See the License for the specific language governing permissions 11fb3fb4f3Stomee * and limitations under the License. 12fb3fb4f3Stomee * 13fb3fb4f3Stomee * When distributing Covered Code, include this CDDL HEADER in each 14fb3fb4f3Stomee * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15fb3fb4f3Stomee * If applicable, add the following below this CDDL HEADER, with the 16fb3fb4f3Stomee * fields enclosed by brackets "[]" replaced with your own identifying 17fb3fb4f3Stomee * information: Portions Copyright [yyyy] [name of copyright owner] 18fb3fb4f3Stomee * 19fb3fb4f3Stomee * CDDL HEADER END 20fb3fb4f3Stomee */ 21fb3fb4f3Stomee 22fb3fb4f3Stomee /* 23e77b06d2Stomee * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 24fb3fb4f3Stomee * Use is subject to license terms. 25fb3fb4f3Stomee */ 26fb3fb4f3Stomee package org.opensolaris.os.dtrace; 27fb3fb4f3Stomee 28fb3fb4f3Stomee import java.util.*; 29fb3fb4f3Stomee 30fb3fb4f3Stomee /** 31fb3fb4f3Stomee * Implementation detail used by {@link Consumer#getAggregate()}. 32fb3fb4f3Stomee * Package level access. 33fb3fb4f3Stomee */ 34fb3fb4f3Stomee class AggregateSpec { 35fb3fb4f3Stomee private Set <String> includedAggregationNames; 36fb3fb4f3Stomee private Set <String> clearedAggregationNames; 37fb3fb4f3Stomee AggregateSpec()38fb3fb4f3Stomee AggregateSpec() 39fb3fb4f3Stomee { 40fb3fb4f3Stomee includedAggregationNames = new HashSet <String> (); 41fb3fb4f3Stomee clearedAggregationNames = new HashSet <String> (); 42fb3fb4f3Stomee } 43fb3fb4f3Stomee 44fb3fb4f3Stomee public boolean isIncludeByDefault()45fb3fb4f3Stomee isIncludeByDefault() 46fb3fb4f3Stomee { 47fb3fb4f3Stomee return (includedAggregationNames == null); 48fb3fb4f3Stomee } 49fb3fb4f3Stomee 50fb3fb4f3Stomee public boolean isClearByDefault()51fb3fb4f3Stomee isClearByDefault() 52fb3fb4f3Stomee { 53fb3fb4f3Stomee return (clearedAggregationNames == null); 54fb3fb4f3Stomee } 55fb3fb4f3Stomee 56fb3fb4f3Stomee public void setIncludeByDefault(boolean include)57fb3fb4f3Stomee setIncludeByDefault(boolean include) 58fb3fb4f3Stomee { 59fb3fb4f3Stomee if (include) { 60fb3fb4f3Stomee includedAggregationNames = null; 61fb3fb4f3Stomee } else if (includedAggregationNames == null) { 62fb3fb4f3Stomee includedAggregationNames = new HashSet <String> (); 63fb3fb4f3Stomee } 64fb3fb4f3Stomee } 65fb3fb4f3Stomee 66fb3fb4f3Stomee public void setClearByDefault(boolean clear)67fb3fb4f3Stomee setClearByDefault(boolean clear) 68fb3fb4f3Stomee { 69fb3fb4f3Stomee if (clear) { 70fb3fb4f3Stomee clearedAggregationNames = null; 71fb3fb4f3Stomee } else if (clearedAggregationNames == null) { 72fb3fb4f3Stomee clearedAggregationNames = new HashSet <String> (); 73fb3fb4f3Stomee } 74fb3fb4f3Stomee } 75fb3fb4f3Stomee 76fb3fb4f3Stomee /** 77fb3fb4f3Stomee * Specifies which aggregations to include in an aggregate snapshot. 78fb3fb4f3Stomee * If none are specified, all aggregations are included. A snapshot 79fb3fb4f3Stomee * is read-consistent across all included aggregations. 80fb3fb4f3Stomee * 81fb3fb4f3Stomee * @see Consumer#getAggregate(AggregateSpec spec) 82fb3fb4f3Stomee */ 83fb3fb4f3Stomee public void addIncludedAggregationName(String name)84fb3fb4f3Stomee addIncludedAggregationName(String name) 85fb3fb4f3Stomee { 86fb3fb4f3Stomee if (includedAggregationNames == null) { 87fb3fb4f3Stomee includedAggregationNames = new HashSet <String> (); 88fb3fb4f3Stomee } 89*3e359d9cSTom Erickson includedAggregationNames.add( 90*3e359d9cSTom Erickson Aggregate.filterUnnamedAggregationName(name)); 91fb3fb4f3Stomee } 92fb3fb4f3Stomee 93fb3fb4f3Stomee /** 94fb3fb4f3Stomee * Specifies which aggregations to clear after snapping the 95fb3fb4f3Stomee * aggregate. If none are specified, no aggregations are cleared. 96fb3fb4f3Stomee * <p> 97fb3fb4f3Stomee * Aggregations are cleared immediately after they are snapped 98fb3fb4f3Stomee * before any more data can be accumulated in order to prevent loss 99fb3fb4f3Stomee * of data between snapshots. 100fb3fb4f3Stomee * 101fb3fb4f3Stomee * @see Consumer#getAggregate(AggregateSpec spec) 102fb3fb4f3Stomee */ 103fb3fb4f3Stomee public void addClearedAggregationName(String name)104fb3fb4f3Stomee addClearedAggregationName(String name) 105fb3fb4f3Stomee { 106fb3fb4f3Stomee if (clearedAggregationNames == null) { 107fb3fb4f3Stomee clearedAggregationNames = new HashSet <String> (); 108fb3fb4f3Stomee } 109*3e359d9cSTom Erickson clearedAggregationNames.add( 110*3e359d9cSTom Erickson Aggregate.filterUnnamedAggregationName(name)); 111fb3fb4f3Stomee } 112fb3fb4f3Stomee 113fb3fb4f3Stomee public Set <String> getIncludedAggregationNames()114fb3fb4f3Stomee getIncludedAggregationNames() 115fb3fb4f3Stomee { 116fb3fb4f3Stomee if (includedAggregationNames == null) { 117fb3fb4f3Stomee return Collections. <String> emptySet(); 118fb3fb4f3Stomee } 119e77b06d2Stomee return Collections. <String> unmodifiableSet(includedAggregationNames); 120fb3fb4f3Stomee } 121fb3fb4f3Stomee 122fb3fb4f3Stomee public Set <String> getClearedAggregationNames()123fb3fb4f3Stomee getClearedAggregationNames() 124fb3fb4f3Stomee { 125fb3fb4f3Stomee if (clearedAggregationNames == null) { 126fb3fb4f3Stomee return Collections. <String> emptySet(); 127fb3fb4f3Stomee } 128e77b06d2Stomee return Collections. <String> unmodifiableSet(clearedAggregationNames); 129fb3fb4f3Stomee } 130fb3fb4f3Stomee 131*3e359d9cSTom Erickson // Called by native code 132fb3fb4f3Stomee public boolean isIncluded(String aggregationName)133fb3fb4f3Stomee isIncluded(String aggregationName) 134fb3fb4f3Stomee { 135fb3fb4f3Stomee return ((includedAggregationNames == null) || 136*3e359d9cSTom Erickson includedAggregationNames.contains( 137*3e359d9cSTom Erickson Aggregate.filterUnnamedAggregationName(aggregationName))); 138fb3fb4f3Stomee } 139fb3fb4f3Stomee 140*3e359d9cSTom Erickson // Called by native code 141fb3fb4f3Stomee public boolean isCleared(String aggregationName)142fb3fb4f3Stomee isCleared(String aggregationName) 143fb3fb4f3Stomee { 144fb3fb4f3Stomee return ((clearedAggregationNames == null) || 145*3e359d9cSTom Erickson clearedAggregationNames.contains( 146*3e359d9cSTom Erickson Aggregate.filterUnnamedAggregationName(aggregationName))); 147fb3fb4f3Stomee } 148fb3fb4f3Stomee 149fb3fb4f3Stomee public String toString()150fb3fb4f3Stomee toString() 151fb3fb4f3Stomee { 1524ae67516Stomee StringBuilder buf = new StringBuilder(); 153fb3fb4f3Stomee buf.append(AggregateSpec.class.getName()); 154fb3fb4f3Stomee buf.append("[includedAggregationNames = "); 155fb3fb4f3Stomee buf.append(Arrays.toString(getIncludedAggregationNames().toArray())); 156fb3fb4f3Stomee buf.append(", clearedAggregationNames = "); 157fb3fb4f3Stomee buf.append(Arrays.toString(getClearedAggregationNames().toArray())); 158fb3fb4f3Stomee buf.append(", includeByDefault = "); 159fb3fb4f3Stomee buf.append(isIncludeByDefault()); 160fb3fb4f3Stomee buf.append(", clearByDefault = "); 161fb3fb4f3Stomee buf.append(isClearByDefault()); 162fb3fb4f3Stomee buf.append(']'); 163fb3fb4f3Stomee return buf.toString(); 164fb3fb4f3Stomee } 165fb3fb4f3Stomee } 166