Changeset 2631


Ignore:
Timestamp:
Sep 8, 2006, 12:17:15 PM (16 years ago)
Author:
Nicklas Nordborg
Message:

References #351: External job server usage

Update web pages for plugin definition administration to display and edit job agent settings

Location:
trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/core/net/sf/basedb/core/JobAgent.java

    r2629 r2631  
    7070  public static final Item TYPE = Item.JOBAGENT;
    7171
     72  /**
     73    The default port (47822) where job agents are listening for
     74    connections. If 87422 is converted to a hexadecimal number it
     75    becomes BACE!
     76  */
     77  public static final int DEFAULT_PORT = 0xBACE;
     78 
    7279  /**
    7380    Create a new <code>JobAgent</code> item.
  • trunk/www/admin/jobagents/edit_agent.jsp

    r2629 r2631  
    6060  JobAgent agent = null;
    6161  Integer port = null;
    62  
     62
     63  final int selectedPluginId = Values.getInt(request.getParameter("plugin_id"), -1);
     64
    6365  // Query to retrieve installed plugins
    64   ItemQuery<PluginDefinition> pluginQuery = null;
     66  ItemQuery<PluginDefinition> pluginQuery = PluginDefinition.getQuery();
     67  pluginQuery.include(Include.MINE, Include.SHARED, Include.IN_PROJECT, Include.OTHERS);
     68  pluginQuery.order(Orders.asc(Hql.property("name")));
    6569
    6670  if (itemId == 0)
     
    7781    agent.checkPermission(Permission.WRITE);
    7882    port = agent.getPort();
    79     pluginQuery = PluginDefinition.getQuery();
    80     pluginQuery.include(Include.MINE, Include.SHARED, Include.IN_PROJECT, Include.OTHERS);
    81     pluginQuery.order(Orders.asc(Hql.property("name")));
    8283  }
    8384   
     
    165166      if (!item) item = new Item('P', pluginId, name);
    166167      Link.addItem(document.forms['agent'].plugins, item);
     168      pluginsOnClick();
    167169    }
    168170
     
    188190
    189191          // Specific settings
    190           JobAgentSettings settings = agent.getSettings(plugin, false);
     192          JobAgentSettings settings = agent == null ? null : agent.getSettings(plugin, false);
    191193          String jarPath = null;
    192194          Boolean trusted = null;
     
    209211      }
    210212      %>
    211     }   
     213    }
     214   
     215    function selectPlugin(pluginId)
     216    {
     217      var frm = document.forms['agent'];
     218      for (var i = 0; i < frm.plugins.length; i++)
     219      {
     220        if (frm.plugins[i].item.id == pluginId)
     221        {
     222          frm.plugins.selectedIndex = i;
     223          pluginsOnClick();
     224          return;
     225        }
     226      }
     227    }
     228     
    212229    function init()
    213230    {
     
    223240      %>
    224241      initPlugins();
     242      <%
     243      if (selectedPluginId != -1)
     244      {
     245        %>
     246        selectPlugin(<%=selectedPluginId%>);
     247        <%
     248      }
     249      %>
    225250    }
    226251   
     
    275300        if (priorityBoost < 0 || priorityBoost > 10)
    276301        {
    277           alert('The prioriy boost must be between 0 and 10');
     302          alert('The priority boost must be between 0 and 10');
    278303          frm.priorityBoost.focus();
    279304          return;
     
    385410    <h3 class="docked"><%=title%> <base:help tabcontrol="settings" /></h3>
    386411    <t:tabcontrol id="settings" contentstyle="<%="height: "+(int)(scale*260)+"px;"%>"
    387       position="bottom"  remember="<%=agent != null%>">
     412      position="bottom"  remember="<%=agent != null%>" active="<%=selectedPluginId == -1 ? null : "plugins" %>">
    388413    <t:tab id="info" title="Job agent" validate="validateJobAgent()" helpid="jobagent.edit">
    389414      <table class="form" cellspacing=0>
     
    409434        <td class="prompt">Port</td>
    410435        <td><input <%=clazz%> type="text" name="port"
    411           value="<%=port == null ?  "" : port.toString() %>"
     436          value="<%=port == null ?  JobAgent.DEFAULT_PORT : port %>"
    412437          size="12" maxlength="10"
    413438          onkeypress="return Numbers.integerOnly(event)"></td>
  • trunk/www/admin/jobagents/index.jsp

    r2629 r2631  
    109109    // Display the edit page for a single item (should be opened in a popup)
    110110    ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
    111     redirect = editPage;
     111    forward = editPage;
    112112  }
    113113  else if ("NewItem".equals(cmd))
  • trunk/www/admin/jobagents/view_agent.jsp

    r2629 r2631  
    9696      location.replace('index.jsp?ID=<%=ID%>&cmd=RestoreItem&item_id=<%=itemId%>');
    9797    }
    98     function runPlugin(cmd)
    99     {
    100       Main.openPopup('index.jsp?ID=<%=ID%>&cmd='+cmd+'&item_id=<%=itemId%>', 'RunPlugin'+cmd, 740, 540);
     98    function configurePlugin(pluginId)
     99    {
     100      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, true, '&plugin_id='+pluginId);
    101101    }
    102102    </script>
     
    174174    <div class="boxedbottom">
    175175      <div class="itemstatus">Permissions on this item: <i><%=PermissionUtil.getFullPermissionNames(agent)%></i></div>
    176       <%
    177       if (agent.isRemoved() || agent.isShared())
    178       {
    179         %>
    180         <div class="itemstatus">
    181           <base:icon image="deleted.gif"
    182             visible="<%=agent.isRemoved()%>"> This item has been flagged for deletion<br></base:icon>
    183           <base:icon image="shared.gif"
    184             visible="<%=agent.isShared()%>"> This item is shared to other user, groups and/or projects</base:icon>
    185         </div>
    186         <%
    187       }
    188       %>
     176      <div class="itemstatus">
     177        <base:icon image="deleted.gif"
     178          visible="<%=agent.isRemoved()%>"> This item has been flagged for deletion<br></base:icon>
     179        <base:icon image="shared.gif"
     180          visible="<%=agent.isShared()%>"> This item is shared to other user, groups and/or projects</base:icon>
     181        <base:icon image="warning.gif"
     182          visible="<%=!agent.isShared()%>"> This item is NOT shared to other users, groups or projects. Only the
     183          owner will be able to run jobs on this agent</base:icon>
     184      </div>
    189185      <table class="form" cellspacing=0>
    190186      <tr>
     
    267263          title="Priority boost"
    268264        />
     265        <tbl:columndef
     266          id="configure"
     267          title=""
     268        />
    269269        <tbl:data>
    270270          <tbl:columns>
     
    286286            Long maxMemory = settings.getEffectiveMaxMemory();
    287287            String jarPath = settings.getEffectiveJarPath();
    288            
    289288            %>
    290289            <tbl:row>
     
    294293              <tbl:cell column="maxMemory"><%=maxMemory == null ? "<i>- not specified -</i>" : Values.formatBytes(maxMemory)%></tbl:cell>
    295294              <tbl:cell column="priorityBoost"><%=settings.getPriorityBoost()%></tbl:cell>
     295              <tbl:cell column="configure">
     296              <%
     297              if (writePermission && plugin != null)
     298              {
     299                %>
     300                <base:icon image="runplugin.gif"
     301                  onclick="<%="configurePlugin(" + plugin.getId() + ")"%>"
     302                  tooltip="Configure the settings for this plugin on the job agent "/>
     303                <%
     304              }
     305              %>
     306              </tbl:cell>
    296307            </tbl:row>
    297308            <%
  • trunk/www/admin/plugindefinitions/edit_plugin.jsp

    r2629 r2631  
    3131  import="net.sf.basedb.core.Item"
    3232  import="net.sf.basedb.core.ItemContext"
     33  import="net.sf.basedb.core.Include"
    3334  import="net.sf.basedb.core.Permission"
    3435  import="net.sf.basedb.core.PluginDefinition"
    3536  import="net.sf.basedb.core.ItemQuery"
    3637  import="net.sf.basedb.core.ItemResultList"
     38  import="net.sf.basedb.core.JobAgent"
     39  import="net.sf.basedb.core.JobAgentSettings"
    3740  import="net.sf.basedb.core.PermissionDeniedException"
     41  import="net.sf.basedb.core.query.Restrictions"
    3842  import="net.sf.basedb.core.query.Orders"
    3943  import="net.sf.basedb.core.query.Hql"
     
    5761  PluginDefinition plugin = null;
    5862  boolean isTrusted = true;
    59 
     63 
     64  final int selectedAgentId = Values.getInt(request.getParameter("jobagent_id"), -1);
     65
     66  // Query to retrieve job agents
     67  ItemQuery<JobAgent> agentQuery = null;
     68 
    6069  if (itemId == 0)
    6170  {
     
    7281    plugin.checkPermission(Permission.WRITE);
    7382    isTrusted = plugin.isTrusted();
     83
     84    agentQuery = JobAgent.getQuery();
     85    agentQuery.include(Include.MINE, Include.SHARED, Include.OTHERS, Include.IN_PROJECT);
     86    agentQuery.order(Orders.asc(Hql.property("name")));
     87    agentQuery.join(Hql.innerJoin("plugins", "p"));
     88    agentQuery.restrict(Restrictions.eq(Hql.property("p", "pluginDefinition"), Hql.entity(plugin)));
    7489  }
    7590 
     
    7994
    8095  <base:page type="popup" title="<%=title%>">
    81   <base:head scripts="tabcontrol.js" styles="tabcontrol.css">
     96  <base:head scripts="tabcontrol.js,linkitems.js" styles="tabcontrol.css">
    8297    <script language="JavaScript">
    8398    // Validate the "Plugin" tab
     
    100115      if (TabControl.validateActiveTab('settings'))
    101116      {
     117        var agents = Link.getListIds(frm.agents, 'A');
     118        for (var i = 0; i < agents.length; i++)
     119        {
     120          var agentId = agents[i];
     121          var settings = getAgentSettings(agentId);
     122          if (settings)
     123          {
     124            if (!settings.useDefaultJarPath)
     125            {
     126              Forms.createHidden(frm, 'jarPath.'+agentId, settings.jarPath);
     127            }
     128            if (!settings.useDefaultMaxMemory)
     129            {
     130              Forms.createHidden(frm, 'maxMemory.'+agentId, settings.maxMemory);
     131            }
     132            if (!settings.useDefaultTrusted)
     133            {
     134              Forms.createHidden(frm, 'trusted.'+agentId, settings.trusted);
     135            }
     136            Forms.createHidden(frm, 'priorityBoost.'+agentId, settings.priorityBoost);
     137          }
     138        }
     139       
     140        frm.allAgents.value = agents.join(',');
     141        frm.removeAgents.value = Link.getActionIds(-1, 'A').join(',');
    102142        frm.submit();
    103143      }
    104144    }
     145   
     146    function addAgentsOnClick()
     147    {
     148      var agents = Link.getListIds(document.forms['plugin'].agents, 'A');
     149      var url = '../jobagents/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectmultiple&callback=addAgentCallback';
     150      url += '&exclude='+agents.join(',');
     151      Main.openPopup(url, 'AddAgents', 1000, 700);
     152    }
     153    function addAgentCallback(agentId, name)
     154    {
     155      var item = Link.getItem('A', agentId);
     156      if (!item)
     157      {
     158        item = new Item('A', agentId, name);
     159        new AgentSetting(agentId, '', '', '', '0');
     160      }
     161      Link.addItem(document.forms['plugin'].agents, item);
     162      agentsOnClick();
     163    }
     164
     165    function removeOnClick()
     166    {
     167      Link.removeSelected(document.forms['plugin'].agents);
     168      Main.hide('agentsettings');
     169    }
     170   
    105171   
    106172    function init()
     
    116182      }
    117183      %>
    118     }
     184      initAgents();
     185      <%
     186      if (selectedAgentId != -1)
     187      {
     188        %>
     189        selectAgent(<%=selectedAgentId%>);
     190        <%
     191      }
     192      %>
     193    }
     194    function initAgents()
     195    {
     196      var agents = document.forms['plugin'].agents;
     197      <%
     198      if (agentQuery != null)
     199      {
     200        ItemResultList<JobAgent> agents = agentQuery.list(dc);
     201        for (JobAgent agent : agents)
     202        {
     203          // Agent specific settings
     204          JobAgentSettings settings = agent.getSettings(plugin, false);
     205          String jarPath = null;
     206          Boolean trusted = null;
     207          Long maxMemory = null;
     208          int priorityBoost = 0;
     209          if (settings != null)
     210          {
     211            jarPath = settings.getJarPath();
     212            trusted = settings.isTrusted();
     213            maxMemory = settings.getMaxMemory();
     214            priorityBoost = settings.getPriorityBoost();
     215            %>
     216            Link.addNewItem(agents, new Item('A', <%=agent.getId()%>, '<%=HTML.javaScriptEncode(agent.getName())%>'));
     217            <%
     218          }
     219          %>
     220          new AgentSetting(<%=agent.getId()%>, '<%=HTML.javaScriptEncode(jarPath)%>', '<%=trusted == null ? "" : trusted ? "1" : "0"%>', '<%=Values.formatBytes(maxMemory)%>', '<%=priorityBoost%>');
     221          <%
     222        }
     223      }
     224      %>
     225    }
     226   
     227    function selectAgent(agentId)
     228    {
     229      var frm = document.forms['plugin'];
     230      for (var i = 0; i < frm.agents.length; i++)
     231      {
     232        if (frm.agents[i].item.id == agentId)
     233        {
     234          frm.agents.selectedIndex = i;
     235          agentsOnClick();
     236          return;
     237        }
     238      }
     239    }
     240
     241    function getAgentSettings(agentId)
     242    {
     243      return allAgentSettings['A'+agentId];
     244    }
     245    var allAgentSettings = new Array();
     246    function AgentSetting(agentId, jarPath, trusted, maxMemory, priorityBoost)
     247    {
     248      this.agentId = agentId;
     249      this.jarPath = jarPath;
     250      this.useDefaultJarPath = (jarPath == '');
     251      this.trusted = trusted;
     252      this.useDefaultTrusted = trusted != null;
     253      this.maxMemory = maxMemory;
     254      this.useDefaultMaxMemory = (maxMemory == '');
     255      this.priorityBoost = priorityBoost;
     256      allAgentSettings['A'+agentId] = this;
     257    }
     258   
     259    var selectedAgentId;
     260    function agentsOnClick()
     261    {
     262      var frm = document.forms['plugin'];
     263      var agentId = frm.agents[frm.agents.selectedIndex].item.id;
     264      var settings = getAgentSettings(agentId);
     265      if (settings)
     266      {
     267        Main.show('agentsettings');
     268        selectedAgentId = agentId;
     269        // Set JAR path
     270        frm.useDefaultJarPath.checked = settings.useDefaultJarPath;
     271        useDefaultJarPathOnClick();
     272        var defaultJarPath = document.getElementById("defaultJarPath");
     273        var html = frm.jarPath.value;
     274        if (html.length > 50)
     275        {
     276          html = '<span title="'+html+'">'+Main.cutString(html, 50)+'</span>'; 
     277        }
     278        if (html == '') html = 'internal';
     279        defaultJarPath.innerHTML = html;
     280       
     281        // Set max memory
     282        frm.useDefaultMaxMemory.checked = settings.useDefaultMaxMemory;
     283        useDefaultMaxMemoryOnClick();
     284        var defaultMaxMemory = document.getElementById("defaultMaxMemory");
     285        defaultMaxMemory.innerHTML = frm.maxMemory.value == '' ? 'not specified' : frm.maxMemory.value;
     286       
     287        // Set trusted
     288        Forms.checkRadio(frm.agentTrusted, settings.trusted);
     289        var defaultTrusted = document.getElementById("defaultTrusted");
     290        defaultTrusted.innerHTML = Forms.getCheckedRadio(frm.trusted).value == '0' ? 'no' : 'yes';
     291
     292        // Set priority boost
     293        frm.agentPriorityBoost.value = settings.priorityBoost;
     294      }
     295      else
     296      {
     297        Main.hide('agentsettings');
     298      }
     299    }
     300   
     301    function useDefaultJarPathOnClick()
     302    {
     303      var frm = document.forms['plugin'];
     304      var settings = getAgentSettings(selectedAgentId);
     305      if (settings)
     306      {
     307        var useDefault = frm.useDefaultJarPath.checked;
     308        settings.useDefaultJarPath = useDefault;
     309        frm.agentJarPath.disabled = useDefault;
     310        if (!useDefault)
     311        {
     312          frm.agentJarPath.focus();
     313          frm.agentJarPath.value = settings.jarPath;
     314        }
     315      }
     316    }
     317   
     318    function jarPathOnBlur()
     319    {
     320      var frm = document.forms['plugin'];
     321      var settings = getAgentSettings(selectedAgentId);
     322      if (settings)
     323      {
     324        settings.jarPath = frm.agentJarPath.value;
     325      }
     326    }
     327   
     328    function useDefaultMaxMemoryOnClick()
     329    {
     330      var frm = document.forms['plugin'];
     331      var settings = getAgentSettings(selectedAgentId);
     332      if (settings)
     333      {
     334        var useDefault = frm.useDefaultMaxMemory.checked;
     335        settings.useDefaultMaxMemory = useDefault;
     336        frm.agentMaxMemory.disabled = useDefault;
     337        if (!useDefault)
     338        {
     339          frm.agentMaxMemory.focus();
     340          frm.agentMaxMemory.value = settings.maxMemory;
     341        }
     342      }
     343    }
     344   
     345    function maxMemoryOnBlur()
     346    {
     347      var frm = document.forms['plugin'];
     348      var settings = getAgentSettings(selectedAgentId);
     349      if (settings)
     350      {
     351        settings.maxMemory = frm.agentMaxMemory.value;
     352      }
     353    }
     354   
     355    function trustedOnClick()
     356    {
     357      var frm = document.forms['plugin'];
     358      var settings = getAgentSettings(selectedAgentId);
     359      if (settings)
     360      {
     361        var selected = Forms.getCheckedRadio(frm.agentTrusted);
     362        if (selected != null)
     363        {
     364          settings.trusted = selected.value;
     365          settings.useDefaultTrusted = settings.trusted == '';
     366        }
     367      }
     368    }
     369   
     370    function priorityBoostOnBlur()
     371    {
     372      var frm = document.forms['plugin'];
     373      var settings = getAgentSettings(selectedAgentId);
     374      if (settings)
     375      {
     376        var priorityBoost = parseInt(frm.agentPriorityBoost.value);
     377        if (priorityBoost < 0 || priorityBoost > 10)
     378        {
     379          alert('The priority boost must be between 0 and 10');
     380          frm.agentPriorityBoost.focus();
     381          return;
     382        }
     383        settings.priorityBoost = priorityBoost;
     384      }
     385    }
     386   
    119387    </script>
    120388  </base:head>
     
    125393
    126394    <h3 class="docked"><%=title%> <base:help tabcontrol="settings" /></h3>
    127     <t:tabcontrol id="settings" contentstyle="<%="height: "+(int)(scale*160)+"px;"%>"
    128       position="bottom" remember="<%=plugin != null%>">
     395    <t:tabcontrol id="settings" contentstyle="<%="height: "+(int)(scale*260)+"px;"%>"
     396      position="bottom" remember="<%=plugin != null%>" active="<%=selectedAgentId == -1 ? null : "agents" %>">
    129397    <t:tab id="info" title="Plugin" validate="validatePlugin()" helpid="plugindefinition.edit">
    130398      <table class="form" cellspacing=0>
     
    160428          <input type="radio" name="trusted" value="1" <%=isTrusted ? "checked" : ""%>>yes
    161429        </td>
    162       </tr>
    163    
    164 
     430      </tr>   
    165431      </table>
    166432      <div align=right>&nbsp;<i><base:icon image="required.gif" /> = required information</i></div>
    167433    </t:tab>
     434   
     435    <t:tab id="agents" title="Job agents" helpid="plugindefinition.jobagents">
     436      <table >
     437      <tr valign="top">
     438      <td>
     439        <b>Installed plugins</b><br>
     440        <select name="agents" size="15" multiple style="width: 15em;"
     441          onclick="agentsOnClick()">
     442        </select>
     443        <input type="hidden" name="removeAgents" value="">
     444        <input type="hidden" name="allAgents" value="">
     445      </td>
     446      <td>
     447        <br>
     448        <table width="150">
     449        <tr><td><base:button
     450          onclick="addAgentsOnClick()"
     451          title="Add&nbsp;job&nbsp;agents&hellip;" 
     452          tooltip="Add job agents to this plugin"
     453        /></td></tr>
     454        <tr><td><base:button
     455          onclick="removeOnClick()"
     456          title="Remove"
     457          tooltip="Remove the selected job agents"
     458        /></td></tr>
     459        </table>
     460
     461        <br>
     462        <div id="agentsettings" style="display: none;">
     463        <table border="0" cellspacing="0" class="form">
     464        <tr>
     465          <td class="prompt">Jar path</td>
     466          <td>
     467            <input type="text" name="agentJarPath" class="text" size="50"
     468              maxlength="<%=JobAgentSettings.MAX_JARPATH_LENGTH%>"
     469              onblur="jarPathOnBlur()">
     470          </td>
     471        </tr>
     472        <tr>
     473          <td style="padding-left: 10px;">-use default</td>
     474          <td>
     475            <input type="checkbox" name="useDefaultJarPath"
     476              onclick="useDefaultJarPathOnClick()">
     477            (<span id="defaultJarPath"></span>)
     478          </td>
     479        </tr>
     480        <tr>
     481          <td class="prompt">Max memory</td>
     482          <td>
     483            <input type="text" name="agentMaxMemory" class="text" size="16"
     484              maxlength="16"
     485              onblur="maxMemoryOnBlur()">
     486              (Use KB, MB or GB to specify memory)
     487          </td>
     488        </tr>
     489        <tr>
     490          <td style="padding-left: 10px;">-use default</td>
     491          <td>
     492            <input type="checkbox" name="useDefaultMaxMemory"
     493              onclick="useDefaultMaxMemoryOnClick()">
     494            (<span id="defaultMaxMemory"></span>)
     495          </td>
     496        </tr>
     497        <tr>
     498          <td class="prompt">Trusted</td>
     499          <td>
     500            <input type="radio" name="agentTrusted" value=""
     501              onclick="trustedOnClick()">default (<span id="defaultTrusted"></span>)
     502            <input type="radio" name="agentTrusted" value="1"
     503              onclick="trustedOnClick()">yes
     504            <input type="radio" name="agentTrusted" value="0"
     505              onclick="trustedOnClick()">no
     506          </td>
     507        </tr>
     508        <tr>
     509          <td class="prompt">Priority boost</td>
     510          <td>
     511            <input type="text" name="agentPriorityBoost" class="text" size="12"
     512              maxlength="10" onkeypress="return Numbers.integerOnly(event)"
     513              onblur="priorityBoostOnBlur()">
     514          </td>
     515        </tr>
     516        </table>
     517        </div>
     518      </td>
     519      </tr>
     520      </table>
     521    </t:tab>
     522   
    168523    </t:tabcontrol>
    169524
  • trunk/www/admin/plugindefinitions/index.jsp

    r2629 r2631  
    3131  import="net.sf.basedb.core.Include"
    3232  import="net.sf.basedb.core.PluginDefinition"
     33  import="net.sf.basedb.core.JobAgent"
     34  import="net.sf.basedb.core.JobAgentSettings"
    3335  import="net.sf.basedb.core.ItemQuery"
    3436  import="net.sf.basedb.core.Permission"
     
    108110    // Display the edit page for a single item (should be opened in a popup)
    109111    ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
    110     redirect = editPage;
     112    forward = editPage;
    111113  }
    112114  else if ("NewItem".equals(cmd))
     
    143145    plugin.setMaxMemory(Values.parseBytes(request.getParameter("maxMemory"), null));
    144146    plugin.setTrusted(Values.getBoolean(request.getParameter("trusted")));
     147
     148    // Installed on job agents
     149    String[] removeAgents = Values.getString(request.getParameter("removeAgents")).split(",");
     150    for (int i = 0; i < removeAgents.length; ++i)
     151    {
     152      int agentId = Values.getInt(removeAgents[i], -1);
     153      if (agentId != -1)
     154      {
     155        JobAgent agent = JobAgent.getById(dc, agentId);
     156        JobAgentSettings settings = agent.getSettings(plugin, false);
     157        if (settings != null && settings.isInDatabase()) dc.deleteItem(settings);
     158      }
     159    }
     160
     161    String[] allAgents = Values.getString(request.getParameter("allAgents")).split(",");
     162    for (int i = 0; i < allAgents.length; ++i)
     163    {
     164      int agentId = Values.getInt(allAgents[i], -1);
     165      if (agentId != -1)
     166      {
     167        JobAgent agent = JobAgent.getById(dc, agentId);
     168        JobAgentSettings settings = agent.getSettings(plugin, true);
     169        if (!settings.isInDatabase())
     170        {
     171          dc.saveItem(settings);
     172        }
     173        else
     174        {
     175          dc.reattachItem(settings);
     176        }
     177        settings.setJarPath(Values.getStringOrNull(request.getParameter("jarPath."+agentId)));
     178        settings.setMaxMemory(Values.parseBytes(request.getParameter("maxMemory."+agentId), null));
     179        settings.setPriorityBoost(Values.getInt(request.getParameter("priorityBoost."+agentId)));
     180        String trusted = request.getParameter("trusted."+agentId);
     181        settings.setTrusted(trusted == null ? null : Values.getBoolean(trusted));
     182      }
     183    }
    145184   
    146185    dc.commit();
  • trunk/www/admin/plugindefinitions/view_plugin.jsp

    r2629 r2631  
    3434  import="net.sf.basedb.core.PluginDefinition"
    3535  import="net.sf.basedb.core.PluginConfiguration"
     36  import="net.sf.basedb.core.JobAgent"
     37  import="net.sf.basedb.core.JobAgentSettings"
    3638  import="net.sf.basedb.core.User"
    3739  import="net.sf.basedb.core.Include"
     
    4143  import="net.sf.basedb.core.plugin.GuiContext"
    4244  import="net.sf.basedb.core.plugin.Plugin"
     45  import="net.sf.basedb.core.query.Restrictions"
    4346  import="net.sf.basedb.core.query.Orders"
    4447  import="net.sf.basedb.core.query.Hql"
     
    8689
    8790  <base:page title="<%=title%>">
    88   <base:head scripts="tabcontrol.js" styles="toolbar.css,headertabcontrol.css,path.css,table.css">
     91  <base:head scripts="tabcontrol.js,table.js" styles="toolbar.css,headertabcontrol.css,path.css,table.css">
    8992    <script language="JavaScript">
    9093    function editItem()
     
    119122    {
    120123      Main.openPopup('../../common/plugin/index.jsp?ID=<%=ID%>&cmd=ConfigurePlugin&pluginconfiguration_id='+itemId, 'ConfigurePlugin', 800, 600);
     124    }
     125    function configureAgent(agentId)
     126    {
     127      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, true, '&jobagent_id='+agentId);
    121128    }
    122129    </script>
     
    290297          %>
    291298          <h4>Configurations</h4>
    292           There are no configurations of this type (or, you don't have permission to view them).
     299          There are no configurations for this plugin (or, you don't have permission to view them).
    293300          <%
    294301        }
     
    350357      %>
    351358
     359      <%
     360      ItemQuery<JobAgent> agentQuery = JobAgent.getQuery();
     361      agentQuery.include(Include.MINE, Include.SHARED, Include.OTHERS, Include.IN_PROJECT);
     362      agentQuery.order(Orders.asc(Hql.property("name")));
     363      agentQuery.join(Hql.innerJoin("plugins", "p"));
     364      agentQuery.restrict(Restrictions.eq(Hql.property("p", "pluginDefinition"), Hql.entity(plugin)));
     365      ItemResultList<JobAgent> agents = agentQuery.list(dc);
     366   
     367      if (agents.size() == 0)
     368      {
     369        %>
     370        <h4>Installed on job agents</h4>
     371        This plugin isn't installed on any job agents (or, you don't have permission to view them).
     372        <%
     373      }
     374      else
     375      {
     376        %>
     377        <h4 class="docked">Installed on job agents</h4>
     378        <tbl:table
     379          id="agents"
     380          clazz="itemlist"
     381          columns="all"
     382          >
     383        <tbl:columndef
     384          id="name"
     385          title="Name"
     386        />
     387        <tbl:columndef
     388          id="server"
     389          title="Server"
     390        />
     391        <tbl:columndef
     392          id="info"
     393          title="CPU/Memory"
     394        />
     395        <tbl:columndef
     396          id="jarPath"
     397          title="JAR path"
     398        />
     399        <tbl:columndef
     400          id="maxMemory"
     401          title="Max memory"
     402        />
     403        <tbl:columndef
     404          id="trusted"
     405          title="Trusted"
     406        />
     407        <tbl:columndef
     408          id="priorityBoost"
     409          title="Priority boost"
     410        />
     411        <tbl:columndef
     412          id="configure"
     413          title=""
     414        />
     415        <tbl:data>
     416          <tbl:columns>
     417          </tbl:columns>
     418          <tbl:rows>
     419          <%
     420          for (JobAgent agent : agents)
     421          {
     422            String server = agent.getServer();
     423            Integer port = agent.getPort();
     424            JobAgentSettings settings = agent.getSettings(plugin, false);
     425            Long maxMemory = settings.getEffectiveMaxMemory();
     426            String jarPath = settings.getEffectiveJarPath();
     427            %>
     428            <tbl:row>
     429              <tbl:cell column="name"><%=Base.getLinkedName(ID, agent, false, true)%></tbl:cell>
     430              <tbl:cell column="server"><%=server == null || port == null ? "" : server + ":" + port%></tbl:cell>
     431              <tbl:cell column="info">
     432                CPU usage: <%=agent.getCpuUsage() == null ? "<i>- unknown -</i>" : agent.getCpuUsage()+"%" %><br>
     433                Total memory: <%=agent.getTotalMemory() == null ? "<i>- unknown -</i>" : Values.formatBytes(agent.getTotalMemory()) %><br>
     434                Used memory: <%=agent.getUsedMemory() == null ? "<i>- unknown -</i>" : Values.formatBytes(agent.getUsedMemory()) %>
     435              </tbl:cell>
     436              <tbl:cell column="jarPath"><%=jarPath == null ? "<i>- internal -</i>" : HTML.encodeTags(jarPath)%></tbl:cell>
     437              <tbl:cell column="maxMemory"><%=maxMemory == null ? "<i>- not specified -</i>" : Values.formatBytes(maxMemory)%></tbl:cell>
     438              <tbl:cell column="trusted"><%=settings.isEffectivelyTrusted()%></tbl:cell>
     439              <tbl:cell column="priorityBoost"><%=settings.getPriorityBoost()%></tbl:cell>
     440              <tbl:cell column="configure">
     441              <%
     442              if (agent.hasPermission(Permission.WRITE))
     443              {
     444                %>
     445                <base:icon image="runplugin.gif"
     446                  onclick="<%="configureAgent(" + agent.getId() + ")"%>"
     447                  tooltip="Configure the settings for this plugin on the job agent "/>
     448                <%
     449              }
     450              %>
     451              </tbl:cell>
     452            </tbl:row>
     453            <%
     454          }
     455          %>
     456          </tbl:rows>
     457        </tbl:data>
     458        </tbl:table>
     459        <%
     460      }
     461      %>
     462
    352463    </div>
    353464      </t:tab>
  • trunk/www/include/scripts/main.js

    r2629 r2631  
    371371    this.controllers['NEWS'] = { url:'admin/news/index.jsp', width:540, height:400 };
    372372    this.controllers['PLUGINCONFIGURATION'] = { url:'admin/pluginconfigurations/index.jsp', width:500, height:340 };
    373     this.controllers['PLUGINDEFINITION'] = { url:'admin/plugindefinitions/index.jsp', width:500, height:340 };
    374     this.controllers['PLUGINDEFINITION'] = { url:'admin/plugindefinitions/index.jsp', width:500, height:340 };
     373    this.controllers['PLUGINDEFINITION'] = { url:'admin/plugindefinitions/index.jsp', width:700, height:400 };
    375374    this.controllers['JOBAGENT'] = { url:'admin/jobagents/index.jsp', width:700, height:400 };
    376375    this.controllers['PROTOCOL'] = { url:'admin/protocols/index.jsp', width:500, height:340 };
Note: See TracChangeset for help on using the changeset viewer.