/*! ****************************************************************************** * * Pentaho Data Integration * * Copyright (C) 2002-2013 by Pentaho : http://www.pentaho.com * ******************************************************************************* * * Licensed 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. * ******************************************************************************/ package org.pentaho.di.core.metrics; import java.util.Date; import org.pentaho.di.core.logging.LoggingObjectInterface; import org.pentaho.di.core.logging.LoggingRegistry; import org.pentaho.di.core.logging.MetricsInterface; import org.pentaho.di.core.util.StringUtil; public class MetricsSnapshot implements MetricsSnapshotInterface { private Date date; private MetricsSnapshotType type; private MetricsInterface metric; private String subject; private String logChannelId; private Long value; /** * Create a new metrics snapshot * * @param type * @param metric * the metric to use (ex. Connect to database) * @param subject * the name of the metric subject (ex. the name of the database we're connecting to) * @param logChannelId */ public MetricsSnapshot( MetricsSnapshotType type, MetricsInterface metric, String subject, String logChannelId ) { this.date = new Date(); this.type = type; this.metric = metric; this.subject = subject; this.logChannelId = logChannelId; } /** * Create a new metrics snapshot without a subject * * @param type * @param description * @param logChannelId */ public MetricsSnapshot( MetricsSnapshotType type, MetricsInterface metric, String logChannelId ) { this( type, metric, null, logChannelId ); } /** * Create a snapshot metric with a value. * * @param type * The type. For metrics with a value it is usually MIN, MAX, SUM, COUNT, ... * @param metric * The metric to use * @param subject * The subject * @param value * The value * @param logChannelId * The logging channel to reference. */ public MetricsSnapshot( MetricsSnapshotType type, MetricsInterface metric, String subject, long value, String logChannelId ) { this( type, metric, subject, logChannelId ); this.value = value; } /** * Create a snapshot metric with a value. * * @param type * The type. For metrics with a value it is usually MIN, MAX, SUM, COUNT, ... * @param description * The description * @param value * The value * @param logChannelId * The logging channel to reference. */ public MetricsSnapshot( MetricsSnapshotType type, MetricsInterface metric, long value, String logChannelId ) { this( type, metric, null, value, logChannelId ); } @Override public String getKey() { if ( subject == null ) { return metric.getCode(); } else { return metric.getCode() + " / " + subject; } } public static String getKey( MetricsInterface metric, String subject ) { if ( subject == null ) { return metric.getCode(); } else { return metric.getCode() + " / " + subject; } } @Override public String toString() { LoggingObjectInterface loggingObject = LoggingRegistry.getInstance().getLoggingObject( logChannelId ); String subject = null; if ( loggingObject != null ) { subject = loggingObject.getObjectName() + "(" + loggingObject.getObjectType() + ")"; } else { subject = "-"; } return subject + " - " + getKey() + " @ " + StringUtil.getFormattedDateTime( date, true ) + " : " + type.toString(); } /** * @return the date */ @Override public Date getDate() { return date; } /** * @param date * the date to set */ @Override public void setDate( Date date ) { this.date = date; } /** * @return the type */ public MetricsSnapshotType getType() { return type; } /** * @param type * the type to set */ public void setType( MetricsSnapshotType type ) { this.type = type; } /** * @return the subject */ @Override public String getSubject() { return subject; } /** * @param subject * the subject to set */ public void setSubject( String subject ) { this.subject = subject; } /** * @return the value */ @Override public Long getValue() { return value; } /** * @param value * the value to set */ @Override public void setValue( Long value ) { this.value = value; } /** * @return the logChannelId */ @Override public String getLogChannelId() { return logChannelId; } /** * @param logChannelId * the logChannelId to set */ public void setLogChannelId( String logChannelId ) { this.logChannelId = logChannelId; } /** * @return the metric */ @Override public MetricsInterface getMetric() { return metric; } /** * @param metric * the metric to set */ public void setMetric( MetricsInterface metric ) { this.metric = metric; } }