<?php
/*******************************************************************************
 * Copyright (c) 2014 Eclipse Foundation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Christopher Guindon (Eclipse Foundation) - Initial implementation
 *******************************************************************************/
?>

<!-- Main content area -->
<div id="midcolumn">

    <h1 id="jemo-admin"><a class="anchor" href="#jemo-admin"></a>1. Jemo Administration</h1>
    <p>Jemo offers a set of functionalities only to users with admin permissions at
      <a href="http://localhost/jemo/admin" target="_blank">http://localhost/jemo/admin</a>
      (change 'localhost' if you don't run Jemo locally.) The user is prompted to provide credentials and, if authorised,
      he is provided with two options, the <code>Admin Panel</code> or the <code>CI/CD</code> option.
    </p>

    <h2>Admin Panel</h2>
    <p>
    The admin panel displays the full list of plugins that are currently installed on the Jemo cluster.
    Notice, that you can install more than one versions of the same plugin at the same time. The jemo cluster will run both of them.
    This panel gives the administrator full visibility and control on what plugin versions run at each time.
    </p>

    <p>
    For each plugin version, the <code>id</code>, the <code>name</code> and the <code>version</code> are displayed
    in a row and if you expand the arrow at the right side
    the list of modules comprising the plugin is displayed. Two buttons are provided for each plugin version,
    one that switches between <code>DEACTIVATE</code>/<code>ACTIVATE</code> when the plugin is active/inactive respectively and
    another labeled with <code>DELETE</code> that deletes the plugin.
    Deactivating a plugin means that the plugin stops running on the Jemo cluster, but the relevant files, i.e. the jar,
    remain stored on the cloud provider storage for future use in case this plugin version is re-activated.
    On the other hand, deleting a plugin version deletes all the relevant files from the cloud provider storage.
    </p>

    <h2>CI/CD</h2>
    The CI/CD functionality offers the Jemo administrator the ability to deploy Jemo plugins whose
    code is hosted on a <a href="https://github.com/" target="_blank">Github</a> repository.
    To use this functionality, make sure you have <a href="https://git-scm.com/" target="_blank">git</a> and
    <a href="https://maven.apache.org/" target="_blank">mvn</a> installed and available on your Path. Run:
    <pre> > git --version
 > mvn --version</pre>

    <p>You will be redirected to a form asking you to provide the following parameters.</p>

    <table class="tableblock frame-all grid-all stretch">
        <caption class="title">Table 1. CI/CD patterns</caption>
        <colgroup>
            <col style="width: 10%;">
            <col style="width: 15%;">
            <col style="width: 20%;">
            <col style="width: 55%;">
        </colgroup>
        <thead>
        <tr>
            <th class="tableblock halign-left valign-top">Parameter</th>
            <th class="tableblock halign-left valign-top">Required/Optional</th>
            <th class="tableblock halign-left valign-top">Example</th>
            <th class="tableblock halign-left valign-top">Description</th>
        </tr>
        </thead>
        <tbody>
        <tr>
            <td class="tableblock halign-left valign-top"><p class="tableblock"><code>repoUrl</code></p></td>
            <td class="tableblock halign-left valign-top"><p class="tableblock"><code>M</code></p></td>
            <td class="tableblock halign-left valign-top"><p class="tableblock">https://github.com/ytheohar/jemo.git</p></td>
            <td class="tableblock halign-left valign-top"><p class="tableblock">The https url to clone from</p></td>
        </tr>
        <tr>
            <td class="tableblock halign-left valign-top"><p class="tableblock"><code>branch</code></p></td>
            <td class="tableblock halign-left valign-top"><p class="tableblock"><code>O</code> - the default is "master"</p></td>
            <td class="tableblock halign-left valign-top"><p class="tableblock">monitor-plugins-improvements</p></td>
            <td class="tableblock halign-left valign-top"><p class="tableblock">the branch of the repository</p></td>
        </tr>
        <tr>
            <td class="tableblock halign-left valign-top"><p class="tableblock"><code>subDir</code></p></td>
            <td class="tableblock halign-left valign-top"><p class="tableblock"><code>O</code> - the default is "", i.e. the root folder</p></td>
            <td class="tableblock halign-left valign-top"><p class="tableblock">demos/jemo-trader-app</p></td>
            <td class="tableblock halign-left valign-top"><p class="tableblock">The sub directory with the repository where the code is located</p></td>
        </tr>
        <tr>
            <td class="tableblock halign-left valign-top"><p class="tableblock"><code>pluginId</code></p></td>
            <td class="tableblock halign-left valign-top"><p class="tableblock"><code>M</code></p></td>
            <td class="tableblock halign-left valign-top"><p class="tableblock">1</p></td>
            <td class="tableblock halign-left valign-top"><p class="tableblock">The plugin id</p></td>
        </tr>
        </tbody>
    </table>

    <p>When your click the SUBMIT button, Jemo starts a process where it runs the following commands:
      <pre> > git clone --single-branch --branch monitor-plugins-improvements &lt;repoUrl&gt; cicd/1
 > mvn deploy -f cicd/1/demos/jemo-trader-app/pom.xml -Djemo.username=&lt;JEMO_ADMIN_USER_NAME&gt; -Djemo.password=&lt;JEMO_ADMIN_PASSWORD&gt; -Djemo.id=1 -Djemo.endpoint=http://localhost</pre>
      The output of these commands is displayed on your screen, along with a message at the top notifying you
      about the status of the deployment (success or failure).
      You can browse back on your browser and select the <code>Admin Panel</code> option
      to verify the plugin version was deployed and runs on the Jemo cluster. Notice that the plugin version
      is determined by the artifact version defined in the pom file of the plugin repository.
    </p>


</div>
<!-- ./end  #midcolumn -->

<!-- Start of the right column -->
<!-- ./end  #rightcolumn -->
