View Javadoc

1   /* 
2    * Copyright (c) 2007, Fraunhofer-Gesellschaft
3    * All rights reserved.
4    * 
5    * Redistribution and use in source and binary forms, with or without
6    * modification, are permitted provided that the following conditions are
7    * met:
8    * 
9    * (1) Redistributions of source code must retain the above copyright
10   *     notice, this list of conditions and the disclaimer at the end.
11   *     Redistributions in binary form must reproduce the above copyright
12   *     notice, this list of conditions and the following disclaimer in
13   *     the documentation and/or other materials provided with the
14   *     distribution.
15   * 
16   * (2) Neither the name of Fraunhofer nor the names of its
17   *     contributors may be used to endorse or promote products derived
18   *     from this software without specific prior written permission.
19   * 
20   * DISCLAIMER
21   * 
22   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25   * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26   * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29   * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30   * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33   *  
34   */
35  package org.ogf.graap.wsag.server.accounting;
36  
37  import java.text.DecimalFormat;
38  import java.text.MessageFormat;
39  
40  import org.apache.log4j.Logger;
41  import org.ogf.graap.wsag4j.types.engine.CompensationType;
42  import org.ogf.graap.wsag4j.types.engine.GuaranteeEvaluationResultType;
43  import org.ogf.graap.wsag4j.types.engine.SLAMonitoringNotificationEventType;
44  import org.ogf.graap.wsag4j.types.engine.SLOEvaluationResultType;
45  
46  /**
47   * SimpleLogAccountingSystem
48   * 
49   * @author Oliver Waeldrich
50   * 
51   */
52  public class SimpleAccountingSystemLogger implements IAccountingSystem
53  {
54  
55      private static final Logger LOG = Logger.getLogger( SimpleAccountingSystemLogger.class );
56  
57      /**
58       * {@inheritDoc}
59       * 
60       * @see org.ogf.graap.wsag.server.accounting.IAccountingSystem#issueCompensation(CompensationType,
61       *      IAccountingContext)
62       */
63      public void issueCompensation( SLAMonitoringNotificationEventType notificationEvent )
64      {
65  
66          for ( GuaranteeEvaluationResultType evaluationResult : notificationEvent.getGuaranteeEvaluationResultArray() )
67          {
68              LOG.info( MessageFormat.format( "evaluation result for guarantee ''{0}'': {1}",
69                                              new Object[] { evaluationResult.getName(), evaluationResult.getType() } ) );
70              
71              if ( evaluationResult.isSetCompensation() )
72              {
73                  LOG.info( MessageFormat.format( "issue compensation for guarantee ''{0}''",
74                                                  new Object[] { evaluationResult.getName() } ) );
75                  logCompensation( evaluationResult.getCompensation(), evaluationResult.getType() );
76              }
77              else
78              {
79                  LOG.info( MessageFormat.format( "no compensation issued for guarantee ''{0}''",
80                                                  new Object[] { evaluationResult.getName() } ) );
81              }
82          }
83  
84      }
85  
86      private void logCompensation( CompensationType compensation, SLOEvaluationResultType.Enum type )
87      {
88  
89          String compensationType = "";
90  
91          switch ( type.intValue() )
92          {
93              case SLOEvaluationResultType.INT_SLO_FULFILLED:
94                  compensationType = "reward";
95                  break;
96              case SLOEvaluationResultType.INT_SLO_VIOLATED:
97                  compensationType = "penalty";
98                  break;
99              default:
100                 compensationType = "unsupported result";
101         }
102 
103         long value = compensation.getValue().longValue();
104         String unit = ( compensation.isSetUnit() ) ? compensation.getUnit() : "";
105         
106         DecimalFormat twoDForm = new DecimalFormat( "#.##" );
107         String formatedValue = twoDForm.format( value );
108 
109         LOG.info( MessageFormat.format( "{0}: {1} {2}", new Object[] { compensationType, formatedValue, unit } ) );
110     }
111 
112 }