Hi Jakob,
The if around the xdmp:http-head doesn’t do anything, the function returns item()+. But otherwise I guess it should work. Regardless of the service you try to connect, I would expect the function to return a response. And a 404 is also a response. J Only if there is nothing behind the port, you will get a SOCSERV exception or alike. So, I guess you are reasonably safe like this.. Kind regards, Geert *Van:* [email protected] [mailto: [email protected]] *Namens * [email protected] *Verzonden:* vrijdag 17 mei 2013 9:35 *Aan:* [email protected] *Onderwerp:* Re: [MarkLogic Dev General] how can i check whether an appserver Hi All, * * *xdmp:http-head(..) will return code as 200 & message as “OK” only when we hit HTTP Servers. For XDBC server & WebDav servers it will always return 404/Not Found.* *“xdmp:host-status(xdmp:host())//*:port” will all ports used in MarkLogic server only.* *For example:* * * *I have following app servers with authentication scheme as “digest”, you can test this with any auth scheme (I tested for all).* * * 1- Http server (cms_http) running on port 8007 2- Xdbc server (cms_xdbc) running on port 8003 3- WebDav server (cms_webdav) running on port 8006 4- Http server (content_http) running on port 8005 *Used the following>>* * * declare function local:get-port-status($authScheme as xs:string?, $port as xs:string?,$userName as xs:string?,$password as xs:string?) { xdmp:http-head(fn:concat("http://localhost:",$port), <options xmlns="xdmp:http"> <authentication method="{$authScheme}"> <username>{$userName}</username> <password>{$password}</password> </authentication> </options>) }; try{ local:get-port-status("digest","8007","admin","passw0rd"), local:get-port-status("digest","8003","admin","passw0rd"), local:get-port-status("digest","8006","admin","passw0rd"), local:get-port-status("digest","8005","admin","passw0rd") }catch($e){ $e } *Response is:* *<results warning="more than one root item">* * <response xmlns="xdmp:http">* *<code>200</code>* * <message>OK</message>* <headers> <content-type>text/html; charset=UTF-8</content-type> <server>MarkLogic</server> <connection>close</connection> </headers> </response> *<response xmlns="xdmp:http">* * <code>404</code>* * <message>Not Found</message>* <headers> <content-type>text/html; charset=utf-8</content-type> <server>MarkLogic 5.0-1.2</server> <connection>close</connection> </headers> </response> * <response xmlns="xdmp:http">* * <code>404</code>* * <message>Not Found</message>* <headers> <content-type>text/html; charset=utf-8</content-type> <server>MarkLogic</server> <connection>close</connection> </headers> </response> * <response xmlns="xdmp:http">* *<code>200</code>* * <message>OK</message>* <headers> <content-type>text/html; charset=UTF-8</content-type> <server>MarkLogic</server> <connection>close</connection> </headers> </response> *</results>* Thanks, Abhinav Kumar Mishra *From:* [email protected] [mailto: [email protected]] *On Behalf Of *Jakob Fix *Sent:* Friday, May 17, 2013 11:41 AM *To:* MarkLogic Developer Discussion *Subject:* Re: [MarkLogic Dev General] how can i check whether an appserver what do you think? seems to work quite nicely. let $port := xdmp:random(65535 + 8003) + 8003 (: yes, let's force ports above 8003 :) return try { if (xdmp:http-head("http://127.0.0.1:" || $port)) then (: try again :) else $port } catch($e) { $port } cheers, Jakob. On Fri, May 17, 2013 at 8:01 AM, Jakob Fix <[email protected]> wrote: Argh, that's right, I didn't think of that! All right, I'll do that then. Bedankt! cheers, Jakob. On Fri, May 17, 2013 at 7:37 AM, Geert Josten <[email protected]> wrote: Hi Jakob, The port could be in use by an external (non-ML) process. You could also do xdmp:http-get on the port number. Make sure to use a small timeout though.. ;-) Cheers, Geert *Van:* [email protected] [mailto: [email protected]] *Namens *Jakob Fix *Verzonden:* vrijdag 17 mei 2013 7:17 *Aan:* MarkLogic Developer Discussion *Onderwerp:* Re: [MarkLogic Dev General] how can i check whether an appserver Thanks David, that does the job perfectly. cheers, Jakob. On Fri, May 17, 2013 at 12:59 AM, David Lee <[email protected]> wrote: $port = xdmp:host-status(xdmp:host())//*:port ----------------------------------------------------------------------------- David Lee Lead Engineer MarkLogic Corporation [email protected] Phone: +1 812-482-5224 Cell: +1 812-630-7622 www.marklogic.com *From:* [email protected] [mailto: [email protected]] *On Behalf Of *Jakob Fix *Sent:* Thursday, May 16, 2013 6:56 PM *To:* General Mark Logic Developer Discussion *Subject:* [MarkLogic Dev General] how can i check whether an appserver Hello, if I wanted to script the creation of an xdbc appserver and I don't really care about the port number to use (so let's say I use xdmp:random(65535) + 8003), how can I find out whether that port is already in use by an already existing server? Basically I'm looking for a definition of the local:port-number-in-use($pn) below. *declare function **local:get-port-number*() *as xs:integer* { *let $pn* := *xdmp:random*(65535 + 8003) *return * *if* (*local:port-number-in-use*(*$pn*)) *then **local:get-port-number*() *else $pn* }; cheers, Jakob. _______________________________________________ General mailing list [email protected] http://developer.marklogic.com/mailman/listinfo/general _______________________________________________ General mailing list [email protected] http://developer.marklogic.com/mailman/listinfo/general This e-mail and any files transmitted with it are for the sole use of the intended recipient(s) and may contain confidential and privileged information. If you are not the intended recipient(s), please reply to the sender and destroy all copies of the original message. Any unauthorized review, use, disclosure, dissemination, forwarding, printing or copying of this email, and/or any action taken in reliance on the contents of this e-mail is strictly prohibited and may be unlawful.
_______________________________________________ General mailing list [email protected] http://developer.marklogic.com/mailman/listinfo/general
