<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>

<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->

<body>
<!--
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
-->

Implementation of the metrics package that sends metric data to 
<a href="http://ganglia.sourceforge.net/">Ganglia</a>.
Programmers should not normally need to use this package directly. Instead
they should use org.hadoop.metrics.

<p/>
These are the implementation specific factory attributes 
(See ContextFactory.getFactory()):

<dl>
    <dt><i>contextName</i>.servers</dt>
    <dd>Space and/or comma separated sequence of servers to which UDP
    messages should be sent.</dd>
    
    <dt><i>contextName</i>.period</dt>
    <dd>The period in seconds on which the metric data is sent to the
    server(s).</dd>
    
    <dt><i>contextName</i>.units.<i>recordName</i>.<i>metricName</i></dt>
    <dd>The units for the specified metric in the specified record.</dd>
    
    <dt><i>contextName</i>.slope.<i>recordName</i>.<i>metricName</i></dt>
    <dd>The slope for the specified metric in the specified record.</dd>
    
    <dt><i>contextName</i>.tmax.<i>recordName</i>.<i>metricName</i></dt>
    <dd>The tmax for the specified metric in the specified record.</dd>
    
    <dt><i>contextName</i>.dmax.<i>recordName</i>.<i>metricName</i></dt>
    <dd>The dmax for the specified metric in the specified record.</dd>
    
</dl>


</body>
</html>
