Package com.webobjects.monitor.wotaskd.rest.controllers

Source Code of com.webobjects.monitor.wotaskd.rest.controllers.MApplicationController

package com.webobjects.monitor.wotaskd.rest.controllers;

import com.webobjects.appserver.WOActionResults;
import com.webobjects.appserver.WORequest;
import com.webobjects.foundation.NSArray;
import com.webobjects.foundation.NSDictionary;
import com.webobjects.monitor._private.MApplication;
import com.webobjects.monitor._private.MHost;
import com.webobjects.monitor._private.MInstance;
import com.webobjects.monitor._private.MObject;
import com.webobjects.monitor._private.MonitorException;
import com.webobjects.monitor.wotaskd.DirectAction;

import er.extensions.appserver.ERXHttpStatusCodes;
import er.extensions.eof.ERXKeyFilter;
import er.extensions.eof.ERXQ;

public class MApplicationController extends JavaMonitorController {

  public MApplicationController(WORequest request) {
    super(request);
  }

  @Override
  public WOActionResults createAction() throws Throwable {
    checkPassword();
    ERXKeyFilter filter = ERXKeyFilter.filterWithAttributes();
    MApplication application = create(filter);
    siteConfig().addApplication_W(application);
    return response(application, filter);
  }

  @Override
  public WOActionResults destroyAction() throws Throwable {
    checkPassword();
    MApplication application = (MApplication) routeObjectForKey("mApplication");   
    deleteApplication(application);
    return response(application, ERXKeyFilter.filterWithNone());
  }

  @Override
  public WOActionResults indexAction() throws Throwable {
    checkPassword();
    return response(siteConfig().applicationArray(), ERXKeyFilter.filterWithAttributes());
  }

  @Override
  public WOActionResults showAction() throws Throwable {
    checkPassword();
    MApplication application = (MApplication) routeObjectForKey("mApplication")
    return response(application, ERXKeyFilter.filterWithAttributes());
  }

  @Override
  public WOActionResults updateAction() throws Throwable {
    checkPassword();
    MApplication application = (MApplication) routeObjectForKey("mApplication");   
    update(application, ERXKeyFilter.filterWithAttributes());
    return response(application, ERXKeyFilter.filterWithAttributes());
  }

  public WOActionResults addInstanceAction() throws Throwable {
    checkPassword();
    MApplication application = (MApplication) routeObjectForKey("name");
    // Old code. The if statement replaces this code along with the addInstanceOnAllHostsAction() method. kib 20110622
    //    addInstance(application, (MHost)routeObjectForKey("host"), false);
    if (request().stringFormValueForKey("host") != null) {
      MHost mHost = siteConfig().hostWithName(request().stringFormValueForKey("host"));
      addInstance(application, mHost, false);
    } else
      addInstance(application, null, true);
    return response(application, ERXKeyFilter.filterWithNone());
  }

  public WOActionResults deleteInstanceAction() throws Throwable {
    checkPassword();
    MApplication application = (MApplication) routeObjectForKey("name");
    deleteInstance(application, Integer.valueOf(request().stringFormValueForKey("id")));
    return response(application, ERXKeyFilter.filterWithNone());
  }

  public WOActionResults addInstanceOnAllHostsAction() throws Throwable {
    checkPassword();
    MApplication application = (MApplication) routeObjectForKey("name");
    addInstance(application, null, true);
    return response(application, ERXKeyFilter.filterWithNone());
  }

  private void addInstance(MApplication application, MHost host, boolean addToAllHosts) {
    try {
      if (addToAllHosts) {
        for (MHost aHost : siteConfig().hostArray()) {
          siteConfig().addInstances_M(aHost, application, 1);
        }
      } else {
        siteConfig().addInstances_M(host, application, 1);
      }
    } finally {
    }
  }

  private void deleteInstance(MApplication application, Integer instanceId) {
    final MInstance instance = application.instanceWithID(instanceId);
    try {
      siteConfig().removeInstance_M(instance);
    } finally {
    }
  }

  private void deleteApplication(MApplication application) {
    try {
      siteConfig().removeApplication_M(application);
    } finally {
    }
  }

  public WOActionResults infoAction() {
    checkPassword();
    return response(instancesArray(), instanceFilter());
  }

  protected NSArray<MInstance> instancesArray() {
    MApplication application = (MApplication) routeObjectForKey("name");
    String id = request().stringFormValueForKey("id");

    NSArray<MInstance> instances = siteConfig().instanceArray();
    if (application != null) {
      if (id != null) {
        instances = ERXQ.filtered(siteConfig().instanceArray(), ERXQ.is("applicationName", application.name()).and(ERXQ.is("id", id)));
      } else {
        instances = ERXQ.filtered(siteConfig().instanceArray(), ERXQ.is("applicationName", application.name()));
      }
    }   
    return instances;
  }

  public WOActionResults isRunningAction() {
    checkPassword();

    NSArray<MInstance> instances = instancesArray();
    String num = (String) context().request().formValueForKey("num");

    int numberOfInstancesRequested = -1;
    if (num != null && !num.equals("") && !num.equalsIgnoreCase("all")) {
      try {
        numberOfInstancesRequested = Integer.valueOf(num).intValue();
        if (numberOfInstancesRequested > instances.count()) {
          numberOfInstancesRequested = -1;
        }
      } catch (Exception e) {
        // ignore
      }
    }

    int instancesAlive = 0;
    for (MInstance minstance: instances) {
      if (minstance.state == MObject.ALIVE) {
        instancesAlive++;
      }
    }

    String status = "YES";

    if ((numberOfInstancesRequested == -1 && instancesAlive < instances.count()) || instancesAlive < numberOfInstancesRequested) {
      status = "NO";
    }

    return response(status, ERXKeyFilter.filterWithAll());
  }

  public WOActionResults isStoppedAction() {
    checkPassword();
    String status = "YES";

    for (MInstance minstance: instancesArray()) {
      if (minstance.state == MObject.DEAD)
        continue;
      status = "NO";
      break;
    }

    return response(status, ERXKeyFilter.filterWithAll());
  }
 
  public WOActionResults stopAction() throws MonitorException {
    checkPassword();
    for (MInstance minstance: instancesArray()) {
      if (minstance.state == MObject.ALIVE || minstance.state == MObject.STARTING) {
        minstance.state = MObject.STOPPING;
        if (application().localMonitor().stopInstance(minstance) == null)
          throw new MonitorException("No response to STOP " + minstance.displayName());
      }
    }
    return response(ERXHttpStatusCodes.OK);   
  }
 
  public WOActionResults startAction() {
    checkPassword();
    for (MInstance minstance: instancesArray()) {
      if (minstance.state == MObject.DEAD
          || minstance.state == MObject.STOPPING
          || minstance.state == MObject.CRASHING
          || minstance.state == MObject.UNKNOWN) {
        minstance.state = MObject.STARTING;

        String errorMsg = application().localMonitor().startInstance(minstance);
        if (errorMsg != null) {
          NSDictionary element = new NSDictionary(new Object[]{Boolean.FALSE, errorMsg}, DirectAction.errorKeys);
          return response(element, ERXKeyFilter.filterWithAttributes());   
        }   
      }
    }
    return response(ERXHttpStatusCodes.OK);   
  }
 
  public WOActionResults forceQuitAction() throws MonitorException {
    for (MInstance minstance: instancesArray()) {
      minstance.state = MObject.STOPPING;
      if (application().localMonitor().terminateInstance(minstance) == null)
        throw new MonitorException("No response to STOP " + minstance.displayName());
    }
    return response(ERXHttpStatusCodes.OK);
  }

  public ERXKeyFilter instanceFilter() {
    ERXKeyFilter filter = ERXKeyFilter.filterWithNone();
    filter.include("applicationName");
    filter.include("id");
    filter.include("host.name");
    filter.include("port");
    filter.include("deaths");
    filter.include("isRefusingNewSessions");
    filter.include("isScheduled");
    filter.include("schedulingHourlyStartTime");
    filter.include("schedulingDailyStartTime");
    filter.include("schedulingWeeklyStartTime");
    filter.include("schedulingType");
    filter.include("schedulingStartDay");
    filter.include("schedulingInterval");
    filter.include("transactions");
    filter.include("activeSessions");
    filter.include("averageIdlePeriod");
    filter.include("avgTransactionTime");
    filter.include("isAutoRecovering");
    return filter;
  }

}
TOP

Related Classes of com.webobjects.monitor.wotaskd.rest.controllers.MApplicationController

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.