flipje

control-resolume-webgui-using-nrpe-bash-CGI

Sep 2nd, 2012
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 29.24 KB | None | 0 0
  1. #!/bin/bash
  2. PATH='/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin'
  3. SCRIPT_PATH="${0}"
  4. #==================================================
  5. # CGI RESOLUME CONTROL PANEL IN BASH BY FLIP HESS
  6. #
  7. # This program is free software; you can redistribute it and/or modify
  8. # it under the terms of the GNU General Public License as published by
  9. # the Free Software Foundation; either version 3 of the License.
  10. #
  11. # This program is distributed in the hope that it will be useful,
  12. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. # GNU Library General Public License for more details.
  15. #
  16. # http://www.gnu.org/licenses/gpl.txt
  17. #
  18. #==================================================
  19. URL="http://${HTTP_HOST}/cgi-bin/resolume"
  20. NODES="172.16.15.1 172.16.15.2 172.16.15.3 127.0.0.1"
  21.  
  22. echo -e "Content-type: text/html\n\n"
  23.  
  24. # exit function
  25. function die()
  26. {
  27.   echo -e "<div style=\"padding:4px; border:1px solid red; color:red;\">Error in ${SCRIPT_PATH}:\n${1}</div>"
  28.   exit 1
  29. }
  30.  
  31. function fCheck()
  32. {
  33.   # checken nrpe bin
  34.   [ -x ./check_nrpe ] || die "This plugin depends on /usr/lib/nagios/plugins/check_nrpe"
  35.  
  36.   return 0
  37. }
  38.  
  39. # arg1 = node, arg2 = bg color, arg3 = status
  40. function fButton()
  41. {
  42.   local NODE="${1}"
  43.   local COLOR="${2}"
  44.   local STATUS="${3}"
  45.   local OUTPUT="${4}"
  46.   echo -e "
  47.        <td colspan=\"5\" bgcolor=\"${COLOR}\"><font color=\"black\"/>
  48.          <form method=\"post\" action=\"${URL}/control.cgi?node=${NODE}&control=view&args=none\">
  49.          <center><input style=\"height: 120px; width: 120px\" type=\"submit\" value=\"Node: ${NODE}\"></form><br><br>
  50.          <b>Status: ${STATUS}</b><br>
  51.          <b>Output: ${OUTPUT}</b><br>
  52.        </td>"
  53. }
  54.  
  55. # create index
  56. function fHeader()
  57. {
  58.   # index
  59.   echo -e "
  60.  <HTML>
  61.    <HEAD>
  62.      <TITLE>Resolume CGI Panel</TITLE>
  63.    </HEAD>
  64.  
  65.    <BODY>
  66.    <body bgcolor=\"#000000\"
  67.      <body link=\"#00FFFF\">
  68.      <body vlink=\"#00FFFF\">
  69.      <body alink=\"#00FFFF\">
  70.  
  71.    <table border=\"1\" color=\"black\" width=\"100%\" height=\"100%\" cellpadding=\"2\" cellspacing=\"2\">
  72.    <table border=\"1\" color=\"black\" width=\"100%\" height=\"10%\" cellpadding=\"2\" cellspacing=\"2\">
  73.      <tr>
  74.        <td colspan=\"1\" bgcolor=\"#000\">  
  75.          <font color=\"#CFCFCF\"/>
  76.          <center><h1>Resolume Control App</h1></center>
  77.          <center><i>CGI Control For Resolume 2!</i></center>
  78.          <br>"
  79.  
  80.   # loopje kleur per status
  81.   for NODE in ${NODES}
  82.   do
  83.     # check if online
  84.     OUTPUT="$( fGetStatus "${NODE}" )"
  85.     XST="${?}"
  86.     if   [ "${XST}" = 0 ] ; then
  87.          fButton "${NODE}" "#00FFFF" "Online" "${OUTPUT}"
  88.     elif [ "${XST}" = 2 ] ; then
  89.          fButton "${NODE}" "#444" "Offline" "${OUTPUT}"
  90.     else
  91.          fButton "${NODE}" "#777" "Unknown" "${OUTPUT}"
  92.     fi
  93.   done
  94.  
  95.   # derde veld, titel
  96.   echo -e "
  97.        <td colspan=\"5\" bgcolor=\"${COLOR}\"><font color=\"black\"/>
  98.          <font color=\"#CFCFCF\"/>
  99.          <form method=\"post\" action=\"${URL}/control.cgi\">
  100.          <center><input style=\"height: 120px; width: 120px\" type=\"submit\" value=\"Home\"></form><br><br>
  101.          <b>Home</b>
  102.        </td>
  103.      </tr>
  104.    </table>"
  105. }
  106.  
  107. # create status window
  108. function fStatusWindow()
  109. {
  110.   # check for query string  and show custom lines in status window
  111.   if [ "X${QUERY_STRING}" != "X" ]; then
  112.      echo -e "
  113.      <table border=\"1\" color=\"black\" width=\"100%\" height=\"10%\" cellpadding=\"2\" cellspacing=\"2\">
  114.        <tr>
  115.          <td colspan=\"1\" bgcolor=\"#000\">  
  116.            <font color=\"#CFCFCF\"/>
  117.            ${LINE1}
  118.            ${LINE2}
  119.          </td>
  120.        </tr>
  121.      </table>"
  122.   else
  123.      # echo default message in status window
  124.      echo -e "
  125.      <table border=\"1\" color=\"black\" width=\"100%\" height=\"10%\" cellpadding=\"2\" cellspacing=\"2\">
  126.        <tr>
  127.          <td colspan=\"1\" bgcolor=\"#000\">  
  128.            <font color=\"#CFCFCF\"/>
  129.            <div style=\"padding:4px; border:1px solid #00FFFF; color:#00FFFF;\">Resolume remote control loaded</div>\n
  130.          </td>
  131.        </tr>
  132.      </table>"
  133.   fi
  134.  
  135.   return 0
  136. }
  137.  
  138. # More layout and EOF
  139. function fFooter()
  140. {
  141.   echo -e "
  142.    <table border=\"1\" color=\"black\" width=\"100%\" height=\"10%\" cellpadding=\"2\" cellspacing=\"2\">
  143.        <tr>
  144.          <td colspan=\"1\">
  145.            <font color=\"#FFF\" link/>
  146. <a href=\"${URL}/control.cgi?node=none&control=credits&args=none\"\">:)</a><br>
  147.          </td>
  148.          <td colspan=\"1\">
  149.            <font color=\"#FFF\"/>
  150.            <center>CGI Bash Script Resolume Control Panel Version 1.1<br>
  151.            <i>Resolume control by LightSquare.org 2012</i><br></center>
  152.          </td>
  153.        </tr>
  154.      </table>
  155.     </table>
  156.    </BODY>
  157.    </HTML>"
  158.  
  159.   return 0
  160. }
  161.  
  162. # select window
  163. function SelectWindow()
  164. {
  165.  NODE="${1}"
  166.  
  167.   echo -e "
  168.  <HTML>
  169.    <HEAD>
  170.      <TITLE>Resolume CGI Panel</TITLE>
  171.    </HEAD>
  172.  
  173.    <BODY>
  174.    <body bgcolor=\"#000000\"
  175.    <table border=\"1\" color=\"black\" width=\"100%\" height=\"100%\" cellpadding=\"2\" cellspacing=\"2\">
  176.    <table border=\"1\" color=\"black\" width=\"100%\" height=\"10%\" cellpadding=\"2\" cellspacing=\"2\">
  177.      <tr>
  178.        <td colspan=\"1\" bgcolor=\"#000\">  
  179.          <font color=\"#CFCFCF\"/>
  180.          <center><h1>Resolume Control App</h1></center>
  181.          <center><i>CGI Control For Resolume 2!</i></center>
  182.          <br>
  183.       <td bgcolor=#777>
  184.          <font color=\"#FFF\"/>
  185.          <form method=\"post\" action=\"${URL}/control.cgi?node=${NODE}&control=matrix&args=none\" >
  186.          <center><input style=\"height: 120px; width: 120px\" type=\"submit\" value=\"Show Matrix\"></form><br><br>
  187.          <b>Show Matrix</b>
  188.       </td>
  189.  
  190.       <td bgcolor=#777>
  191.          <font color=\"#FFF\"/>
  192.          <form method=\"post\" action=\"${URL}/control.cgi?node=${NODE}&control=layer&args=none\" >
  193.          <center><input style=\"height: 120px; width: 120px\" type=\"submit\" value=\"Show Layers\"></form><br><br>
  194.          <b>Show Layers</b>
  195.       </td>
  196.  
  197.       <td bgcolor=#777>
  198.          <font color=\"#FFF\"/>
  199.          <form method=\"post\" action=\"${URL}/control.cgi?node=${NODE}&control=deck&args=none\" >
  200.          <center><input style=\"height: 120px; width: 120px\" type=\"submit\" value=\"Show Decks\"></form><br><br>
  201.          <b>Show Decks</b>
  202.       </td>
  203.  
  204.       <td bgcolor=#777>
  205.          <font color=\"#FFF\"/>
  206.          <form method=\"post\" action=\"${URL}/control.cgi?node=${NODE}&control=other&args=none\" >
  207.          <center><input style=\"height: 120px; width: 120px\" type=\"submit\" value=\"Other Options\"></form><br><br>
  208.          <b>Other Options</b>
  209.       </td>
  210.  
  211.       <td bgcolor=#000>
  212.          <font color=\"#FFF\"/>
  213.          <form method=\"post\" action=\"${URL}/control.cgi\" >
  214.          <center><input style=\"height: 120px; width: 120px\" type=\"submit\" value=\"Home\"></form><br><br>
  215.          <b>Home</b>
  216.       </td>
  217.      </tr>
  218.    </table>"
  219.  
  220.   return 0
  221.  
  222. }
  223.  
  224. # function fShowDecks
  225. function fShowDecks()
  226. {
  227.  
  228.     echo -e "
  229.    <table border=\"1\" color=\"black\" width=\"100%\" height=\"1%\" cellpadding=\"2\" cellspacing=\"2\">"
  230.  
  231.     for NUM in $( seq -w 8 )
  232.     do
  233.       { [ "${NUM}" = 1 ] || [ "${NUM}" = 5 ]; } && echo -e "<tr>"
  234.       echo -e "
  235.       <td bgcolor=#777>
  236.          <font color=\"#FFF\"/>
  237.          <form method=\"post\" action=\"${URL}/control.cgi?node=${NODE}&control=deck&args=select_deck_${NUM}&proceed=yes\" >
  238.          <center><input style=\"height: 100px; width: 100px\" type=\"submit\" value=\"Select Deck ${NUM}\"></form>
  239.       </td>"
  240.       { [ "${NUM}" = 4 ] || [ "${NUM}" = 8 ]; } && echo -e "</tr>"
  241.     done
  242.  
  243.     echo -e "</table>"
  244.  
  245.   return 0
  246. }
  247.  
  248. # function fShowLayers
  249. function fShowLayers()
  250. {
  251.   local NODE="${1}"
  252.  
  253.   # for lusje om voor 3 layers een rij knoppen uit te spugen
  254.   for NUM in $( seq -w 3 )
  255.   do
  256.     echo -e "
  257.    <table border=\"1\" color=\"black\" width=\"100%\" height=\"1%\" cellpadding=\"2\" cellspacing=\"2\">
  258.     <tr>
  259.       <td bgcolor=#777>
  260.          <font color=\"#000000\"/>
  261.          <center><b>Layer:</b><br><h1> ${NUM}</h1></center>
  262.       </td>
  263.  
  264.       <td bgcolor=#777>
  265.          <font color=\"#FFF\"/>
  266.          <form method=\"post\" action=\"${URL}/control.cgi?node=${NODE}&control=layer&args=toggle_select_layer_${NUM}&proceed=yes\" >
  267.          <center><input style=\"height: 100px; width: 100px\" type=\"submit\" value=\"Select\n Layer ${NUM}\"></form>
  268.       </td>
  269.  
  270.       <td bgcolor=#777>
  271.          <font color=\"#FFF\"/>
  272.          <form method=\"post\" action=\"${URL}/control.cgi?node=${NODE}&control=layer&args=toggle_faderfull_layer_${NUM}&proceed=yes\" >
  273.          <center><input style=\"height: 100px; width: 100px\" type=\"submit\" value=\"Toggle Fader\n at Full\"></form>
  274.       </td>
  275.  
  276.       <td bgcolor=#777>
  277.          <font color=\"#FFF\"/>
  278.          <form method=\"post\" action=\"${URL}/control.cgi?node=${NODE}&control=layer&args=toggle_onoff_layer_${NUM}&proceed=yes\" >
  279.          <center><input style=\"height: 100px; width: 100px\" type=\"submit\" value=\"Toggle On/Off\nLayer ${NUM}\"></form>
  280.       </td>
  281.  
  282.       <td bgcolor=#777>
  283.          <font color=\"#FFF\"/>
  284.          <form method=\"post\" action=\"${URL}/control.cgi?node=${NODE}&control=layer&args=toggle_up_layer_${NUM}&proceed=yes\" >
  285.          <center><input style=\"height: 50px; width: 100px\" type=\"submit\" value=\"Up\"></form>
  286.          <form method=\"post\" action=\"${URL}/control.cgi?node=${NODE}&control=layer&args=toggle_down_layer_${NUM}&proceed=yes\" >
  287.          <center><input style=\"height: 50px; width: 100px\" type=\"submit\" value=\"Down\"></form>
  288.       </td>
  289.  
  290.       <td bgcolor=#777>
  291.          <font color=\"#FFF\"/>
  292.          <form method=\"post\" action=\"${URL}/control.cgi?node=${NODE}&control=layer&args=toggle_clear_layer_${NUM}&proceed=yes\" >
  293.          <center><input style=\"height: 100px; width: 100px\" type=\"submit\" value=\"Clear\"></form>
  294.       </td>
  295.  
  296.       <td bgcolor=#777>
  297.          <font color=\"#FFF\"/>
  298.          <form method=\"post\" action=\"${URL}/control.cgi?node=${NODE}&control=layer&args=toggle_red_layer_${NUM}&proceed=yes\" >
  299.          <center><input style=\"height: 32px; width: 100px\" type=\"submit\" value=\"Red\"></form>
  300.          <form method=\"post\" action=\"${URL}/control.cgi?node=${NODE}&control=layer&args=toggle_green_layer_${NUM}&proceed=yes\" >
  301.          <center><input style=\"height: 32px; width: 100px\" type=\"submit\" value=\"Green\"></form>
  302.          <form method=\"post\" action=\"${URL}/control.cgi?node=${NODE}&control=layer&args=toggle_blue_layer_${NUM}&proceed=yes\" >
  303.          <center><input style=\"height: 32px; width: 100px\" type=\"submit\" value=\"Blue\"></form>
  304.       </td>
  305.  
  306.     </tr>
  307.    </table>"
  308.   done
  309.  
  310.   return 0
  311.  
  312. }
  313.  
  314. # fcuntion printbuttons
  315. function fPrintMatrix()
  316. {
  317.   local NODE="${1}"
  318.      
  319.   for NUM in $(seq -w 20 )
  320.   do
  321.     if [ "${NUM}" = 01 ] || [ "${NUM}" = 06 ] || [ "${NUM}" = 11 ] ||[ "${NUM}" = 16 ] ; then
  322.       echo -e "
  323.        <table border=\"1\" color=\"black\" width=\"100%\" height=\"1%\" cellpadding=\"2\" cellspacing=\"2\">
  324.        <tr>"
  325.     fi
  326.     echo -e "
  327.     <td bgcolor=#777>
  328.        <font color=\"#FFF\"/>
  329.        <form method=\"post\" action=\"${URL}/control.cgi?node=${NODE}&control=matrix&args=toggle_matrix_${NUM}&proceed=yes\" >
  330.        <center><input style=\"height: 100px; width: 100px\" type=\"submit\" value=\"Toggle\n${NUM}\"></form>
  331.     </td>"
  332.     if [ "${NUM}" = 5 ] || [ "${NUM}" = 10 ] ||[ "${NUM}" = 15 ] || [ "${NUM}" = 20 ] ; then
  333.       echo -e "
  334.        </tr>
  335.         </table>"
  336.     fi
  337.   done
  338.  
  339.   return 0
  340.  
  341. }
  342.  
  343. # function fGetStatus
  344. function fGetStatus()
  345. {
  346.   local NODE="${1}"
  347.   ./check_nrpe -H "${NODE}" -t 1
  348.   return "${?}"
  349. }
  350.  
  351. # index page
  352. function fShowIndex()
  353. {
  354.   echo -e "
  355.  <table border=\"1\" color=\"black\" width=\"100%\" height=\"10%\" cellpadding=\"2\" cellspacing=\"2\">
  356.   <tr>
  357.      <td colspan=\"1\">
  358.      <font color=\"#FFF\"/>
  359.      <center>
  360.      <br>
  361.    </td>
  362.   </tr>
  363.  </table>"
  364.  
  365.   return 0
  366.  
  367. }
  368.  
  369. # index page
  370. function fShowCredits()
  371. {
  372.   echo -e "
  373.  <table border=\"1\" color=\"black\" width=\"100%\" height=\"10%\" cellpadding=\"2\" cellspacing=\"2\">
  374.   <tr>
  375.      <td colspan=\"1\">
  376.      <font color=\"#FFF\"/>
  377.      <br>
  378.      <b>Usage:</b><br>
  379.      This is a control unit for resolume. It is bash written and used as a cgi script.<br>
  380.      You can use this to control resolume 2.4, using ns++ client from nagios and autohotkeys.exe on the windows side.<br>
  381.      On the server side, you need check_nrpe installed and copied to the local cgi-bin folder.
  382.      With some editting you can use this script as a template for any bash controled web framework.<br>
  383.      <br>      
  384.      <a href=\"http://pastebin.com/Fh316rDY\" target=\"_Blank\" >Source @ Pastebin</a><br>
  385.      <br>
  386.      Enjoy it!<br><br>
  387.      <i>By Flip Hess September 2012</i>
  388.    </td>
  389.   </tr>
  390.  </table>"
  391.  
  392.   return 0
  393.  
  394. }
  395.  
  396. # Other page
  397. function fShowOther()
  398. {
  399.   local NODE="${1}"
  400.   local CONTROL="${2}"
  401.   local ARGUMENT="${3}"
  402.   local PROCEED="${4}"
  403.  
  404.   echo -e "
  405.  <table border=\"1\" color=\"black\" width=\"100%\" height=\"10%\" cellpadding=\"2\" cellspacing=\"2\">
  406.  <tr>"
  407.  
  408.   for BUTTON in toggle_chaos record_output toggle_screen_setup clear_all_layers shutdown_resolume shutdown_computer
  409.   do
  410.     # replace _ by "\ " and make first char of word appear with a capital
  411.     NAME="$( echo "${BUTTON}" | sed -e 's/_/\ /g' -e 's/\b\(.\)/\u\1/g' -e 's/\ /\\n/g' )"
  412.     echo -e "
  413.       <td bgcolor=#777>
  414.          <font color=\"#FFF\"/>
  415.          <form method=\"post\" action=\"${URL}/control.cgi?node=${NODE}&control=confirm&args=${BUTTON}\" >
  416.          <center><input style=\"height: 120px; width: 120px\" type=\"submit\" value=\"${NAME}\"></form><br><br>
  417.          <b>${NAME}</b>
  418.       </td>"
  419.   done
  420.  
  421.   echo "</table>"
  422.  
  423.   return 0
  424.  
  425. }
  426.  
  427. # Nice output for status and actions
  428. function fMessage()
  429. {
  430.  NODE="${1}"
  431.  SHOUT="${2}"
  432.  MSG="${3}"
  433.  
  434.  # set color
  435.  if [ "${SHOUT}" = OK ]; then
  436.     COLOR="#00FF00"
  437.  elif [ "${SHOUT}" = ERROR ]; then
  438.     COLOR="#FF0000"
  439.  else
  440.     COLOR="orange"
  441.  fi
  442.  
  443.  # output succes
  444.  echo -e "
  445.  <table border=\"2\" color=\"black\" width=\"100%\" height=\"10%\" cellpadding=\"10\" cellspacing=\"10\">
  446.   <tr>
  447.    <td colspan=\"1\">
  448.      <font color=\"${COLOR}\" size=\"14\"/>
  449.      <b>${SHOUT}!</b>
  450.      <br>
  451.    </td>
  452.    <td colspan=\"1\">
  453.      <font color=\"#FFF\" size=\"6\"/>
  454.      ${MSG}
  455.    </td>
  456.    <th>
  457.     <form method=\"post\" action=\"${URL}/control.cgi?node=${NODE}&control=other&args=none\">
  458.     <center><input style=\"height: 50px; width: 120px\" type=\"submit\" value=\"Back To\nOther Panel\"></form></td>
  459.    </th>
  460.   </tr>
  461.  </table>"
  462.  
  463. return 0
  464.  
  465. }
  466.  
  467. # Confirm window
  468. function fConfirm()
  469. {
  470.   local NODE="${1}"
  471.   local CONTROL="${2}"
  472.   local ARGUMENT="${3}"
  473.   local PROCEED="${4}"
  474.   local COMMAND="./check_nrpe -H "${NODE}" -t 1"
  475.  
  476.   # check input
  477.    [ "${CONTROL}" = confirm ] || die "Unknown input action!"
  478.  
  479.   # check input command
  480.     [ "${ARGUMENT}" = toggle_chaos ]            || \
  481.     [ "${ARGUMENT}" = record_output ]           || \
  482.     [ "${ARGUMENT}" = toggle_screen_setup ]     || \
  483.     [ "${ARGUMENT}" = clear_all_layers ]        || \
  484.     [ "${ARGUMENT}" = shutdown_computer ]       || \
  485.     [ "${ARGUMENT}" = shutdown_resolume ]       || die "Unknown input action!"
  486.  
  487.   # CONFIRMED action on input
  488.   if [ "${PROCEED}" = yes ] && [ "${ARGUMENT}" = toggle_chaos ]; then
  489.      # Trap commando toggle_chaos af....
  490.      if OUTPUT="$( ${COMMAND} -c ${ARGUMENT} )"; then
  491.        # output succes
  492.        fMessage "${NODE}" "OK" "Succeeded to run ${ARGUMENT} for Node: ${NODE}<br> Output was: ${OUTPUT}!"
  493.      else
  494.        # else echo node not found
  495.        fMessage "${NODE}" "ERROR" "Failed to run ${ARGUMENT} for Host: ${NODE}<br> Output was: ${OUTPUT}!"
  496.      fi
  497.  
  498.   # CONFIRMED action on input
  499.   elif [ "${PROCEED}" = yes ] && [ "${ARGUMENT}" = record_output ]; then
  500.      # Trap commando toggle_chaos af....
  501.      if OUTPUT="$( ${COMMAND} -c ${ARGUMENT} )" ; then
  502.        # output succes
  503.        fMessage "${NODE}" "OK" "Succeeded to run ${ARGUMENT} for Node: ${NODE}<br> Output was: ${OUTPUT}!"
  504.      else
  505.        # else echo node not found
  506.        fMessage "${NODE}" "ERROR" "Failed to run ${ARGUMENT} for Host: ${NODE}<br> Output was: ${OUTPUT}!"
  507.      fi
  508.  
  509.   # CONFIRMED action on input
  510.   elif [ "${PROCEED}" = yes ] && [ "${ARGUMENT}" = toggle_screen_setup ]; then
  511.      # Trap commando toggle_chaos af....
  512.      if OUTPUT="$( ${COMMAND} -c ${ARGUMENT} )" ; then
  513.        # output succes
  514.        fMessage "${NODE}" "OK" "Succeeded to run ${ARGUMENT} for Node: ${NODE}<br> Output was: ${OUTPUT}!"
  515.      else
  516.        # else echo node not found
  517.        fMessage "${NODE}" "ERROR" "Failed to run ${ARGUMENT} for Host: ${NODE}<br> Output was: ${OUTPUT}!"
  518.      fi
  519.  
  520.   # CONFIRMED action on input
  521.   elif [ "${PROCEED}" = yes ] && [ "${ARGUMENT}" = clear_all_layers ]; then
  522.      # Trap commando toggle_chaos af....
  523.      if OUTPUT="$( ${COMMAND} -c ${ARGUMENT} )" ; then
  524.        # output succes
  525.        fMessage "${NODE}" "OK" "Succeeded to run ${ARGUMENT} for Node: ${NODE}<br> Output was: ${OUTPUT}!"
  526.      else
  527.        # else echo node not found
  528.        fMessage "${NODE}" "ERROR" "Failed to run ${ARGUMENT} for Host: ${NODE}<br> Output was: ${OUTPUT}!"
  529.      fi
  530.  
  531.   # CONFIRMED action on input
  532.   elif [ "${PROCEED}" = yes ] && [ "${ARGUMENT}" = shutdown_computer ]; then
  533.      # Trap commando toggle_chaos af....
  534.      if OUTPUT="$( ${COMMAND} -c ${ARGUMENT} )" ; then
  535.        # output succes
  536.        fMessage "${NODE}" "OK" "Succeeded to run ${ARGUMENT} for Node: ${NODE}<br> Output was: ${OUTPUT}!"
  537.      else
  538.        # else echo node not found
  539.        fMessage "${NODE}" "ERROR" "Failed to run ${ARGUMENT} for Host: ${NODE}<br> Output was: ${OUTPUT}!"
  540.      fi
  541.  
  542.   # CONFIRMED action on input
  543.   elif [ "${PROCEED}" = yes ] && [ "${ARGUMENT}" = shutdown_resolume ]; then
  544.      # Trap commando toggle_chaos af....
  545.      if OUTPUT="$( ${COMMAND} -c ${ARGUMENT} )" ; then
  546.        # output succes
  547.        fMessage "${NODE}" "OK" "Succeeded to run ${ARGUMENT} for Node: ${NODE}<br> Output was: ${OUTPUT}!"
  548.      else
  549.        # else echo node not found
  550.        fMessage "${NODE}" "ERROR" "Failed to run ${ARGUMENT} for Host: ${NODE}<br> Output was: ${OUTPUT}!"
  551.      fi
  552.  
  553.   else
  554.      # ask for confirmation
  555.      echo -e "
  556.       <table border=\"1\" color=\"black\" width=\"100%\" height=\"10%\" cellpadding=\"2\" cellspacing=\"2\">
  557.       <tr>
  558.        <td colspan=\"1\">
  559.          <font color=\"#FF0000\" size=\"14\"/>
  560.          <b>ATTENTION!</b>
  561.          <br>
  562.        </td>
  563.        <td colspan=\"1\">
  564.          <font color=\"#FFF\" size=\"6\"/>
  565.          You are about to run ${ARGUMENT} for Host: ${NODE}.<br> Press OK button to proceed!
  566.          <th>
  567.            <form method=\"post\" action=\"${URL}/control.cgi?node=${NODE}&control=confirm&args=${ARGUMENT}&proceed=yes\">
  568.            <input style=\"height: 50px; width: 120px\" type=\"submit\" value=\"OK\"></form>
  569.  
  570.            <form method=\"post\" action=\"${URL}/control.cgi?node=${NODE}&control=other&args=none\">
  571.            <center><input style=\"height: 50px; width: 120px\" type=\"submit\" value=\"Cancel\"></form></td>
  572.          </th>
  573.        </td>
  574.          </td>
  575.       </tr>
  576.       </table>
  577.       <table border=\"2\" color=\"black\" width=\"100%\" height=\"10%\" cellpadding=\"10\" cellspacing=\"10\">
  578.       </table>"
  579.   fi
  580.  
  581.   return 0
  582.  
  583. }
  584.  
  585. # Create command
  586. function fStart()
  587. {
  588.   # array met input args
  589.   local ARG=( $( echo "${QUERY_STRING}" | sed -e 's/&/\ /g' ) )
  590.  
  591.   # set node var
  592.   local NODE="$( echo "${ARG[0]}" | sed -e 's/node=//g' )"
  593.   # set control var
  594.   local CONTROL="$( echo "${ARG[1]}" | sed -e 's/control=//g' )"
  595.   # get action var
  596.   local ARGUMENT="$( echo "${ARG[2]}" | sed -e 's/args=//g' )"
  597.   # get proceed var
  598.   local PROCEED="$( echo "${ARG[3]}" | sed -e 's/proceed=//g' )"
  599.  
  600.   # set command
  601.   local COMMAND="./check_nrpe -H "${NODE}" -t 1"
  602.  
  603.   # output if
  604.   if [ ! -z "${NODE}" ] && [ ! -z "${CONTROL}" ] && [ ! -z "${ARGUMENT}" ]
  605.   then
  606.     # case commands
  607.     case "${CONTROL}"
  608.     in
  609.     view)
  610.       # set vars for output
  611.        LINE1="$( echo -e "<div style=\"padding:4px; border:1px solid #00FFFF; color:#00FFFF;\">Selecting Node: ${NODE}\n</div>\n" )"
  612.       # create output
  613.        SelectWindow "${NODE}" "${CONTROL}" "${ARGUMENT}" "${PROCEED}"
  614.        fStatusWindow "${NODE}" "${CONTROL}" "${ARGUMENT}" "${PROCEED}"
  615.        fShowIndex "${NODE}" "${CONTROL}" "${ARGUMENT}" "${PROCEED}"
  616.        fFooter "${NODE}" "${CONTROL}" "${ARGUMENT}" "${PROCEED}"
  617.       # exit
  618.        return 0
  619.       ;;
  620.     credits)
  621.       # set vars for output
  622.        LINE1="$( echo -e "<div style=\"padding:4px; border:1px solid #00FFFF; color:#00FFFF;\">Showing Credits\n</div>\n" )"
  623.       # create output
  624.        fHeader
  625.        fStatusWindow "${NODE}" "${CONTROL}" "${ARGUMENT}" "${PROCEED}"
  626.        fShowCredits "${NODE}" "${CONTROL}" "${ARGUMENT}" "${PROCEED}"
  627.        fFooter "${NODE}" "${CONTROL}" "${ARGUMENT}" "${PROCEED}"
  628.       # exit
  629.        return 0
  630.       ;;
  631.     matrix)
  632.       # set vars for output and run command
  633.       if   ( echo "${ARGUMENT}" |grep -q '^none$' ) ; then
  634.              LINE1="$( echo -e "<div style=\"padding:4px; border:1px solid #00FFFF; color:#00FFFF;\">Selecting Matrix: on ${NODE}\n</div>\n" )"
  635.  
  636.       elif ( echo "${ARGUMENT}" | grep -qE '^toggle_matrix_[0-2][0-9]$' ) ; then
  637.            if [ "${PROCEED}" = yes ] ; then
  638.               if OUTPUT="$( ${COMMAND} -c ${ARGUMENT} )"; then
  639.                 LINE1="$( echo -e "<div style=\"padding:4px; border:1px solid #00FFFF; color:#00FFFF;\">Succesfully Sended Matrix Button ${ARGUMENT} to ${NODE}\n</div>\n" )"
  640.                 LINE2="$( echo -e "<div style=\"padding:4px; border:1px solid #00FF00; color:#00FF00;\">Command output was: ${OUTPUT}\n</div>\n" )"
  641.               else
  642.                 LINE1="$( echo -e "<div style=\"padding:4px; border:1px solid #FF0000; color:#FF0000;\">Failed to Send Matrix Button ${ARGUMENT} to ${NODE}\n</div>\n" )"
  643.                 LINE2="$( echo -e "<div style=\"padding:4px; border:1px solid orange; color:orange;\">Command output was: ${OUTPUT}\n</div>\n" )"
  644.               fi
  645.            else
  646.              LINE1="$( echo -e "<div style=\"padding:4px; border:1px solid #00FFFF; color:#00FFFF;\">Selecting Matrix: on ${NODE}\n</div>\n" )"
  647.            fi
  648.       else
  649.         LINE1="$( echo -e "<div style=\"padding:4px; border:1px solid red; color:red;\">An error appeared! Command \"${ARGUMENT}\" was not recognized\n</div>" )"
  650.       fi
  651.       # create output
  652.        SelectWindow "${NODE}" "${CONTROL}" "${ARGUMENT}" "${PROCEED}"
  653.        fStatusWindow "${NODE}" "${CONTROL}" "${ARGUMENT}" "${PROCEED}"
  654.        fPrintMatrix "${NODE}" "${CONTROL}" "${ARGUMENT}" "${PROCEED}"
  655.        fFooter "${NODE}" "${CONTROL}" "${ARGUMENT}" "${PROCEED}"
  656.       # exit
  657.        return 0
  658.       ;;
  659.     layer)
  660.       # set vars for output and run command
  661.       if   ( echo "${ARGUMENT}" |grep -q '^none$' ) ; then
  662.              LINE1="$( echo -e "<div style=\"padding:4px; border:1px solid #00FFFF; color:#00FFFF;\">Selecting Layer: on ${NODE}\n</div>\n" )"
  663.  
  664.       elif ( echo "${ARGUMENT}" | grep -qE '^toggle_[a-z]+_layer_[0-3]$' ) ; then
  665.            if [ "${PROCEED}" = yes ] ; then
  666.               if OUTPUT="$( ${COMMAND} -c ${ARGUMENT} )"; then
  667.                 LINE1="$( echo -e "<div style=\"padding:4px; border:1px solid #00FFFF; color:#00FFFF;\">Succesfully Sended Layer Button ${ARGUMENT} to ${NODE}\n</div>\n" )"
  668.                 LINE2="$( echo -e "<div style=\"padding:4px; border:1px solid #00FF00; color:#00FF00;\">Command output was: ${OUTPUT}\n</div>\n" )"
  669.               else
  670.                 LINE1="$( echo -e "<div style=\"padding:4px; border:1px solid red; color:red;\">Failed to Send Layer Button ${ARGUMENT} to ${NODE}\n</div>\n" )"
  671.                 LINE2="$( echo -e "<div style=\"padding:4px; border:1px solid orange; color:orange;\">Command output was: ${OUTPUT}\n</div>\n" )"
  672.               fi
  673.            else
  674.              LINE1="$( echo -e "<div style=\"padding:4px; border:1px solid #00FFFF; color:#00FFFF;\">Selecting Layer: on ${NODE}\n</div>\n" )"
  675.            fi
  676.       else
  677.         LINE1="$( echo -e "<div style=\"padding:4px; border:1px solid red; color:red;\">An error appeared! Command \"${ARGUMENT}\" was not recognized\n</div>" )"
  678.       fi
  679.       # create output
  680.        SelectWindow "${NODE}" "${CONTROL}" "${ARGUMENT}" "${PROCEED}"
  681.        fStatusWindow "${NODE}" "${CONTROL}" "${ARGUMENT}" "${PROCEED}"
  682.        fShowLayers "${NODE}" "${CONTROL}" "${ARGUMENT}" "${PROCEED}"
  683.        fFooter "${NODE}" "${CONTROL}" "${ARGUMENT}" "${PROCEED}"
  684.       # exit
  685.        return 0
  686.       ;;
  687.     deck)
  688.       # set vars for output and run command
  689.       if   ( echo "${ARGUMENT}" |grep -q '^none$' ) ; then
  690.              LINE1="$( echo -e "<div style=\"padding:4px; border:1px solid #00FFFF; color:#00FFFF;\">Selecting Deck: on ${NODE}\n</div>\n" )"
  691.       elif ( echo "${ARGUMENT}" | grep -q '^select_deck_[0-8]$' ) ; then  
  692.            if [ "${PROCEED}" = yes ] ; then
  693.               if OUTPUT="$( ${COMMAND} -c ${ARGUMENT} )"; then
  694.                 LINE1="$( echo -e "<div style=\"padding:4px; border:1px solid #00FFFF; color:#00FFFF;\">Succesfully Sended Deck Button ${ARGUMENT} to ${NODE}\n</div>\n" )"
  695.                 LINE2="$( echo -e "<div style=\"padding:4px; border:1px solid #00FF00; color:#00FF00;\">Command output was: ${OUTPUT}\n</div>\n" )"
  696.               else
  697.                 LINE1="$( echo -e "<div style=\"padding:4px; border:1px solid #FF0000; color:#FF0000;\">Failed to Send Deck Button ${ARGUMENT} to ${NODE}\n</div>\n" )"
  698.                 LINE2="$( echo -e "<div style=\"padding:4px; border:1px solid orange; color:orange;\">Command output was: ${OUTPUT}\n</div>\n" )"
  699.               fi
  700.            else
  701.              LINE1="$( echo -e "<div style=\"padding:4px; border:1px solid #00FFFF; color:#00FFFF;\">Selecting Deck: on ${NODE}\n</div>\n" )"
  702.            fi
  703.       else
  704.         LINE1="$( echo -e "<div style=\"padding:4px; border:1px solid red; color:red;\">An error appeared! Command \"${ARGUMENT}\" was not recognized\n</div>" )"
  705.       fi
  706.       # create output
  707.        SelectWindow "${NODE}" "${CONTROL}" "${ARGUMENT}" "${PROCEED}"
  708.        fStatusWindow "${NODE}" "${CONTROL}" "${ARGUMENT}" "${PROCEED}"
  709.        fShowDecks "${NODE}" "${CONTROL}" "${ARGUMENT}" "${PROCEED}"
  710.        fFooter "${NODE}" "${CONTROL}" "${ARGUMENT}" "${PROCEED}"
  711.       # exit
  712.        return 0
  713.       ;;
  714.     other)
  715.       # set vars for output and run command
  716.       if [ "${ARGUMENT}" = none ] ; then
  717.        LINE1="$( echo -e "<div style=\"padding:4px; border:1px solid #00FFFF; color:#00FFFF;\">Selecting Other Options on ${NODE}\n</div>\n" )"
  718.       else
  719.        LINE1="$( echo -e "<div style=\"padding:4px; border:1px solid red; color:red;\">An error appeared! Command \"${ARGUMENT}\" was not recognized\n</div>" )"
  720.       fi
  721.       # create output
  722.        SelectWindow "${NODE}" "${CONTROL}" "${ARGUMENT}" "${PROCEED}"
  723.        fStatusWindow "${NODE}" "${CONTROL}" "${ARGUMENT}" "${PROCEED}"
  724.        fShowOther "${NODE}" "${CONTROL}" "${ARGUMENT}" "${PROCEED}"
  725.        fFooter "${NODE}" "${CONTROL}" "${ARGUMENT}" "${PROCEED}"
  726.       # exit
  727.        return 0
  728.       ;;
  729.     confirm)
  730.       # check vars
  731.       if [ "${ARGUMENT}" = none ] ; then
  732.         LINE1="$( echo -e "<div style=\"padding:4px; border:1px solid #00FFFF; color:#00FFFF;\">Selecting Other Options on ${NODE}\n</div>\n" )"
  733.       else
  734.         LINE1="$( echo -e "<div style=\"padding:4px; border:1px solid #00FFFF; color:#00FFFF;\">About to send ${ARGUMENT} to ${NODE}, Please confirm your actions!\n</div>\n" )"
  735.       fi
  736.       # set vars for output and run command
  737.       if [ "${PROCEED}" = yes ] ; then
  738.         LINE1="$( echo -e "<div style=\"padding:4px; border:1px solid #00FFFF; color:#00FFFF;\">Confirmed sending ${ARGUMENT} to ${NODE}!\n</div>\n" )"
  739.       fi
  740.         # create output
  741.          SelectWindow "${NODE}" "${CONTROL}" "${ARGUMENT}" "${PROCEED}"
  742.          fStatusWindow "${NODE}" "${CONTROL}" "${ARGUMENT}" "${PROCEED}"
  743.          fConfirm "${NODE}" "${CONTROL}" "${ARGUMENT}" "${PROCEED}"
  744.          fFooter "${NODE}" "${CONTROL}" "${ARGUMENT}" "${PROCEED}"
  745.       # exit
  746.        return 0
  747.       ;;
  748.     *)
  749.       # set vars for output
  750.        LINE1="$( echo -e "<div style=\"padding:4px; border:1px solid red; color:red;\">An error appeared! Command \"${CONTROL}\" was not recognized\n</div>" )"
  751.       # create output
  752.        fHeader
  753.        fStatusWindow
  754.        fShowIndex
  755.        fFooter
  756.       # exit
  757.        return 0
  758.       ;;
  759.     esac
  760.   else
  761.      # set vars for output
  762.       LINE1="$( echo -e "<div style=\"padding:4px; border:1px solid red; color:red;\">An error appeared! Command \"${CONTROL}\" was not recognized\n</div>" )"
  763.       # create output
  764.        fHeader
  765.        fStatusWindow
  766.        fShowIndex
  767.        fFooter
  768.       # exit
  769.        return 0
  770.   fi
  771.  
  772. }
  773.  
  774. ##################################################
  775. #
  776. # DO THA MAGIC:
  777. #
  778. ##################################################
  779.  
  780. # check for query string
  781.    fCheck && fStart
Advertisement
Add Comment
Please, Sign In to add comment