From fe5447b895cb7e26bad2d5f401a204e704ff5064 Mon Sep 17 00:00:00 2001 From: Pascal Robert Date: Thu, 9 Aug 2012 13:59:40 -0400 Subject: [PATCH] Adding info action on mApplication REST service in wotaskd --- .../monitor/wotaskd/Application.java | 1 + .../controllers/MApplicationController.java | 50 +++++++++++++++++++ .../rest/delegates/MInstanceRestDelegate.java | 24 +++++++++ 3 files changed, 75 insertions(+) create mode 100644 Applications/wotaskd/Sources/com/webobjects/monitor/wotaskd/rest/delegates/MInstanceRestDelegate.java diff --git a/Applications/wotaskd/Sources/com/webobjects/monitor/wotaskd/Application.java b/Applications/wotaskd/Sources/com/webobjects/monitor/wotaskd/Application.java index 1b82de12251..428426781cc 100644 --- a/Applications/wotaskd/Sources/com/webobjects/monitor/wotaskd/Application.java +++ b/Applications/wotaskd/Sources/com/webobjects/monitor/wotaskd/Application.java @@ -205,6 +205,7 @@ public Application() { restHandler.addDefaultRoutes("MApplication", false, MApplicationController.class); restHandler.insertRoute(new ERXRoute("MApplication","/mApplications/{name:MApplication}/addInstance", ERXRoute.Method.Get, MApplicationController.class, "addInstance")); restHandler.insertRoute(new ERXRoute("MApplication","/mApplications/{name:MApplication}/deleteInstance", ERXRoute.Method.Get, MApplicationController.class, "deleteInstance")); + restHandler.insertRoute(new ERXRoute("MApplication","/mApplications/info", ERXRoute.Method.Get, MApplicationController.class, "info")); restHandler.addDefaultRoutes("MHost", false, MHostController.class); restHandler.addDefaultRoutes("MSiteConfig", false, MSiteConfigController.class); restHandler.insertRoute(new ERXRoute("MSiteConfig","/mSiteConfig", ERXRoute.Method.Put, MSiteConfigController.class, "update")); diff --git a/Applications/wotaskd/Sources/com/webobjects/monitor/wotaskd/rest/controllers/MApplicationController.java b/Applications/wotaskd/Sources/com/webobjects/monitor/wotaskd/rest/controllers/MApplicationController.java index f743ebdfd59..c0db1eb1534 100644 --- a/Applications/wotaskd/Sources/com/webobjects/monitor/wotaskd/rest/controllers/MApplicationController.java +++ b/Applications/wotaskd/Sources/com/webobjects/monitor/wotaskd/rest/controllers/MApplicationController.java @@ -1,12 +1,17 @@ package com.webobjects.monitor.wotaskd.rest.controllers; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + import com.webobjects.appserver.WOActionResults; import com.webobjects.appserver.WORequest; +import com.webobjects.foundation.NSArray; import com.webobjects.monitor._private.MApplication; import com.webobjects.monitor._private.MHost; import com.webobjects.monitor._private.MInstance; import er.extensions.eof.ERXKeyFilter; +import er.extensions.eof.ERXQ; public class MApplicationController extends JavaMonitorController { @@ -101,5 +106,50 @@ private void deleteApplication(MApplication application) { } finally { } } + + public WOActionResults infoAction() { + checkPassword(); + + String type = request().stringFormValueForKey("type"); + String name = request().stringFormValueForKey("name"); + + NSArray instances = siteConfig().instanceArray(); + if ("app".equals(type)) { + instances = ERXQ.filtered(siteConfig().instanceArray(), ERXQ.is("applicationName", name)); + } else if ("ins".equals(type)) { + Pattern p = Pattern.compile("^(.*)\\-([0-9]+)$"); + Matcher m = p.matcher(name); + if (m.matches()) { + String applicationName = m.group(1); + String id = m.group(2); + instances = ERXQ.filtered(siteConfig().instanceArray(), ERXQ.is("applicationName", applicationName).and(ERXQ.is("id", id))); + } + } + + return response(instances, instanceFilter()); + } + + 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; + } } diff --git a/Applications/wotaskd/Sources/com/webobjects/monitor/wotaskd/rest/delegates/MInstanceRestDelegate.java b/Applications/wotaskd/Sources/com/webobjects/monitor/wotaskd/rest/delegates/MInstanceRestDelegate.java new file mode 100644 index 00000000000..cc87533cd52 --- /dev/null +++ b/Applications/wotaskd/Sources/com/webobjects/monitor/wotaskd/rest/delegates/MInstanceRestDelegate.java @@ -0,0 +1,24 @@ +package com.webobjects.monitor.wotaskd.rest.delegates; + +import com.webobjects.eocontrol.EOClassDescription; +import com.webobjects.foundation.NSArray; +import com.webobjects.monitor._private.MInstance; + +import er.extensions.eof.ERXQ; +import er.rest.ERXRestContext; + +public class MInstanceRestDelegate extends JavaMonitorRestDelegate { + public Object primaryKeyForObject(Object obj, ERXRestContext context) { + NSArray objects = ERXQ.filtered(siteConfig().instanceArray(), ERXQ.is("applicationName", ((MInstance)obj).applicationName()).and(ERXQ.is("id", ((MInstance)obj).id()))); + return objects.size() == 0 ? null : objects.objectAtIndex(0); + } + + public Object createObjectOfEntityWithID(EOClassDescription entity, Object id, ERXRestContext context) { + return new MInstance(((MInstance)id).dictionaryForArchive(), siteConfig()); + } + + public Object objectOfEntityWithID(EOClassDescription entity, Object id, ERXRestContext context) { + return (siteConfig().instanceWithName(null)); + } + +}