Wiki source code of Project Wonder additions to wotaskd and JavaMonitor
Version 126.1 by David Avendasora on 2010/11/29 19:45
Show last authors
| author | version | line-number | content |
|---|---|---|---|
| 1 | {{toc}}{{/toc}} | ||
| 2 | |||
| 3 | === Introduction === | ||
| 4 | |||
| 5 | WebObject's wotaskd and JavaMonitor deployment tools were open sourced in WebObjects 5.4. The source was then quickly modified and included in Project Wonder. Substantial improvements in both functionality and look-and-feel have been made over the years since their release as open source. These improved versions of **wotaskd.woa** and **JavaMonitor.woa** are available as full Wonder applications. | ||
| 6 | |||
| 7 | [[image:WonderJavaMonitor.png||border="1"]] | ||
| 8 | |||
| 9 | === Where to get them === | ||
| 10 | |||
| 11 | You can either download them pre-built from [[Wonder's Hudson build server>>http://webobjects.mdimension.com/hudson/job/Wonder54/lastSuccessfulBuild/artifact/dist/]] or build them from the source code. | ||
| 12 | |||
| 13 | To build them from the [[Wonder source code>>WONDER:Download Wonder Source, Build, Install and Upgrade]], simply run the following command from the Wonder directory at the root of the Wonder source. | ||
| 14 | |||
| 15 | {{code}} | ||
| 16 | ant frameworks deployment.tools -Dwonder.patch=54 -Ddeployment.standalone=true | ||
| 17 | {{/code}} | ||
| 18 | |||
| 19 | {{info title="What this command does:"}} | ||
| 20 | |||
| 21 | * *ant*: calls Apache Ant. It is assumed that you have this already installed. | ||
| 22 | * *frameworks*: tells Ant to build the "frameworks" target. This may not be needed if you already have Wonder built and installed in a location Ant can find automatically. | ||
| 23 | * *deployment.tools*: tells Ant to build the "deployment.tools" target. This is the target that builds both wotaskd.woa and JavaMonitor.woa. You absolutely need this one. | ||
| 24 | * *\-Dwonder.patch=54*: tells Wonder to build for WebObjects version 5.4. You need this if you are building against Wonder Trunk. Some branches don't need it, but it doesn't hurt either. | ||
| 25 | * *\-Ddeployment.standalone=true*: argument will embed the required Wonder and WebObjects frameworks in built applications. You need this to ensure that the required frameworks are embedded in the built applications. | ||
| 26 | |||
| 27 | |||
| 28 | |||
| 29 | {{/info}} | ||
| 30 | |||
| 31 | === Statistics === | ||
| 32 | |||
| 33 | If you call [[http://monitorhost:port/cgi-bin/WebObjects/JavaMonitor.woa/wa/statistics]], the answer send you back statistics, in JSON format, about instances, per application. Sample : | ||
| 34 | |||
| 35 | {{code}} | ||
| 36 | |||
| 37 | ( | ||
| 38 | { | ||
| 39 | "configuredInstances" = "2"; | ||
| 40 | "maxSessions" = "0"; | ||
| 41 | "maxAvgIdleTime" = "2.078"; | ||
| 42 | "avgTransactions" = "44.0000"; | ||
| 43 | "sumSessions" = "0"; | ||
| 44 | "avgAvgTransactionTime" = "0.0985000"; | ||
| 45 | "refusingInstances" = "0"; | ||
| 46 | "avgSessions" = "0.0000"; | ||
| 47 | "maxTransactions" = "88"; | ||
| 48 | "applicationName" = "AjaxExample"; | ||
| 49 | "avgAvgIdleTime" = "1.0390000"; | ||
| 50 | "maxAvgTransactionTime" = "0.197"; | ||
| 51 | "runningInstances" = "2"; | ||
| 52 | "sumTransactions" = "88"; | ||
| 53 | }, | ||
| 54 | { | ||
| 55 | "configuredInstances" = "2"; | ||
| 56 | "maxSessions" = "0"; | ||
| 57 | "maxAvgIdleTime" = "325.443"; | ||
| 58 | "avgTransactions" = "0.5000"; | ||
| 59 | "sumSessions" = "0"; | ||
| 60 | "avgAvgTransactionTime" = "0.00000"; | ||
| 61 | "refusingInstances" = "0"; | ||
| 62 | "avgSessions" = "0.0000"; | ||
| 63 | "maxTransactions" = "1"; | ||
| 64 | "applicationName" = "AjaxExample2"; | ||
| 65 | "avgAvgIdleTime" = "162.7215000"; | ||
| 66 | "maxAvgTransactionTime" = "0.0"; | ||
| 67 | "runningInstances" = "2"; | ||
| 68 | "sumTransactions" = "1"; | ||
| 69 | } | ||
| 70 | ) | ||
| 71 | |||
| 72 | {{/code}} | ||
| 73 | |||
| 74 | If JavaMonitor is configured with a password, and I hope you do, pass //pw=monitorpassword// as a argument to the query : | ||
| 75 | |||
| 76 | [[http://monitorhost:port/cgi-bin/WebObjects/JavaMonitor.woa/wa/statistics?pw=monitorpassword]] | ||
| 77 | |||
| 78 | === Direct Actions to many tasks === | ||
| 79 | |||
| 80 | You can do most of the standard tasks you do in Monitor by calling direct actions. They are in a different query handler, ///admin//. They follow the same format and use the same query parameters. Those DA can be useful if you need to restart instances or other tasks within ant or other build/deployment systems. | ||
| 81 | |||
| 82 | //?type=all// : return details about all applications and instances | ||
| 83 | //?type=app&name=AppName// : return details about all instances of a specific application | ||
| 84 | //?type=ins&name=AppName-InstanceNo// : return details about one specific instance | ||
| 85 | |||
| 86 | For example, if you want to get details about all instances and applications, you call : | ||
| 87 | |||
| 88 | [[http://hostname:56789/cgi-bin/WebObjects/JavaMonitor.woa/admin/info?type=all]] | ||
| 89 | |||
| 90 | To get details about the //AjaxExample// application : | ||
| 91 | |||
| 92 | [[http://hostname:56789/cgi-bin/WebObjects/JavaMonitor.woa/admin/info?type=app&name=AjaxExample]] | ||
| 93 | |||
| 94 | And for a specific instance : | ||
| 95 | |||
| 96 | [[http://hostname:56789/cgi-bin/WebObjects/JavaMonitor.woa/admin/info?type=ins&name=AjaxExample-1]] | ||
| 97 | |||
| 98 | The response for the direct actions will either send a JSON array or YES/NO. For example, the query //info// for all instances will return : | ||
| 99 | |||
| 100 | {{code}} | ||
| 101 | |||
| 102 | [Hudson Build Server for Wonder|http://webobjects.mdimension.com/hudson/job/Wonder54/lastSuccessfulBuild/artifact/dist/] | ||
| 103 | |||
| 104 | {{/code}} | ||
| 105 | |||
| 106 | List of available direct actions : | ||
| 107 | |||
| 108 | ///info// : return details (number of deaths, state, etc.; see above), in JSON, about an instance. | ||
| 109 | ///running// : return YES if the instance is running, NO if not. | ||
| 110 | ///stopped// : return NO if the instance is running, YES if not. | ||
| 111 | ///bounce//: more on it later. | ||
| 112 | ///clearDeaths// : clear the number of deaths (same action as clicking the "Clear deaths" in JavaMonitor) | ||
| 113 | ///turnScheduledOn// : turn scheduling on for an application or instance. Call ///turnScheduledOff// to do the opposite. | ||
| 114 | ///turnRefuseNewSessionsOn// : turn "Refuse new sessions" on, call //turnRefuseNewSessionsOff// to do the opposite. | ||
| 115 | ///turnAutoRecoverOn// : guess what? It activate "Auto recover" And guess again? ///turnAutoRecoverOff// do the opposite | ||
| 116 | ///forceQuit// : force quit an application, might be useful to call it from a monitoring system. | ||
| 117 | ///stop// : stop an application/instance the normal way. | ||
| 118 | ///start// : start an application/instance the normal way. | ||
| 119 | |||
| 120 | === Automatic archive of SiteConfig.xml === | ||
| 121 | |||
| 122 | On every change you do to the configuration, a backup of SiteConfig.xml will be done in, by default, /Library/WebObjects/Configuration. | ||
| 123 | |||
| 124 | === Bounce feature === | ||
| 125 | |||
| 126 | In the "list instances" page, you get a "Bounce" action link. This action only work if you have at least one active instance and one inactive. What it does is : | ||
| 127 | |||
| 128 | * Find the inactive (eg : not started) instance and start it | ||
| 129 | * Find the active instances (minus the one started the step below) and enable "Refuse New Session" | ||
| 130 | * Bounce the active instances when the minimum session count is reached | ||
| 131 | |||
| 132 | This feature, from my understanding, allow you to upload new versions of your app, start up the new version and refuse sessions for the instances running on the older version. I don't know how this will work if your new version use migrations to change your schema (eg : old instances might raise exceptions because of database schema changes), so try it out on a test server before and put your results here. | ||
| 133 | |||
| 134 | === REST routes === | ||
| 135 | |||
| 136 | On September 28th 2010, REST routes were added in JavaMonitor. Those routes + the direct actions explained in this document allow you to control almost everything remotely (make sure that your JavaMonitor installation is secure). As the direct actions, append //?pw=XXXX// to the URLs if JavaMonitor is password protected. | ||
| 137 | |||
| 138 | Examples of REST calls : | ||
| 139 | |||
| 140 | Fetching the details of all applications : | ||
| 141 | |||
| 142 | {{code}} | ||
| 143 | |||
| 144 | curl -X GET http://127.0.0.1:56789/cgi-bin/WebObjects/JavaMonitor.woa/ra/mApplications.json | ||
| 145 | |||
| 146 | {{/code}} | ||
| 147 | |||
| 148 | Adding a new application : | ||
| 149 | |||
| 150 | {{code}} | ||
| 151 | |||
| 152 | curl -X POST -d "{id: 'AjaxExample',type: 'MApplication', name: 'AjaxExample',unixOutputPath: '/opt/Local/Library/WebObjects/Logs', unixPath: '/opt/Local/Library/WebObjects/Applications/AjaxExample.woa/AjaxExample'}" http://127.0.0.1:56789/cgi-bin/WebObjects/JavaMonitor.woa/ra/mApplications.json | ||
| 153 | |||
| 154 | {{/code}} | ||
| 155 | |||
| 156 | Adding a new instance : | ||
| 157 | |||
| 158 | {{code}} | ||
| 159 | |||
| 160 | curl -X GET http://127.0.0.1:56789/cgi-bin/WebObjects/JavaMonitor.woa/ra/mApplications/AjaxExample/addInstance&host=localhost | ||
| 161 | |||
| 162 | {{/code}} | ||
| 163 | |||
| 164 | Delete an application : | ||
| 165 | |||
| 166 | {{code}} | ||
| 167 | |||
| 168 | curl -X DELETE http://127.0.0.1:56789/cgi-bin/WebObjects/JavaMonitor.woa/ra/mApplications/AjaxExample.json | ||
| 169 | |||
| 170 | {{/code}} | ||
| 171 | |||
| 172 | Delete an instance : | ||
| 173 | |||
| 174 | {{code}} | ||
| 175 | |||
| 176 | curl -X GET http://127.0.0.1:56789/cgi-bin/WebObjects/JavaMonitor.woa/ra/mApplications/AjaxExample/deleteInstance?id=1 | ||
| 177 | |||
| 178 | {{/code}} | ||
| 179 | |||
| 180 | Adding a new host : | ||
| 181 | |||
| 182 | {{code}} | ||
| 183 | |||
| 184 | curl -X POST -d "{id: 'otherserver.com',type: 'MHost', osType: 'MACOSX',address: '192.168.20.5', name: 'otherserver.com'}" http://127.0.0.1:56789/apps/WebObjects/JavaMonitor.woa/ra/mHosts.json | ||
| 185 | |||
| 186 | {{/code}} |