Wiki source code of Project Wonder additions to wotaskd and JavaMonitor
Version 121.1 by David Avendasora on 2010/11/29 19:41
Hide last authors
author | version | line-number | content |
---|---|---|---|
![]() |
77.1 | 1 | {{toc}}{{/toc}} |
2 | |||
![]() |
57.1 | 3 | === Introduction === |
4 | |||
![]() |
121.1 | 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. |
![]() |
57.1 | 6 | |
![]() |
121.1 | 7 | [[image:WonderJavaMonitor.png||border="1"]] |
![]() |
57.1 | 8 | |
![]() |
121.1 | 9 | === Where to get them === |
![]() |
57.1 | 10 | |
![]() |
77.1 | 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 | |||
![]() |
121.1 | 13 | To build them from the source, simply run the following Command from the Wonder directory at the root of the Wonder source code directory: |
![]() |
77.1 | 14 | |
![]() |
57.1 | 15 | {{code}} |
![]() |
77.1 | 16 | ant frameworks deployment.tools -Dwonder.patch=54 -Ddeployment.standalone=true |
17 | {{/code}} | ||
![]() |
57.1 | 18 | |
![]() |
77.1 | 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 | |||
![]() |
113.1 | 29 | {{/info}} |
![]() |
77.1 | 30 | |
![]() |
121.1 | 31 | === Statistics === |
![]() |
77.1 | 32 | |
![]() |
113.1 | 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 : |
![]() |
77.1 | 34 | |
![]() |
113.1 | 35 | {{code}} |
![]() |
77.1 | 36 | |
![]() |
57.1 | 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 | |||
![]() |
113.1 | 72 | {{/code}} |
![]() |
57.1 | 73 | |
![]() |
113.1 | 74 | If JavaMonitor is configured with a password, and I hope you do, pass //pw=monitorpassword// as a argument to the query : |
![]() |
57.1 | 75 | |
![]() |
113.1 | 76 | [[http://monitorhost:port/cgi-bin/WebObjects/JavaMonitor.woa/wa/statistics?pw=monitorpassword]] |
![]() |
57.1 | 77 | |
![]() |
121.1 | 78 | === Direct Actions to many tasks === |
![]() |
57.1 | 79 | |
![]() |
113.1 | 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. |
![]() |
57.1 | 81 | |
![]() |
113.1 | 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 | |||
![]() |
97.1 | 86 | For example, if you want to get details about all instances and applications, you call : |
![]() |
57.1 | 87 | |
![]() |
113.1 | 88 | [[http://hostname:56789/cgi-bin/WebObjects/JavaMonitor.woa/admin/info?type=all]] |
![]() |
57.1 | 89 | |
![]() |
113.1 | 90 | To get details about the //AjaxExample// application : |
![]() |
57.1 | 91 | |
![]() |
113.1 | 92 | [[http://hostname:56789/cgi-bin/WebObjects/JavaMonitor.woa/admin/info?type=app&name=AjaxExample]] |
![]() |
57.1 | 93 | |
![]() |
97.1 | 94 | And for a specific instance : |
![]() |
57.1 | 95 | |
![]() |
113.1 | 96 | [[http://hostname:56789/cgi-bin/WebObjects/JavaMonitor.woa/admin/info?type=ins&name=AjaxExample-1]] |
![]() |
57.1 | 97 | |
![]() |
113.1 | 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 : |
![]() |
105.1 | 99 | |
![]() |
113.1 | 100 | {{code}} |
101 | |||
![]() |
105.1 | 102 | [Hudson Build Server for Wonder|http://webobjects.mdimension.com/hudson/job/Wonder54/lastSuccessfulBuild/artifact/dist/] |
103 | |||
![]() |
113.1 | 104 | {{/code}} |
105 | |||
![]() |
105.1 | 106 | List of available direct actions : |
107 | |||
![]() |
113.1 | 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. | ||
![]() |
105.1 | 119 | |
![]() |
121.1 | 120 | === Automatic archive of SiteConfig.xml === |
![]() |
113.1 | 121 | |
![]() |
121.1 | 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 | |||
![]() |
113.1 | 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 | |||
![]() |
77.1 | 138 | Examples of REST calls : |
139 | |||
![]() |
111.1 | 140 | Fetching the details of all applications : |
![]() |
113.1 | 141 | |
142 | {{code}} | ||
143 | |||
![]() |
109.1 | 144 | curl -X GET http://127.0.0.1:56789/cgi-bin/WebObjects/JavaMonitor.woa/ra/mApplications.json |
![]() |
77.1 | 145 | |
![]() |
113.1 | 146 | {{/code}} |
147 | |||
![]() |
111.1 | 148 | Adding a new application : |
![]() |
77.1 | 149 | |
![]() |
113.1 | 150 | {{code}} |
151 | |||
![]() |
109.1 | 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 |
![]() |
77.1 | 153 | |
![]() |
113.1 | 154 | {{/code}} |
155 | |||
![]() |
111.1 | 156 | Adding a new instance : |
![]() |
77.1 | 157 | |
![]() |
113.1 | 158 | {{code}} |
159 | |||
![]() |
111.1 | 160 | curl -X GET http://127.0.0.1:56789/cgi-bin/WebObjects/JavaMonitor.woa/ra/mApplications/AjaxExample/addInstance&host=localhost |
![]() |
77.1 | 161 | |
![]() |
113.1 | 162 | {{/code}} |
163 | |||
![]() |
111.1 | 164 | Delete an application : |
165 | |||
![]() |
113.1 | 166 | {{code}} |
167 | |||
![]() |
105.1 | 168 | curl -X DELETE http://127.0.0.1:56789/cgi-bin/WebObjects/JavaMonitor.woa/ra/mApplications/AjaxExample.json |
169 | |||
![]() |
113.1 | 170 | {{/code}} |
171 | |||
![]() |
111.1 | 172 | Delete an instance : |
![]() |
77.1 | 173 | |
![]() |
113.1 | 174 | {{code}} |
175 | |||
![]() |
111.1 | 176 | curl -X GET http://127.0.0.1:56789/cgi-bin/WebObjects/JavaMonitor.woa/ra/mApplications/AjaxExample/deleteInstance?id=1 |
![]() |
77.1 | 177 | |
![]() |
113.1 | 178 | {{/code}} |
179 | |||
![]() |
111.1 | 180 | Adding a new host : |
![]() |
77.1 | 181 | |
![]() |
113.1 | 182 | {{code}} |
183 | |||
![]() |
111.1 | 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 |
![]() |
77.1 | 185 | |
![]() |
113.1 | 186 | {{/code}} |