View Javadoc

1   /*
2    *  jDTAUS Core Utilities
3    *  Copyright (C) 2005 Christian Schulte
4    *  <cs@schulte.it>
5    *
6    *  This library is free software; you can redistribute it and/or
7    *  modify it under the terms of the GNU Lesser General Public
8    *  License as published by the Free Software Foundation; either
9    *  version 2.1 of the License, or any later version.
10   *
11   *  This library is distributed in the hope that it will be useful,
12   *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14   *  Lesser General Public License for more details.
15   *
16   *  You should have received a copy of the GNU Lesser General Public
17   *  License along with this library; if not, write to the Free Software
18   *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19   *
20   */
21  package org.jdtaus.core.monitor.util;
22  
23  import java.util.Date;
24  import java.util.Locale;
25  import org.jdtaus.core.container.ContainerFactory;
26  import org.jdtaus.core.logging.spi.Logger;
27  import org.jdtaus.core.monitor.TaskEvent;
28  import org.jdtaus.core.monitor.TaskListener;
29  
30  /**
31   * {@code TaskListener} logging the duration of an operation performed by
32   * a {@code Task}.
33   *
34   * @author <a href="mailto:cs@schulte.it">Christian Schulte</a>
35   * @version $JDTAUS: TaskDurationLogger.java 8641 2012-09-27 06:45:17Z schulte $
36   *
37   * @see #onTaskEvent(TaskEvent)
38   */
39  public final class TaskDurationLogger implements TaskListener
40  {
41      //--Dependencies------------------------------------------------------------
42  
43  // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:jdtausDependencies
44      // This section is managed by jdtaus-container-mojo.
45  
46      /**
47       * Gets the configured <code>Logger</code> implementation.
48       *
49       * @return The configured <code>Logger</code> implementation.
50       */
51      private Logger getLogger()
52      {
53          return (Logger) ContainerFactory.getContainer().
54              getDependency( this, "Logger" );
55  
56      }
57  
58      /**
59       * Gets the configured <code>Locale</code> implementation.
60       *
61       * @return The configured <code>Locale</code> implementation.
62       */
63      private Locale getLocale()
64      {
65          return (Locale) ContainerFactory.getContainer().
66              getDependency( this, "Locale" );
67  
68      }
69  
70  // </editor-fold>//GEN-END:jdtausDependencies
71  
72      //------------------------------------------------------------Dependencies--
73      //--Properties--------------------------------------------------------------
74  
75  // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:jdtausProperties
76      // This section is managed by jdtaus-container-mojo.
77  
78      /**
79       * Gets the value of property <code>defaultLoggingThresholdMillis</code>.
80       *
81       * @return Default number of milliseconds a task at least needs to run to trigger a message when finished.
82       */
83      private java.lang.Long getDefaultLoggingThresholdMillis()
84      {
85          return (java.lang.Long) ContainerFactory.getContainer().
86              getProperty( this, "defaultLoggingThresholdMillis" );
87  
88      }
89  
90  // </editor-fold>//GEN-END:jdtausProperties
91  
92      //--------------------------------------------------------------Properties--
93      //--TaskListener------------------------------------------------------------
94  
95      /**
96       * {@inheritDoc}
97       * <p>This method measures the time a task is running and logs
98       * information for tasks running longer than specified by configuration
99       * property {@code loggingThresholdMillis} (defaults to 60000).</p>
100      *
101      * @param event the event send by a {@code Task}.
102      */
103     public void onTaskEvent( final TaskEvent event )
104     {
105         if ( event != null )
106         {
107             final long now = System.currentTimeMillis();
108             final long start = event.getTask().getTimestamp();
109 
110             if ( TaskEvent.ENDED == event.getType() &&
111                  now - start > this.getLoggingThresholdMillis() )
112             {
113                 this.getLogger().info(
114                     this.getDurationInfoMessage(
115                     this.getLocale(),
116                     event.getTask().getDescription().
117                     getText( this.getLocale() ),
118                     new Date( start ),
119                     new Date( now ),
120                     new Long( now - start ) ) );
121 
122             }
123         }
124     }
125 
126     //------------------------------------------------------------TaskListener--
127     //--TaskDurationLogger------------------------------------------------------
128 
129     /**
130      * The number of milliseconds a task at least needs to run to trigger a
131      * message when finished.
132      */
133     private Long loggingTresholdMillis;
134 
135     /** Creates a new {@code TaskDurationLogger} instance. */
136     public TaskDurationLogger()
137     {
138         super();
139     }
140 
141     /**
142      * Creates a new {@code TaskDurationLogger} instance taking the number of
143      * milliseconds a task at least needs to run to trigger a message when
144      * finished.
145      *
146      * @param loggingThresholdMillis the number of milliseconds a task at least
147      * needs to run to trigger a message when finished.
148      */
149     public TaskDurationLogger( final long loggingThresholdMillis )
150     {
151         super();
152 
153         if ( loggingThresholdMillis > 0 )
154         {
155             this.loggingTresholdMillis = new Long( loggingThresholdMillis );
156         }
157     }
158 
159     /**
160      * Gets the number of milliseconds a task at least needs to run to trigger
161      * a message when finished.
162      *
163      * @return the number of milliseconds a task at least needs to run to
164      * trigger a message when finished.
165      */
166     public long getLoggingThresholdMillis()
167     {
168         if ( this.loggingTresholdMillis == null )
169         {
170             this.loggingTresholdMillis =
171                 this.getDefaultLoggingThresholdMillis();
172 
173         }
174 
175         return this.loggingTresholdMillis.intValue();
176     }
177 
178     //------------------------------------------------------TaskDurationLogger--
179     //--Messages----------------------------------------------------------------
180 
181 // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:jdtausMessages
182     // This section is managed by jdtaus-container-mojo.
183 
184     /**
185      * Gets the text of message <code>durationInfo</code>.
186      * <blockquote><pre>Taskinformation:
187      *Beschreibung ... : {0}
188      *Start .......... : {1,date,long} um {1,time,long}
189      *Ende ........... : {2,date,long} um {2,time,long}
190      *Laufzeit ....... : {3}ms</pre></blockquote>
191      * <blockquote><pre>Taskinformation:
192      *Description ... : {0}
193      *Start ......... : {1,date,long} at {1,time,long}
194      *End ........... : {2,date,long} at {2,time,long}
195      *Duration ...... : {3}ms</pre></blockquote>
196      *
197      * @param locale The locale of the message instance to return.
198      * @param taskDescription The description of the task.
199      * @param startDate The start date of the task.
200      * @param endDate The end date of the task.
201      * @param durationMillis The number of milliseconds the task ran.
202      *
203      * @return Information about a task.
204      */
205     private String getDurationInfoMessage( final Locale locale,
206             final java.lang.String taskDescription,
207             final java.util.Date startDate,
208             final java.util.Date endDate,
209             final java.lang.Number durationMillis )
210     {
211         return ContainerFactory.getContainer().
212             getMessage( this, "durationInfo", locale,
213                 new Object[]
214                 {
215                     taskDescription,
216                     startDate,
217                     endDate,
218                     durationMillis
219                 });
220 
221     }
222 
223 // </editor-fold>//GEN-END:jdtausMessages
224 
225     //----------------------------------------------------------------Messages--
226 }