Package com.vmware.aurora.vc.vcevent

Source Code of com.vmware.aurora.vc.vcevent.VcEventUtil

/***************************************************************************
* Copyright (c) 2012-2013 VMware, Inc. All Rights Reserved.
* 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.
***************************************************************************/

/**
* <code>VcEventUtil</code> implements vc event related utilities.<p>
*
* @since   0.6
* @version 0.6
* @author Boris Weissman
*/

package com.vmware.aurora.vc.vcevent;

import java.text.SimpleDateFormat;
import org.apache.log4j.Logger;

import com.vmware.aurora.vc.MoUtil;
import com.vmware.aurora.vc.vcservice.VcContext;
import com.vmware.vim.binding.vim.Task;
import com.vmware.vim.binding.vim.TaskInfo;
import com.vmware.vim.binding.vim.TaskManager;
import com.vmware.vim.binding.vim.event.Event;
import com.vmware.vim.binding.vmodl.ManagedObjectReference;
import com.vmware.vim.binding.vmodl.query.PropertyCollector.Change;
import com.vmware.vim.binding.vmodl.query.PropertyCollector.FilterUpdate;
import com.vmware.vim.binding.vmodl.query.PropertyCollector.MissingObject;
import com.vmware.vim.binding.vmodl.query.PropertyCollector.MissingProperty;
import com.vmware.vim.binding.vmodl.query.PropertyCollector.ObjectUpdate;
import com.vmware.vim.binding.vmodl.query.PropertyCollector.UpdateSet;

public class VcEventUtil {
   private static Logger logger = Logger.getLogger(VcEventUtil.class);

   /**
    * Helper function that dumps all events in the passed array.
    *
    * @param events
    */
   public static void dumpEvents(Event[] events) {
      for (Event e : events) {
         dumpEvent(e);
      }
   }

   /**
    * Dumps the first level of detail about the passed Event param.
    *
    * @param Event
    */
   private static void dumpEvent(Event e) {
      StringBuilder buf = new StringBuilder();

      buf.append("id: ").append(e.getKey()).append(" : ").append(e.getChainId()).append(" ");
      buf.append(getEventName(e)).append("\n");
      if (e.getDynamicType() != null) {
         buf.append(" type: ").append(e.getDynamicType());
      }
      buf.append("\t").append(e.getFullFormattedMessage()).append("\n");
      if (e.getDatacenter() != null) {
         buf.append("\tdc:   ").append(e.getDatacenter().getName())
               .append("\n");
      }
      if (e.getComputeResource() != null) {
         buf.append("\tcr:   ").append(e.getComputeResource().getName())
               .append("\n");
      }
      if (e.getHost() != null) {
         buf.append("\thost: ").append(e.getHost().getName()).append("\n");
      }
      if (e.getDs() != null) {
         buf.append("\tds:   ").append(e.getDs().getName()).append("\n");
      }
      if (e.getNet() != null) {
         buf.append("\tnet:  ").append(e.getNet().getName()).append("\n");
      }
      if (e.getVm() != null) {
         buf.append("\tvm:   ").append(e.getVm().getName()).append("\n");
      }
      if (e.getUserName() != null && !e.getUserName().equals("")) {
         buf.append("\tuser: ").append(e.getUserName()).append("\n");
      }
      if (e.getCreatedTime() != null) {
         SimpleDateFormat dateFormat =
               new SimpleDateFormat("yyyy.MM.dd HH:mm:ss.SSS");
         String s = dateFormat.format(e.getCreatedTime().getTime());
         buf.append("created: ").append(s).append("\n");
      }
      logger.debug(buf.toString());
   }

   static String getEventName(Event e) {
      String fullName = e.getClass().getName();
      String[] tokens = fullName.split("\\.");
      String className = tokens[tokens.length - 1];
      return className;
   }

   /**
    * Helper function to get the number of updates in the update set.
    *
    * @param updateSet
    *           UpdateSet to calculate.
    * @return count number of updates in the set
    */
   public static int getUpdateSetCount(UpdateSet updateSet) {
      int updateCount = 0;
      if (updateSet != null && updateSet.getFilterSet() != null) {
         for (FilterUpdate pfu : updateSet.getFilterSet()) {
            ObjectUpdate[] objectUpdates = pfu.getObjectSet();
            if (objectUpdates != null) {
               updateCount += objectUpdates.length;
            }
         }
      }
      return updateCount;
   }

   /**
    * Helper function to dump the update set.
    *
    * @param updateSet
    *           UpdateSet to calculate.
    * @param currentVersion
    *           version (prior to this UpdateSet)
    * @return count number of updates in the set
    */
   public static int dumpUpdateSet(UpdateSet update, String currentVersion) {
      int updateCount = 0;
      StringBuilder stringBuffer = new StringBuilder();
      try {
         if (update == null) {
            stringBuffer.append("UpdateSet is null for version '");
            stringBuffer.append(currentVersion);
            stringBuffer.append("' \n");
            return updateCount;
         }
         stringBuffer.append("Dumping UpdateSet between version '");
         stringBuffer.append(currentVersion);
         stringBuffer.append("' => '");
         stringBuffer.append(update.getVersion());
         stringBuffer.append("\n");
         if (update.getFilterSet() == null) {
            stringBuffer.append("PropertyFilterUpdate is null \n");
            return updateCount;
         }
         stringBuffer.append("UpdateSet has '");
         stringBuffer.append(update.getFilterSet().length);
         stringBuffer.append("' PropertyFilterUpdate changes.\n");
         for (FilterUpdate pfu : update.getFilterSet()) {
            stringBuffer.append("\tPropertyFilterUpdate filter => '");
            stringBuffer.append(pfu.getFilter().getValue());
            stringBuffer.append("' \n");
            try {
               if ((pfu.getMissingSet() != null)
                     && (pfu.getMissingSet().length > 0)) {
                  for (MissingObject mObject : pfu.getMissingSet()) {
                     stringBuffer.append("\tMissingObject: ");
                     stringBuffer.append("PropertyFilterUpdate for");
                     stringBuffer.append("ManagedObjectReference '");
                     stringBuffer.append(mObject.getObj().getValue());
                     stringBuffer.append("' failed with fault message '");
                     stringBuffer.append(mObject.getFault()
                           .getLocalizedMessage());
                     stringBuffer.append("' \n");
                  }
               }
               ObjectUpdate[] objectUpdates = pfu.getObjectSet();
               if (objectUpdates != null) {
                  updateCount += objectUpdates.length;
                  for (ObjectUpdate oUpdate : objectUpdates) {
                     boolean taskUpdate = false;
                     stringBuffer.append("\tObjectUpdate of kind => '");
                     stringBuffer.append(oUpdate.getKind().toString());
                     stringBuffer.append("', type => '");
                     stringBuffer.append(oUpdate.getObj().getType());
                     stringBuffer.append("' for object => '");
                     stringBuffer.append(oUpdate.getObj().getValue());
                     stringBuffer.append("' \n");
                     if (oUpdate.getObj().getType().equalsIgnoreCase("Task")) {
                        taskUpdate = true;
                     }
                     if (oUpdate.getChangeSet() != null) {
                        for (Change pChange : oUpdate.getChangeSet()) {
                           stringBuffer.append("\t\t'");
                           stringBuffer.append(pChange.getName());
                           stringBuffer.append("' => '");
                           stringBuffer.append(pChange.getVal());
                           stringBuffer.append("' (");
                           stringBuffer.append(pChange.getOp().toString());
                           stringBuffer.append(") \n");
                           if (taskUpdate) {
                              if (pChange.getName().equals("info")) {
                                 TaskInfo taskInfo =
                                       (TaskInfo) pChange.getVal();
                                 stringBuffer.append("\t\t\t");
                                 stringBuffer.append("taskMoRef: ");
                                 stringBuffer.append(taskInfo.getTask()
                                       .getValue());
                                 stringBuffer.append("\n");
                                 stringBuffer.append("state: ");
                                 stringBuffer.append(taskInfo.getState()
                                       .toString());
                                 stringBuffer.append("\n");
                                 stringBuffer.append("progress: ");
                                 stringBuffer.append(taskInfo.getProgress());
                                 stringBuffer.append("\n");
                              }
                           }
                        }
                     }
                     if (oUpdate.getMissingSet() != null) {
                        for (MissingProperty mProp : oUpdate.getMissingSet()) {
                           stringBuffer.append("\t'");
                           stringBuffer.append(mProp.getPath());
                           stringBuffer.append("' failed with fault ");
                           stringBuffer.append("message '");
                           stringBuffer.append(mProp.getFault()
                                 .getLocalizedMessage());
                           stringBuffer.append("' \n");
                        }
                     }
                  }
               }
            } catch (Exception e) {
               logger.error("PropertyFilterUpdate dump exception:");
            }
         }
      } finally {
         if (stringBuffer != null) {
            logger.debug(stringBuffer.toString());
         }
      }
      return updateCount;
   }

   /**
    * Dump recent tasks: the more restrictive of 10 minutes worth of tasks or
    * 200 tasks.
    *
    * @throws Exception
    */
   public static void dumpRecentTasks() throws Exception {
      TaskManager taskManager = VcContext.getService().getTaskManager();
      ManagedObjectReference taskMoRefs[] = taskManager.getRecentTask();
      for (ManagedObjectReference moRef : taskMoRefs) {
         Task task = MoUtil.getManagedObject(moRef);
         dumpTask(task);
      }
   }

   public static void dumpTask(Task task) {
      StringBuilder buf = new StringBuilder();
      TaskInfo info = task.getInfo();
      buf.append("\ttaskMoRef: ").append(info.getTask().getValue()).append("\n");
      buf.append("\t").append(info.getName()).append(" : ").
         append(info.getDescription()).append("\n");
      buf.append("\tstate: ").append(info.getState()).append("\n");
      buf.append("\tprogress: ").append(info.getProgress());
      logger.info(buf);
   }
}
TOP

Related Classes of com.vmware.aurora.vc.vcevent.VcEventUtil

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.