Update of /cvsroot/wonder/Wonder/Deployment/JavaMonitorFramework/Sources/com/webobjects/monitor/_private In directory sc8-pr-cvs9.sourceforge.net:/tmp/cvs-serv17014/Deployment/JavaMonitorFramework/Sources/com/webobjects/monitor/_private Added Files: Integer_Extensions.java MApplication.java MHost.java MInstance.java MObject.java MSiteConfig.java MonitorException.java NSDictionary_Extensions.java ProtoLocalMonitor.java StatsUtilities.java String_Extensions.java _NSObjectUtilities.java Log Message: Deployment stuff added --- NEW FILE: Integer_Extensions.java --- /* © Copyright 2006- 2007 Apple Computer, Inc. All rights reserved. IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. (ÒAppleÓ) in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs copyrights in this original Apple software (the ÒApple SoftwareÓ), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package com.webobjects.monitor._private; import com.webobjects.foundation._NSUtilities; public class Integer_Extensions { static public Integer booleanAsNumber(boolean aBOOL) { if (aBOOL == true) { return _NSUtilities.IntegerForInt(1); } else { return _NSUtilities.IntegerForInt(0); } } static public boolean asBool(Integer aNumber) { if (aNumber.intValue() == 0) { return false; } else if (aNumber.intValue() == 1) { return true; } else { throw new RuntimeException("Boolean<=>Integer conversion exception : NSNumber value was not 0 or 1."); } } } --- NEW FILE: MApplication.java --- /* © Copyright 2006- 2007 Apple Computer, Inc. All rights reserved. IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. (ÒAppleÓ) in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs copyrights in this original Apple software (the ÒApple SoftwareÓ), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package com.webobjects.monitor._private; import java.util.Enumeration; import com.webobjects.foundation.NSArray; import com.webobjects.foundation.NSDictionary; import com.webobjects.foundation.NSMutableArray; import com.webobjects.foundation.NSMutableDictionary; public class MApplication extends MObject { /* String name; Integer startingPort; Integer timeForStartup; Boolean phasedStartup; Boolean autoRecover; Integer minimumActiveSessionsCount; String unixPath; String winPath; String macPath; Boolean cachingEnabled; String adaptor; Integer adaptorThreads; Integer listenQueueSize; Integer adaptorThreadsMin; Integer adaptorThreadsMax; String projectSearchPath; Integer sessionTimeOut; String statisticsPassword; Boolean debuggingEnabled; String unixOutputPath; String winOutputPath; String macOutputPath; Boolean autoOpenInBrowser; Integer lifebeatInterval; String additionalArgs; Boolean notificationEmailEnabled; String notificationEmailAddr; Integer retries; String scheduler; // "RANDOM" | "ROUNDROBIN" | "LOADAVERAGE" Integer dormant; String redir; Integer sendTimeout; Integer recvTimeout; Integer cnctTimeout; Integer sendBufSize; Integer recvBufSize; Integer poolsize; Integer urlVersion; // 3 | 4 */ /********** 'values' accessors **********/ public String name() { return (String) values.valueForKey("name"); } public void setName(String value) { if (!value.equals(name())) { setOldname(name()); values.takeValueForKey(value, "name"); _siteConfig.dataHasChanged(); } } public Integer startingPort() { return (Integer) values.valueForKey("startingPort"); } public void setStartingPort(Integer value) { values.takeValueForKey(MObject.validatedInteger(value), "startingPort"); _siteConfig.dataHasChanged(); } public Integer timeForStartup() { return (Integer) values.valueForKey("timeForStartup"); } public void setTimeForStartup(Integer value) { values.takeValueForKey(MObject.validatedInteger(value), "timeForStartup"); _siteConfig.dataHasChanged(); } public Boolean phasedStartup() { return (Boolean) values.valueForKey("phasedStartup"); } public void setPhasedStartup(Boolean value) { values.takeValueForKey(value, "phasedStartup"); _siteConfig.dataHasChanged(); } public Boolean autoRecover() { return (Boolean) values.valueForKey("autoRecover"); } public void setAutoRecover(Boolean value) { values.takeValueForKey(value, "autoRecover"); _siteConfig.dataHasChanged(); } public Integer minimumActiveSessionsCount() { return (Integer) values.valueForKey("minimumActiveSessionsCount"); } public void setMinimumActiveSessionsCount(Integer value) { values.takeValueForKey(MObject.validatedInteger(value), "minimumActiveSessionsCount"); _siteConfig.dataHasChanged(); } public String unixPath() { return (String) values.valueForKey("unixPath"); } public void setUnixPath(String value) { values.takeValueForKey(value, "unixPath"); _siteConfig.dataHasChanged(); } public String winPath() { return (String) values.valueForKey("winPath"); } public void setWinPath(String value) { values.takeValueForKey(value, "winPath"); _siteConfig.dataHasChanged(); } public String macPath() { return (String) values.valueForKey("macPath"); } public void setMacPath(String value) { values.takeValueForKey(value, "macPath"); _siteConfig.dataHasChanged(); } public Boolean cachingEnabled() { return (Boolean) values.valueForKey("cachingEnabled"); } public void setCachingEnabled(Boolean value) { values.takeValueForKey(value, "cachingEnabled"); _siteConfig.dataHasChanged(); } public String adaptor() { return (String) values.valueForKey("adaptor"); } public void setAdaptor(String value) { values.takeValueForKey(value, "adaptor"); _siteConfig.dataHasChanged(); } public Integer adaptorThreads() { return (Integer) values.valueForKey("adaptorThreads"); } public void setAdaptorThreads(Integer value) { values.takeValueForKey(MObject.validatedInteger(value), "adaptorThreads"); _siteConfig.dataHasChanged(); } public Integer listenQueueSize() { return (Integer) values.valueForKey("listenQueueSize"); } public void setListenQueueSize(Integer value) { values.takeValueForKey(MObject.validatedInteger(value), "listenQueueSize"); _siteConfig.dataHasChanged(); } public Integer adaptorThreadsMin() { return (Integer) values.valueForKey("adaptorThreadsMin"); } public void setAdaptorThreadsMin(Integer value) { values.takeValueForKey(MObject.validatedInteger(value), "adaptorThreadsMin"); _siteConfig.dataHasChanged(); } public Integer adaptorThreadsMax() { return (Integer) values.valueForKey("adaptorThreadsMax"); } public void setAdaptorThreadsMax(Integer value) { values.takeValueForKey(MObject.validatedInteger(value), "adaptorThreadsMax"); _siteConfig.dataHasChanged(); } public String projectSearchPath() { return (String) values.valueForKey("projectSearchPath"); } public void setProjectSearchPath(String value) { values.takeValueForKey(value, "projectSearchPath"); _siteConfig.dataHasChanged(); } public Integer sessionTimeOut() { return (Integer) values.valueForKey("sessionTimeOut"); } public void setSessionTimeOut(Integer value) { values.takeValueForKey(MObject.validatedInteger(value), "sessionTimeOut"); _siteConfig.dataHasChanged(); } public String statisticsPassword() { return (String) values.valueForKey("statisticsPassword"); } public void setStatisticsPassword(String value) { values.takeValueForKey(value, "statisticsPassword"); _siteConfig.dataHasChanged(); } public Boolean debuggingEnabled() { return (Boolean) values.valueForKey("debuggingEnabled"); } public void setDebuggingEnabled(Boolean value) { values.takeValueForKey(value, "debuggingEnabled"); _siteConfig.dataHasChanged(); } public String unixOutputPath() { return (String) values.valueForKey("unixOutputPath"); } public void setUnixOutputPath(String value) { values.takeValueForKey(value, "unixOutputPath"); _siteConfig.dataHasChanged(); } public String winOutputPath() { return (String) values.valueForKey("winOutputPath"); } public void setWinOutputPath(String value) { values.takeValueForKey(value, "winOutputPath"); _siteConfig.dataHasChanged(); } public String macOutputPath() { return (String) values.valueForKey("macOutputPath"); } public void setMacOutputPath(String value) { values.takeValueForKey(value, "macOutputPath"); _siteConfig.dataHasChanged(); } public Boolean autoOpenInBrowser() { return (Boolean) values.valueForKey("autoOpenInBrowser"); } public void setAutoOpenInBrowser(Boolean value) { values.takeValueForKey(value, "autoOpenInBrowser"); _siteConfig.dataHasChanged(); } public Integer lifebeatInterval() { return (Integer) values.valueForKey("lifebeatInterval"); } public void setLifebeatInterval(Integer value) { values.takeValueForKey(MObject.validatedLifebeatInterval(value), "lifebeatInterval"); _siteConfig.dataHasChanged(); } public String additionalArgs() { return (String) values.valueForKey("additionalArgs"); } public void setAdditionalArgs(String value) { values.takeValueForKey(value, "additionalArgs"); _siteConfig.dataHasChanged(); } public Boolean notificationEmailEnabled() { return (Boolean) values.valueForKey("notificationEmailEnabled"); } public void setNotificationEmailEnabled(Boolean value) { values.takeValueForKey(value, "notificationEmailEnabled"); _siteConfig.dataHasChanged(); } public String notificationEmailAddr() { return (String) values.valueForKey("notificationEmailAddr"); } public void setNotificationEmailAddr(String value) { values.takeValueForKey(value, "notificationEmailAddr"); _siteConfig.dataHasChanged(); } public Integer retries() { return (Integer) values.valueForKey("retries"); } public void setRetries(Integer value) { values.takeValueForKey(MObject.validatedInteger(value), "retries"); _siteConfig.dataHasChanged(); } public String scheduler() { return (String) values.valueForKey("scheduler"); } public void setScheduler(String value) { values.takeValueForKey(value, "scheduler"); _siteConfig.dataHasChanged(); } public Integer dormant() { return (Integer) values.valueForKey("dormant"); } public void setDormant(Integer value) { values.takeValueForKey(MObject.validatedInteger(value), "dormant"); _siteConfig.dataHasChanged(); } public String redir() { return (String) values.valueForKey("redir"); } public void setRedir(String value) { values.takeValueForKey(value, "redir"); _siteConfig.dataHasChanged(); } public Integer sendTimeout() { return (Integer) values.valueForKey("sendTimeout"); } public void setSendTimeout(Integer value) { values.takeValueForKey(MObject.validatedInteger(value), "sendTimeout"); _siteConfig.dataHasChanged(); } public Integer recvTimeout() { return (Integer) values.valueForKey("recvTimeout"); } public void setRecvTimeout(Integer value) { values.takeValueForKey(MObject.validatedInteger(value), "recvTimeout"); _siteConfig.dataHasChanged(); } public Integer cnctTimeout() { return (Integer) values.valueForKey("cnctTimeout"); } public void setCnctTimeout(Integer value) { values.takeValueForKey(MObject.validatedInteger(value), "cnctTimeout"); _siteConfig.dataHasChanged(); } public Integer sendBufSize() { return (Integer) values.valueForKey("sendBufSize"); } public void setSendBufSize(Integer value) { values.takeValueForKey(MObject.validatedInteger(value), "sendBufSize"); _siteConfig.dataHasChanged(); } public Integer recvBufSize() { return (Integer) values.valueForKey("recvBufSize"); } public void setRecvBufSize(Integer value) { values.takeValueForKey(MObject.validatedInteger(value), "recvBufSize"); _siteConfig.dataHasChanged(); } public Integer poolsize() { return (Integer) values.valueForKey("poolsize"); } public void setPoolsize(Integer value) { values.takeValueForKey(MObject.validatedInteger(value), "poolsize"); _siteConfig.dataHasChanged(); } public Integer urlVersion() { return (Integer) values.valueForKey("urlVersion"); } public void setUrlVersion(Integer value) { values.takeValueForKey(MObject.validatedUrlVersion(value), "urlVersion"); _siteConfig.dataHasChanged(); } /**********/ /********** 'values' accessors **********/ public String oldname() { return (String) values.valueForKey("oldname"); } public void setOldname(String value) { values.takeValueForKey(value, "oldname"); _siteConfig.dataHasChanged(); } /**********/ /********** Adding and Removing Instance primitives **********/ public void _addInstancePrimitive(MInstance anInstance) { _instanceArray.addObject(anInstance); if (!_hostArray.containsObject(anInstance._host)) { _hostArray.addObject(anInstance._host); } } public void _removeInstancePrimitive(MInstance anInstance) { _instanceArray.removeObject(anInstance); boolean uniqueHost = true; for (Enumeration e = _instanceArray.objectEnumerator(); e.hasMoreElements(); ) { MInstance anInst = (MInstance) e.nextElement(); if (anInstance._host == anInst._host) { uniqueHost = false; break; } } if (uniqueHost) { _hostArray.removeObject(anInstance._host); } } /**********/ /********** Object Graph **********/ NSMutableArray _instanceArray = new NSMutableArray(); NSMutableArray _hostArray = new NSMutableArray(); public NSMutableArray instanceArray() { return _instanceArray; } public NSArray hostArray() { return _hostArray; } /**********/ /********** Constructors **********/ // For UI public MApplication (String aName, MSiteConfig aConfig) { this(new NSDictionary<Object, Object>(new Object[]{aName}, new Object[]{"name"} ), aConfig); takeValuesFromDefaults(); } // For Unarchiving public MApplication (NSDictionary aDict, MSiteConfig aConfig) { _siteConfig = aConfig; updateValues(aDict); } // For Cheating on the AppConfigurePage public MApplication (NSMutableDictionary aDict, MSiteConfig aConfig, Object o) { _siteConfig = aConfig; values = aDict.mutableClone(); } private static NSDictionary _defaults = new NSDictionary <Object, Object>(new Object[]{ new Integer(2001), new Integer(30), Boolean.TRUE, Boolean.TRUE, new Integer(0), Boolean.TRUE, "WODefaultAdaptor", new Integer(8), new Integer(128), new Integer(16), new Integer(256), "()", new Integer(3600), "", Boolean.FALSE, Boolean.FALSE, new Integer(30), "", Boolean.FALSE, "/Library/WebObjects/Logs", "/Library/WebObjects/Applications"}, new Object[]{ "startingPort", "timeForStartup", "phasedStartup", "autoRecover", "minimumActiveSessionsCount", "cachingEnabled", "adaptor", "adaptorThreads", "listenQueueSize", "adaptorThreadsMin", "adaptorThreadsMax", "projectSearchPath", "sessionTimeOut", "statisticsPassword", "debuggingEnabled", "autoOpenInBrowser", "lifebeatInterval", "additionalArgs", "notificationEmailEnabled", "macOutputPath", "macPath"}); public void takeValuesFromDefaults() { values.addEntriesFromDictionary(_defaults); } public void pushValuesToInstances() { int instanceArrayCount = _instanceArray.count(); for (int i=0; i<instanceArrayCount; i++) { MInstance anInstance = (MInstance) _instanceArray.objectAtIndex(i); anInstance.takeValuesFromApplication(); } } /**********/ /********** Archiving Support **********/ public NSDictionary dictionaryForArchive() { return values; } public String toString() { return values.toString(); } public void extractAdaptorValuesFromSiteConfig() { // get my application settings adaptorValues.takeValueForKey(values.valueForKey("retries"), "retries"); adaptorValues.takeValueForKey(values.valueForKey("scheduler"), "scheduler"); adaptorValues.takeValueForKey(values.valueForKey("dormant"), "dormant"); adaptorValues.takeValueForKey(values.valueForKey("redir"), "redir"); adaptorValues.takeValueForKey(values.valueForKey("poolsize"), "poolsize"); adaptorValues.takeValueForKey(values.valueForKey("urlVersion"), "urlVersion"); // get MSiteConfig application settings for settings that are still not set if (adaptorValues.valueForKey("retries") == null) adaptorValues.takeValueForKey(_siteConfig.values.valueForKey("retries"), "retries"); if (adaptorValues.valueForKey("scheduler") == null) adaptorValues.takeValueForKey(_siteConfig.values.valueForKey("scheduler"), "scheduler"); if (adaptorValues.valueForKey("dormant") == null) adaptorValues.takeValueForKey(_siteConfig.values.valueForKey("dormant"), "dormant"); if (adaptorValues.valueForKey("redir") == null) adaptorValues.takeValueForKey(_siteConfig.values.valueForKey("redir"), "redir"); if (adaptorValues.valueForKey("poolsize") == null) adaptorValues.takeValueForKey(_siteConfig.values.valueForKey("poolsize"), "poolsize"); if (adaptorValues.valueForKey("urlVersion") == null) adaptorValues.takeValueForKey(_siteConfig.values.valueForKey("urlVersion"), "urlVersion"); } /**********/ public Integer nextID() { int instanceArrayCount = _instanceArray.count(); int lastSequence = 0; for (int i=0; i<instanceArrayCount; i++) { MInstance anInst = (MInstance) _instanceArray.objectAtIndex(i); int thisSequence = anInst.id().intValue(); if (thisSequence > lastSequence) { lastSequence = thisSequence; } } return new Integer(lastSequence+1); } public boolean isIDInUse(Integer ID) { if (instanceWithID(ID) == null) { return false; } return true; } public MInstance instanceWithID(Integer ID) { int instanceArrayCount = _instanceArray.count(); for (int i=0; i<instanceArrayCount; i++) { MInstance anInst = (MInstance) _instanceArray.objectAtIndex(i); if (anInst.id().equals(ID)) { return anInst; } } return null; } public Integer runningInstancesCount_W() { int runningInstances = 0; int numInstances = _instanceArray.count(); for (int i=0; i<numInstances; i++) { MInstance anInstance = (MInstance) _instanceArray.objectAtIndex(i); if (anInstance.isRunning_W()) { runningInstances++; } } return new Integer(runningInstances); } public boolean isRunning_W() { if (runningInstancesCount_W().intValue() > 0) { return true; } return false; } // Used for the ApplicationsPage public Integer runningInstancesCount = MObject._zeroInteger; public boolean isRunning() { if (runningInstancesCount.intValue() > 0) { return true; } return false; } // Used for the AppDetailPage public Integer runningInstancesCount_M() { int runningInstances = 0; int numInstances = _instanceArray.count(); for (int i=0; i<numInstances; i++) { MInstance anInstance = (MInstance) _instanceArray.objectAtIndex(i); if (anInstance.isRunning_M()) { runningInstances++; } } Integer riInt = new Integer(runningInstances); runningInstancesCount = riInt; return riInt; } public boolean isRunning_M() { if (runningInstancesCount_M().intValue() > 0) { return true; } return false; } public boolean isStopped_M() { int numInstances = _instanceArray.count(); for (int i=0; i<numInstances; i++) { MInstance anInstance = (MInstance) _instanceArray.objectAtIndex(i); if (anInstance.state != MObject.DEAD) { return false; } } return true; } } --- NEW FILE: MHost.java --- /* © Copyright 2006- 2007 Apple Computer, Inc. All rights reserved. IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. (ÒAppleÓ) in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs copyrights in this original Apple software (the ÒApple SoftwareÓ), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package com.webobjects.monitor._private; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Enumeration; import com.webobjects.appserver.WOApplication; import com.webobjects.appserver.WOHTTPConnection; import com.webobjects.appserver.WORequest; import com.webobjects.appserver.WOResponse; import com.webobjects.appserver.xml._JavaMonitorCoder; import com.webobjects.foundation.NSArray; import com.webobjects.foundation.NSData; import com.webobjects.foundation.NSDictionary; import com.webobjects.foundation.NSLog; import com.webobjects.foundation.NSMutableArray; import com.webobjects.foundation.NSMutableDictionary; import com.webobjects.foundation._NSThreadsafeMutableArray; public class MHost extends MObject { /* NSString name; NSString type; // WINDOWS | UNIX | MACOSX */ /********** 'values' accessors **********/ public String name() { return (String) values.valueForKey("name"); } public void setName(String value) { values.takeValueForKey(value, "name"); _siteConfig.dataHasChanged(); } public String type() { return (String) values.valueForKey("type"); } public void setType(String value) { values.takeValueForKey(MObject.validatedHostType(value), "type"); _siteConfig.dataHasChanged(); } /**********/ /********** Object Graph **********/ NSMutableArray _instanceArray; NSMutableArray _applicationArray = new NSMutableArray(); public NSMutableArray instanceArray() { return _instanceArray; } public NSArray applicationArray() { return _applicationArray; } /**********/ /********** Constructors **********/ // From the UI public MHost(MSiteConfig aConfig, String name, String type) { this(new NSDictionary <Object, Object>(new Object[]{name, type}, new Object[]{"name", "type"}), aConfig); } // Unarchiving or Monitor Update public MHost(NSDictionary aValuesDict, MSiteConfig aConfig) { values = new NSMutableDictionary(aValuesDict); _siteConfig = aConfig; _instanceArray = new NSMutableArray(); try { _address = InetAddress.getByName(name()); } catch (UnknownHostException anException) { NSLog.err.appendln("Error getting address for Host: " + name()); } // This is just for caching purposes errorResponse = (new _JavaMonitorCoder()).encodeRootObjectForKey(new NSDictionary<String, NSArray> (new NSArray("Failed to contact " + name() +"-"+ WOApplication.application().lifebeatDestinationPort()), "errorResponse"), "instanceResponse"); } /**********/ /********** Adding and Removing Instance Primitives **********/ public void _addInstancePrimitive(MInstance anInstance) { _instanceArray.addObject(anInstance); if (!_applicationArray.containsObject(anInstance._application)) { _applicationArray.addObject(anInstance._application); } } public void _removeInstancePrimitive(MInstance anInstance) { _instanceArray.removeObject(anInstance); // get the instances's host - check all the other instances that this application has to see if any other ones have that host // if not, remove it. boolean uniqueApplication = true; for (Enumeration e = _instanceArray.objectEnumerator(); e.hasMoreElements(); ) { MInstance anInst = (MInstance) e.nextElement(); if (anInstance._application == anInst._application) { uniqueApplication = false; break; } } if (uniqueApplication) { _applicationArray.removeObject(anInstance._application); } } /**********/ /********** InetAddress stuff **********/ private InetAddress _address = null; public InetAddress address() { return _address; } public String addressAsString() { if (_address != null) { return _address.getHostAddress(); } return "Unknown"; } /**********/ /********** Archiving Support **********/ public NSDictionary dictionaryForArchive() { return values; } public String toString() { return values.toString() + "\n" + "address = " + _address + "\n" + "runningInstances = " + runningInstances + "\n" + "operatingSystem = " + operatingSystem + "\n" + "processorType = " + processorType + "\n"; } /**********/ public Integer runningInstancesCount_W() { int runningInstances = 0; int numInstances = _instanceArray.count(); for (int i=0; i<numInstances; i++) { MInstance anInstance = (MInstance) _instanceArray.objectAtIndex(i); if (anInstance.isRunning_W()) { runningInstances++; } } return new Integer(runningInstances); } public boolean isPortInUse(Integer port) { if (instanceWithPort(port) == null) return false; else return true; } // KH - this is probably slow :) public Integer nextAvailablePort(Integer startingPort) { Integer retVal = null; do { if (isPortInUse(startingPort)) { startingPort = new Integer(startingPort.intValue() + 1); } else { retVal = startingPort; } } while (retVal == null); return retVal; } public MInstance instanceWithPort(Integer port) { int instanceArrayCount = _instanceArray.count(); for (int i=0; i<instanceArrayCount; i++) { MInstance anInst = (MInstance) _instanceArray.objectAtIndex(i); if (anInst.port().equals(port)) { return anInst; } } return null; } /********** Machine Information and Availability Check (Used by MONITOR) **********/ public String runningInstances = "?"; public String operatingSystem = "?"; public String processorType = "?"; public boolean isAvailable = false; public void _setHostInfo(NSDictionary _hostStats) { Object aValue = null; aValue = _hostStats.valueForKey("runningInstances"); if (aValue != null) runningInstances = aValue.toString(); aValue = _hostStats.valueForKey("operatingSystem"); if (aValue != null) operatingSystem = aValue.toString(); aValue = _hostStats.valueForKey("processorType"); if (aValue != null) processorType = aValue.toString(); } /**********/ /********** Communications Goop **********/ public static WOResponse[] sendRequestToWotaskdArray(NSData content, NSArray wotaskdArray, boolean willChange) { MSiteConfig aConfig; MHost aHost = (MHost) wotaskdArray.objectAtIndex(0); if (aHost != null) { aConfig = aHost.siteConfig(); } else { return null; } // we had errors reaching a host last time - do it again! if (aConfig.hostErrorArray.count() > 0) { _syncRequest = null; final WORequest aSyncRequest = syncRequest(aConfig); final _NSThreadsafeMutableArray<MHost> syncHosts = aConfig.hostErrorArray; if (NSLog.debugLoggingAllowedForLevelAndGroups(NSLog.DebugLevelDetailed, NSLog.DebugGroupDeployment)) NSLog.debug.appendln("Sending sync requests to: " + syncHosts.array()); // final MSiteConfig finalConfig = aConfig; Thread[] workers = new Thread[syncHosts.count()]; for (int i=0; i<workers.length; i++) { final int j = i; Runnable work = new Runnable() { public void run() { MHost aHost = syncHosts.objectAtIndex(j); aHost.sendRequestToWotaskd(aSyncRequest, true, true); } }; workers[j] = new Thread(work); workers[j].start(); } try { for (int i=0; i<workers.length; i++) { workers[i].join(); } } catch (InterruptedException ie) { } } final WORequest aRequest = new WORequest(MObject._POST, MObject.directActionString, MObject._HTTP1, aConfig.passwordDictionary(), content, null); final NSArray finalWotaskdArray = wotaskdArray; final boolean wc = willChange; Thread[] workers = new Thread[wotaskdArray.count()]; final WOResponse[] responses = new WOResponse[workers.length]; for (int i=0; i<workers.length; i++) { final int j = i; Runnable work = new Runnable() { public void run() { responses[j] = ((MHost) finalWotaskdArray.objectAtIndex(j)).sendRequestToWotaskd(aRequest, wc, false); } }; workers[j] = new Thread(work); workers[j].start(); } try { for (int i=0; i<workers.length; i++) { workers[i].join(); } } catch (InterruptedException ie) { // might be bad? } return responses; } private static WORequest _syncRequest = null; private static WORequest syncRequest(MSiteConfig aConfig) { if (_syncRequest == null) { NSMutableDictionary<String, NSDictionary> data = new NSMutableDictionary<String, NSDictionary>(aConfig.dictionaryForArchive(), "SiteConfig"); NSMutableDictionary<String, NSMutableDictionary<String, NSDictionary>> updateWotaskd = new NSMutableDictionary<String, NSMutableDictionary<String, NSDictionary>>(data, "sync"); NSMutableDictionary<String, NSMutableDictionary<String, NSMutableDictionary<String, NSDictionary>>> monitorRequest = new NSMutableDictionary<String, NSMutableDictionary<String, NSMutableDictionary<String, NSDictionary>>>(updateWotaskd, "updateWotaskd"); NSData content = new NSData( (new _JavaMonitorCoder()).encodeRootObjectForKey(monitorRequest, "monitorRequest") ); _syncRequest = new WORequest(MObject._POST, MObject.directActionString, MObject._HTTP1, aConfig.passwordDictionary(), content, null); } return _syncRequest; } private String errorResponse = null; public WOResponse sendRequestToWotaskd(WORequest aRequest, boolean willChange, boolean isSync) { if (NSLog.debugLoggingAllowedForLevelAndGroups(NSLog.DebugLevelDetailed, NSLog.DebugGroupDeployment)) NSLog.debug.appendln("!@#$!@#$ sendRequestToWotaskd creates a WOHTTPConnection"); WOResponse aResponse = null; try { WOHTTPConnection anHTTPConnection = new WOHTTPConnection(name(), WOApplication.application().lifebeatDestinationPort()); anHTTPConnection.setReceiveTimeout(10000); boolean requestSucceeded = anHTTPConnection.sendRequest(aRequest); isAvailable = true; if (requestSucceeded) { aResponse = anHTTPConnection.readResponse(); } else { isAvailable = false; } if (aResponse == null) { isAvailable = false; } } catch(Throwable localException) { if (NSLog.debugLoggingAllowedForLevelAndGroups(NSLog.DebugLevelDetailed, NSLog.DebugGroupDeployment)) NSLog.err.appendln(localException); isAvailable = false; } // For error handling if (aResponse == null) { if (willChange) { _siteConfig.hostErrorArray.addObjectIfAbsent(this); } aResponse = new WOResponse(); aResponse.setContent(errorResponse); } else { // if we successfully synced, clear the error dictionary if (isSync && isAvailable) { if (NSLog.debugLoggingAllowedForLevelAndGroups(NSLog.DebugLevelDetailed, NSLog.DebugGroupDeployment)) NSLog.debug.appendln("Cleared sync request for host " + name()); _siteConfig.hostErrorArray.removeObject(this); } } return aResponse; } } --- NEW FILE: MInstance.java --- /* © Copyright 2006- 2007 Apple Computer, Inc. All rights reserved. IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. (ÒAppleÓ) in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs copyrights in this original Apple software (the ÒApple SoftwareÓ), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package com.webobjects.monitor._private; import java.util.TimeZone; import com.webobjects.appserver.WOApplication; import com.webobjects.appserver.WOMailDelivery; import com.webobjects.foundation.NSArray; import com.webobjects.foundation.NSDictionary; import com.webobjects.foundation.NSLog; import com.webobjects.foundation.NSMutableArray; import com.webobjects.foundation.NSMutableDictionary; import com.webobjects.foundation.NSPathUtilities; import com.webobjects.foundation.NSTimeZone; import com.webobjects.foundation.NSTimestamp; import com.webobjects.foundation.NSTimestampFormatter; public class MInstance extends MObject { static NSTimestampFormatter dateFormatter = new NSTimestampFormatter("%m/%d/%Y %H:%M:%S %Z"); static NSTimestampFormatter shutdownFormatter = new NSTimestampFormatter("%a @ %H:00"); /* String hostName; Integer id; Integer port; String applicationName; Boolean autoRecover; Integer minimumActiveSessionsCount; String path; Boolean cachingEnabled; Boolean debuggingEnabled; String outputPath; Boolean autoOpenInBrowser; Integer lifebeatInterval; String additionalArgs; Boolean schedulingEnabled; String schedulingType; // HOURLY | WEEKLY | DAILY Integer schedulingHourlyStartTime; // 1-24 O'clock Integer schedulingDailyStartTime; // 1-24 O'clock Integer schedulingWeeklyStartTime; // 1-24 O'clock Integer schedulingStartDay; // 1-7 (Mon-Sun) Integer schedulingInterval; // in hours Boolean gracefulScheduling; Integer sendTimeout; Integer recvTimeout; Integer cnctTimeout; Integer sendBufSize; Integer recvBufSize; */ /********** 'values' accessors **********/ public String hostName() { return (String) values.valueForKey("hostName"); } public void setHostName(String value) { values.takeValueForKey(value, "hostName"); _siteConfig.dataHasChanged(); } public Integer id() { return (Integer) values.valueForKey("id"); } public void setId(Integer value) { values.takeValueForKey(MObject.validatedInteger(value), "id"); _siteConfig.dataHasChanged(); } public Integer port() { return (Integer) values.valueForKey("port"); } public void setPort(Integer value) { Integer valVal = MObject.validatedInteger(value); if (!valVal.equals(port())) { setOldport(port()); values.takeValueForKey(valVal, "port"); _siteConfig.dataHasChanged(); } } public String applicationName() { return (String) values.valueForKey("applicationName"); } public void setApplicationName(String value) { values.takeValueForKey(value, "applicationName"); _siteConfig.dataHasChanged(); } public Boolean autoRecover() { return (Boolean) values.valueForKey("autoRecover"); } public void setAutoRecover(Boolean value) { values.takeValueForKey(value, "autoRecover"); _siteConfig.dataHasChanged(); } public Integer minimumActiveSessionsCount() { return (Integer) values.valueForKey("minimumActiveSessionsCount"); } public void setMinimumActiveSessionsCount(Integer value) { values.takeValueForKey(MObject.validatedInteger(value), "minimumActiveSessionsCount"); _siteConfig.dataHasChanged(); } public String path() { return (String) values.valueForKey("path"); } public void setPath(String value) { values.takeValueForKey(value, "path"); _siteConfig.dataHasChanged(); } public Boolean cachingEnabled() { return (Boolean) values.valueForKey("cachingEnabled"); } public void setCachingEnabled(Boolean value) { values.takeValueForKey(value, "cachingEnabled"); _siteConfig.dataHasChanged(); } public Boolean debuggingEnabled() { return (Boolean) values.valueForKey("debuggingEnabled"); } public void setDebuggingEnabled(Boolean value) { values.takeValueForKey(value, "debuggingEnabled"); _siteConfig.dataHasChanged(); } public String outputPath() { return (String) values.valueForKey("outputPath"); } public void setOutputPath(String value) { values.takeValueForKey(MObject.validatedOutputPath(value), "outputPath"); _siteConfig.dataHasChanged(); } public Boolean autoOpenInBrowser() { return (Boolean) values.valueForKey("autoOpenInBrowser"); } public void setAutoOpenInBrowser(Boolean value) { values.takeValueForKey(value, "autoOpenInBrowser"); _siteConfig.dataHasChanged(); } public Integer lifebeatInterval() { return (Integer) values.valueForKey("lifebeatInterval"); } public void setLifebeatInterval(Integer value) { values.takeValueForKey(MObject.validatedLifebeatInterval(value), "lifebeatInterval"); _siteConfig.dataHasChanged(); } public String additionalArgs() { return (String) values.valueForKey("additionalArgs"); } public void setAdditionalArgs(String value) { values.takeValueForKey(value, "additionalArgs"); _siteConfig.dataHasChanged(); } public Boolean schedulingEnabled() { return (Boolean) values.valueForKey("schedulingEnabled"); } public void setSchedulingEnabled(Boolean value) { values.takeValueForKey(value, "schedulingEnabled"); _siteConfig.dataHasChanged(); } public String schedulingType() { return (String) values.valueForKey("schedulingType"); } public void setSchedulingType(String value) { values.takeValueForKey(MObject.validatedSchedulingType(value), "schedulingType"); _siteConfig.dataHasChanged(); } public Integer schedulingHourlyStartTime() { return (Integer) values.valueForKey("schedulingHourlyStartTime"); } public void setSchedulingHourlyStartTime(Integer value) { values.takeValueForKey(MObject.validatedSchedulingStartTime(value), "schedulingHourlyStartTime"); _siteConfig.dataHasChanged(); } public Integer schedulingDailyStartTime() { return (Integer) values.valueForKey("schedulingDailyStartTime"); } public void setSchedulingDailyStartTime(Integer value) { values.takeValueForKey(MObject.validatedSchedulingStartTime(value), "schedulingDailyStartTime"); _siteConfig.dataHasChanged(); } public Integer schedulingWeeklyStartTime() { return (Integer) values.valueForKey("schedulingWeeklyStartTime"); } public void setSchedulingWeeklyStartTime(Integer value) { values.takeValueForKey(MObject.validatedSchedulingStartTime(value), "schedulingWeeklyStartTime"); _siteConfig.dataHasChanged(); } public Integer schedulingStartDay() { return (Integer) values.valueForKey("schedulingStartDay"); } public void setSchedulingStartDay(Integer value) { values.takeValueForKey(MObject.validatedSchedulingStartDay(value), "schedulingStartDay"); _siteConfig.dataHasChanged(); } public Integer schedulingInterval() { return (Integer) values.valueForKey("schedulingInterval"); } public void setSchedulingInterval(Integer value) { values.takeValueForKey(MObject.validatedInteger(value), "schedulingInterval"); _siteConfig.dataHasChanged(); } public Boolean gracefulScheduling() { return (Boolean) values.valueForKey("gracefulScheduling"); } public void setGracefulScheduling(Boolean value) { values.takeValueForKey(value, "gracefulScheduling"); _siteConfig.dataHasChanged(); } public Integer sendTimeout() { return (Integer) values.valueForKey("sendTimeout"); } public void setSendTimeout(Integer value) { values.takeValueForKey(MObject.validatedInteger(value), "sendTimeout"); _siteConfig.dataHasChanged(); } public Integer recvTimeout() { return (Integer) values.valueForKey("recvTimeout"); } public void setRecvTimeout(Integer value) { values.takeValueForKey(MObject.validatedInteger(value), "recvTimeout"); _siteConfig.dataHasChanged(); } public Integer cnctTimeout() { return (Integer) values.valueForKey("cnctTimeout"); } public void setCnctTimeout(Integer value) { values.takeValueForKey(MObject.validatedInteger(value), "cnctTimeout"); _siteConfig.dataHasChanged(); } public Integer sendBufSize() { return (Integer) values.valueForKey("sendBufSize"); } public void setSendBufSize(Integer value) { values.takeValueForKey(MObject.validatedInteger(value), "sendBufSize"); _siteConfig.dataHasChanged(); } public Integer recvBufSize() { return (Integer) values.valueForKey("recvBufSize"); } public void setRecvBufSize(Integer value) { values.takeValueForKey(MObject.validatedInteger(value), "recvBufSize"); _siteConfig.dataHasChanged(); } /**********/ /********** Don't use this ***********/ public Integer oldport() { return (Integer) values.valueForKey("oldport"); } public void setOldport(Integer value) { values.takeValueForKey(MObject.validatedInteger(value), "oldport"); _siteConfig.dataHasChanged(); } /**********/ /********** Object Graph **********/ MHost _host; MApplication _application; public MHost host() { return _host; } public MApplication application() {return _application; } /**********/ NSTimestamp _lastRegistration = NSTimestamp.DistantPast; NSMutableArray _deaths = new NSMutableArray(); public boolean isRefusingNewSessions = false; public int state = MObject.DEAD; /********** Constructors **********/ // This constructor is for adding new instances through the UI public MInstance(MHost aHost, MApplication anApplication, Integer anID, MSiteConfig aConfig) { shutdownFormatter.setDefaultFormatTimeZone(NSTimeZone.timeZoneWithName("UTC", true)); values = new NSMutableDictionary(); _host = aHost; _application = anApplication; _siteConfig = aConfig; setApplicationName(_application.name()); setHostName(_host.name()); setId(anID); takeValuesFromApplication(); setSchedulingEnabled(Boolean.FALSE); setSchedulingType("DAILY"); setSchedulingHourlyStartTime(new Integer(3)); setSchedulingDailyStartTime(new Integer(3)); setSchedulingWeeklyStartTime(new Integer(3)); setSchedulingStartDay(new Integer(1)); // Sunday setSchedulingInterval(new Integer(12)); setGracefulScheduling(Boolean.TRUE); } // This constructor is for unarchiving Instances public MInstance(NSDictionary aDict, MSiteConfig aConfig) { shutdownFormatter.setDefaultFormatTimeZone(NSTimeZone.timeZoneWithName("UTC", true)); values = new NSMutableDictionary(aDict); _host = aConfig.hostWithName( hostName() ); _application = aConfig.applicationWithName( applicationName() ); _siteConfig = aConfig; calculateNextScheduledShutdown(); } public void _takeNameFromApplication() { setApplicationName(_application.name()); } public void _takePortFromApplication() { NSDictionary appValues = _application.values; MHost aHost = _host; Integer appPort = (Integer) appValues.valueForKey("startingPort"); if ( (port() == null) || ( (port() != null) && (port().intValue() < appPort.intValue()) ) ) setPort(aHost.nextAvailablePort(appPort)); } public void _takePathFromApplication() { NSDictionary appValues = _application.values; MHost aHost = _host; if (aHost.type().equals("UNIX")) { values.takeValueForKey(appValues.valueForKey("unixPath"), "path"); } else if (aHost.type().equals("WINDOWS")) { values.takeValueForKey(appValues.valueForKey("winPath"), "path"); } else if (aHost.type().equals("MACOSX")) { values.takeValueForKey(appValues.valueForKey("macPath"), "path"); } } public void _takeOutputPathFromApplication() { NSDictionary appValues = _application.values; MHost aHost = _host; if (aHost.type().equals("UNIX")) { values.takeValueForKey(generateOutputPath((String) appValues.valueForKey("unixOutputPath")), "outputPath"); } else if (aHost.type().equals("WINDOWS")) { values.takeValueForKey(generateOutputPath((String) appValues.valueForKey("winOutputPath")), "outputPath"); } else if (aHost.type().equals("MACOSX")) { values.takeValueForKey(generateOutputPath((String) appValues.valueForKey("macOutputPath")), "outputPath"); } } public void _takeValueFromApplication(String valueName) { NSDictionary appValues = _application.values; values.takeValueForKey(appValues.valueForKey(valueName), valueName); } public void takeValuesFromApplication() { _takeNameFromApplication(); _takePortFromApplication(); _takeValueFromApplication("autoRecover"); _takeValueFromApplication("minimumActiveSessionsCount"); _takePathFromApplication(); _takeOutputPathFromApplication(); _takeValueFromApplication("cachingEnabled"); _takeValueFromApplication("debuggingEnabled"); _takeValueFromApplication("autoOpenInBrowser"); _takeValueFromApplication("lifebeatInterval"); _takeValueFromApplication("additionalArgs"); } public String generateOutputPath(String pathEndingWithSeperator) { if (pathEndingWithSeperator != null) { return NSPathUtilities._standardizedPath(NSPathUtilities.stringByAppendingPathComponent(pathEndingWithSeperator, displayName())); } return null; } /**********/ /********** Archiving Support **********/ public NSDictionary dictionaryForArchive() { return values; } public String toString() { return (values.toString() + "\n" + "lastRegistration = " + _lastRegistration + "\n" + "state = " + state + "\n" + "isRefusingNewSessions = " + isRefusingNewSessions + "\n" + "deaths = " + _deaths); } public void extractAdaptorValuesFromApplication() { // get my instance settings adaptorValues.takeValueForKey(values.valueForKey("sendTimeout"), "sendTimeout"); adaptorValues.takeValueForKey(values.valueForKey("recvTimeout"), "recvTimeout"); adaptorValues.takeValueForKey(values.valueForKey("cnctTimeout"), "cnctTimeout"); adaptorValues.takeValueForKey(values.valueForKey("sendBufSize"), "sendBufSize"); adaptorValues.takeValueForKey(values.valueForKey("recvBufSize"), "recvBufSize"); // get MApplication application settings for setting that are still not set if (adaptorValues.valueForKey("sendTimeout") == null) adaptorValues.takeValueForKey(_application.values.valueForKey("sendTimeout"), "sendTimeout"); if (adaptorValues.valueForKey("recvTimeout") == null) adaptorValues.takeValueForKey(_application.values.valueForKey("recvTimeout"), "recvTimeout"); if (adaptorValues.valueForKey("cnctTimeout") == null) adaptorValues.takeValueForKey(_application.values.valueForKey("cnctTimeout"), "cnctTimeout"); if (adaptorValues.valueForKey("sendBufSize") == null) adaptorValues.takeValueForKey(_application.values.valueForKey("sendBufSize"), "sendBufSize"); if (adaptorValues.valueForKey("recvBufSize") == null) adaptorValues.takeValueForKey(_application.values.valueForKey("recvBufSize"), "recvBufSize"); // get MSiteConfig application settings for settings that are still not set if (adaptorValues.valueForKey("sendTimeout") == null) adaptorValues.takeValueForKey(_siteConfig.values.valueForKey("sendTimeout"), "sendTimeout"); if (adaptorValues.valueForKey("recvTimeout") == null) adaptorValues.takeValueForKey(_siteConfig.values.valueForKey("recvTimeout"), "recvTimeout"); if (adaptorValues.valueForKey("cnctTimeout") == null) adaptorValues.takeValueForKey(_siteConfig.values.valueForKey("cnctTimeout"), "cnctTimeout"); if (adaptorValues.valueForKey("sendBufSize") == null) adaptorValues.takeValueForKey(_siteConfig.values.valueForKey("sendBufSize"), "sendBufSize"); if (adaptorValues.valueForKey("recvBufSize") == null) adaptorValues.takeValueForKey(_siteConfig.values.valueForKey("recvBufSize"), "recvBufSize"); } /**********/ /********** Display Name Strings **********/ public String displayName() { return applicationName() + "-" + id(); } public String displayHostAndPort() { return hostName() + ":" + port(); } /**********/ /********** Statistics Support **********/ NSMutableDictionary _statistics = new NSMutableDictionary(); public NSDictionary statistics() { return _statistics; } public void setStatistics(NSDictionary newStatistics) { _statistics.takeValueForKey(MObject.validatedStats((String) newStatistics.valueForKey("transactions")), "transactions"); ... [truncated message content] |