<div dir="ltr">Thanks a lot,<div><br></div><div>I am new to Erlang and had no idea about Atoms. Now everything works perfectly.</div><div><br></div><div>Horacio</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">
On Sat, Feb 22, 2014 at 12:10 AM, Badlop <span dir="ltr"><<a href="mailto:badlop@gmail.com" target="_blank">badlop@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
The function net_adm:ping expects an atom:<br>
$ man 3erl net_adm | grep -A 4 "  ping("<br>
       ping(Node) -> pong | pang<br>
              Types:<br>
                 Node = atom()<br>
<br>
But you provide a string:<br>
<div class="">  Problem 'error function_clause' occurred executing the command.<br>
  Stacktrace: [{net_adm,ping,["jabber01"]},<br>
<br>
</div>Solution: before passing the argument, convert it to atom:<br>
  case net_adm:ping(list_to_atom(NodeName)) of 'pong' -><br>
<br>
<br>
--<br>
Badlop<br>
ProcessOne<br>
<div><div class="h5"><br>
<br>
On 21 February 2014 11:27, Horacio Sanson <<a href="mailto:hsanson@gmail.com">hsanson@gmail.com</a>> wrote:<br>
> I am trying to add a new command to ejabberdctl to facilitate the<br>
> configuration of clusters but I am having some problems. Below is my code:<br>
><br>
><br>
> #############################################<br>
> -module(mod_cluster).<br>
><br>
> -behavior(gen_mod).<br>
><br>
> -export([start/2,stop/1,cluster_test/1]).<br>
><br>
> -include("ejabberd.hrl").<br>
> -include("ejabberd_commands.hrl").<br>
> -include("mod_roster.hrl").<br>
> -include("jlib.hrl").<br>
><br>
> start(_Host, _Opts) -><br>
>   ejabberd_commands:register_commands(commands()).<br>
><br>
> stop(_Host) -><br>
>   ejabberd_commands:unregister_commands(commands()).<br>
><br>
> commands() -><br>
>   [<br>
>     #ejabberd_commands{name = cluster_test, tags = [server],<br>
>                        desc = "Test connectivity with remote node",<br>
>                        module = ?MODULE, function = cluster_test,<br>
>                        args = [{node, string}],<br>
>                        result = {res, rescode}}<br>
>   ].<br>
><br>
><br>
> cluster_test(NodeName) -><br>
>         case net_adm:ping(NodeName) of 'pong' -><br>
>                 io:format("server is reachable.~n"),<br>
>                 ok;<br>
>         _ -><br>
>                 io:format("server could NOT be reached.~n"),<br>
>                 error<br>
>         end.<br>
><br>
> ##############################################<br>
><br>
> This code adds a cluster_test() function that checks connectivity with<br>
> remote ejabberd nodes. I took this code from [1].<br>
><br>
> Then registers this function as a command to ejabberctl. The idea is to be<br>
> able to run the function from a terminal like:<br>
><br>
>   > sudo ejabberdctl cluster_test  ejabberd@domain.local<br>
><br>
> If I use the debug console and call the function directly it works as<br>
> expected but invoking it from the terminal gives this error:<br>
><br>
> ###################################################<br>
> Problem 'error function_clause' occurred executing the command.<br>
> Stacktrace: [{net_adm,ping,["jabber01"]},<br>
>              {mod_cluster,cluster_test,1},<br>
>              {ejabberd_ctl,call_command,3},<br>
>              {ejabberd_ctl,try_call_command,3},<br>
>              {ejabberd_ctl,process2,3},<br>
>              {ejabberd_ctl,process,1},<br>
>              {rpc,'-handle_call_call/6-fun-0-',5}]<br>
> ####################################################<br>
><br>
> I used the code from mod_admin_extra [2] as base to implement this but I am<br>
> totally lost about Erlang.<br>
><br>
> Any tips on what I may be doing wrong are greatly appreciated.<br>
><br>
> [1] -<br>
> <a href="http://chad.ill.ac/post/35967173942/easy-ejabberd-clustering-guide-mnesia-mysql" target="_blank">http://chad.ill.ac/post/35967173942/easy-ejabberd-clustering-guide-mnesia-mysql</a><br>
><br>
> [2] -<br>
> <a href="https://github.com/processone/ejabberd-contrib/blob/master/mod_admin_extra/src/mod_admin_extra.erl" target="_blank">https://github.com/processone/ejabberd-contrib/blob/master/mod_admin_extra/src/mod_admin_extra.erl</a><br>

><br>
> regards,<br>
> Horacio<br>
><br>
</div></div>> _______________________________________________<br>
> ejabberd mailing list<br>
> <a href="mailto:ejabberd@jabber.ru">ejabberd@jabber.ru</a><br>
> <a href="http://lists.jabber.ru/mailman/listinfo/ejabberd" target="_blank">http://lists.jabber.ru/mailman/listinfo/ejabberd</a><br>
><br>
_______________________________________________<br>
ejabberd mailing list<br>
<a href="mailto:ejabberd@jabber.ru">ejabberd@jabber.ru</a><br>
<a href="http://lists.jabber.ru/mailman/listinfo/ejabberd" target="_blank">http://lists.jabber.ru/mailman/listinfo/ejabberd</a><br>
</blockquote></div><br></div>