﻿<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="scheduler_job_documentation.xsl"?>
<description xmlns="http://www.sos-berlin.com/schema/scheduler_job_documentation_v1.0" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sos-berlin.com/schema/scheduler_job_documentation_v1.0 http://www.sos-berlin.com/schema/scheduler_job_documentation_v1.0.xsd">

  <job name  = "JobSchedulerMySQLReplicationMonitor"
       title = "Check MySQL replication status"
       order = "no"
       tasks = "1">
    <script language   = "java"
            java_class = "sos.scheduler.mysql.JobSchedulerReplicationMonitor"
            resource   = "1"/>
  </job>

  <releases>
    <release id="1.0" created="2005-09-20" modified="2005-09-20">
      <title>Version 1.0</title>
      <author name="Andreas Püschel" email="andreas.pueschel@sos-berlin.com"/>
      <note language="de"><div xmlns="http://www.w3.org/1999/xhtml">Initiale Auslieferung</div></note>
      <note language="en"><div xmlns="http://www.w3.org/1999/xhtml">Initial Release</div></note>
      <changes language="de"><div xmlns="http://www.w3.org/1999/xhtml">Implementierung mit SOSConnection.</div></changes>
      <changes language="en"><div xmlns="http://www.w3.org/1999/xhtml">Implementation with SOSConnection.</div></changes>
    </release>
  </releases>

  <resources>
    <file os="all" type="java" file="sos.scheduler.jar" id="1">
      <note language="de"><div xmlns="http://www.w3.org/1999/xhtml">Standard-Job der Auslieferung</div></note>
      <note language="en"><div xmlns="http://www.w3.org/1999/xhtml">Standard job in distribution</div></note>
    </file>
    <file os="all" type="java" file="sos.spooler.jar" id="2">
      <note language="de"><div xmlns="http://www.w3.org/1999/xhtml">Klasse Job_Impl</div></note>
      <note language="en"><div xmlns="http://www.w3.org/1999/xhtml">Class Job_Impl</div></note>
    </file>
    <file os="all" type="java" file="sos.util.jar" id="3">
      <note language="de"><div xmlns="http://www.w3.org/1999/xhtml">Klasse SOSLogger</div></note>
      <note language="en"><div xmlns="http://www.w3.org/1999/xhtml">Class SOSLogger</div></note>
    </file>
    <file os="all" type="java" file="sos.connection.jar" id="4">
      <note language="de"><div xmlns="http://www.w3.org/1999/xhtml">Klasse SOSMySQLConnection</div></note>
      <note language="en"><div xmlns="http://www.w3.org/1999/xhtml">Class SOSMySQLConnection</div></note>
    </file>
    <file os="all" type="java" file="sos.settings.jar" id="5">
      <note language="de"><div xmlns="http://www.w3.org/1999/xhtml">Klasse SOSProfileSettings</div></note>
      <note language="en"><div xmlns="http://www.w3.org/1999/xhtml">Class SOSProfileSettings</div></note>
    </file>
    <file os="all" type="java" file="mysql*.jar" id="6">
      <note language="de"><div xmlns="http://www.w3.org/1999/xhtml">MySQL JDBC Treiber</div></note>
      <note language="en"><div xmlns="http://www.w3.org/1999/xhtml">MySQL JDBC Driver</div></note>
    </file>
    <file os="all" type="other" file="replication_master_settings.ini" id="replication_master_settings">
      <note language="de">
      	<div xmlns="http://www.w3.org/1999/xhtml">
          Die Konfigurationsdatei für Zugangsdaten der Master-Datenbank
 				</div>
      </note>
      <note language="en">
      	<div xmlns="http://www.w3.org/1999/xhtml">
      	  Configuration file for master database access
				</div>
			</note>
    </file>
    <file os="all" type="other" file="replication_slave_settings.ini" id="replication_slave_settings">
      <note language="de">
      	<div xmlns="http://www.w3.org/1999/xhtml">
          Die Konfigurationsdatei für Zugangsdaten der Slave-Datenbank
 				</div>
      </note>
      <note language="en">
      	<div xmlns="http://www.w3.org/1999/xhtml">
      	  Configuration file for slave database access
				</div>
			</note>
    </file>

    <database required="true">
      <resource name="master database" type="other">
        <note language="de">
	      	<div xmlns="http://www.w3.org/1999/xhtml">
  	        Der Job verbindet sich mit einer Master-Datenbank, um den Replikationsstatus zu prüfen.
    	      Die Datenbank muss gestartet und verfügbar sein.
    	     </div>
        </note>
        <note language="en">
	      	<div xmlns="http://www.w3.org/1999/xhtml">
  	        This jobs connects to a master database in order to check the master status.
    	      The master database must be up and running.
    	    </div>
        </note>
      </resource>
      <resource name="slave database" type="other">
        <note language="de">
	      	<div xmlns="http://www.w3.org/1999/xhtml">
            Der Job verbindet sich mit einer oder mehreren Slave-Datenbanken, um den Replikationsstatus zu prüfen.
            Die Datenbanken müssen gestartet und verfügbar sein.
          </div>
        </note>
        <note language="en">
	      	<div xmlns="http://www.w3.org/1999/xhtml">
            This jobs connects to one or more salve databases in order to check the slave status.
            The slave databases must be up and running.
          </div>
        </note>
      </resource>
    </database>
  </resources>

  <configuration>
    <settings>
      <profile name="default">
        <note language="de">
          <div xmlns="http://www.w3.org/1999/xhtml">
            Beispiel für Parameterangaben in der Konfigurationsdatei <code>factory.ini</code>:
            <br/><br/>
            <code>
              [job mysql_replication_monitor]
              <br/>
              master_config &#160;&#160;&#160;&#160;&#160;&#160; = config/replication_master_settings.ini
              <br/>
              slave_config_1 &#160;&#160;&#160;&#160;&#160; = config/replication_slave_1_settings.ini
              <br/>
              slave_config_2 &#160;&#160;&#160;&#160;&#160; = config/replication_slave_2_settings.ini
              <br/>
              ;delay processing after error: &lt;number of errors&gt;:&lt;delay interval in seconds or stop&gt;;...
              <br/>
              delay_after_error &#160;&#160; = 1:60;5:600;10:1800;20:3600;60:stop
            </code>
          </div>
        </note>

        <note language="en">
          <div xmlns="http://www.w3.org/1999/xhtml">
            Example for parameters in the configuration file <code>factory.ini</code>:
            <br/><br/>
            <code>
              [job mysql_replication_monitor]
              <br/>
              master_config &#160;&#160;&#160;&#160;&#160;&#160; = config/replication_master_settings.ini
              <br/>
              slave_config_1 &#160;&#160;&#160;&#160;&#160; = config/replication_slave_1_settings.ini
              <br/>
              slave_config_2 &#160;&#160;&#160;&#160;&#160; = config/replication_slave_2_settings.ini
              <br/>
              ;delay processing after error: &lt;number of errors&gt;:&lt;delay interval in seconds or stop&gt;;...
              <br/>
              delay_after_error &#160;&#160; = 1:60;5:600;10:1800;20:3600;60:stop
            </code>
          </div>
        </note>

        <section name="Job Section">
      		<setting name="master_config" default_value="" required="true">
        		<note language="de">
          		<div xmlns="http://www.w3.org/1999/xhtml">
            		Der Parameter gibt den Pfad und Namen der Konfigurationsdatei mit Zugangsdaten für die Master-Datenbank an.
      	        Die Konfigurationsdatei hat folgenden beispielhaften Inhalt:
          			<br/><br/>
          			<code>
			            class &#160;&#160;&#160;&#160; = SOSMySQLConnection
      			      <br/>
            			driver &#160;&#160;&#160; = com.mysql.jdbc.Driver
			            <br/>
      			      url &#160;&#160;&#160;&#160;&#160;&#160; = jdbc:mysql://localhost:3306/scheduler
            			<br/>
			            user &#160;&#160;&#160;&#160;&#160; = <em>scheduler</em>
      			      <br/>
            			password &#160; = <em>scheduler</em>
			          </code>
      				  <br/><br/>
			      	  Die Bedeutung der Werte im einzelnen:
			      	  <br/><br/>
      				  <ul>
      	    			<li>
			      	      class: Name der Datenbankverbindungsklasse (aus <code>sos.connection.jar</code>) ist konstant SOSMySQLConnection
      				    </li>
      	    			<li>
			      	      driver: Name der Datenbanktreiberklasse (aus <code>mysql*.jar</code>) ist abhängig vom gewählten Treiber
      				    </li>
      	    			<li>
			      	      url: URL für den Verbindungsaufbau mit den Teilen jdbc:mysql://<em>host:port/database</em>
      				    </li>
      	    			<li>
			      	      user: Kennung des Datenbankbenutzers, der Benutzer muss über das Recht REPLICATION verfügen
      				    </li>
      	    			<li>
			      	      password: Kennwort des Datenbankbenutzers
      				    </li>
      	  			</ul>
							</div>
						</note>
        		<note language="en">
          		<div xmlns="http://www.w3.org/1999/xhtml">
            		This parameter specifies the path and name of the configuration file for master database access.
            		The content of this configuration file should look like this:
          			<br/><br/>
          			<code>
			            class &#160;&#160;&#160;&#160; = SOSMySQLConnection
      			      <br/>
            			driver &#160;&#160;&#160; = com.mysql.jdbc.Driver
			            <br/>
      			      url &#160;&#160;&#160;&#160;&#160;&#160; = jdbc:mysql://localhost:3306/scheduler
            			<br/>
			            user &#160;&#160;&#160;&#160;&#160; = <em>scheduler</em>
      			      <br/>
            			password &#160; = <em>scheduler</em>
			          </code>
      				  <br/><br/>
			      	  The meaning of the values in this example is:
			      	  <br/><br/>
      				  <ul>
      	    			<li>
			      	      class: name of a database connection class (from <code>sos.connection.jar</code>) is always SOSMySQLConnection
      				    </li>
      	    			<li>
			      	      driver: name of database driver class (from <code>mysql*.jar</code>) depends on the database driver installed
      				    </li>
      	    			<li>
			      	      url: URL for database connection with the parts jdbc:mysql://<em>host:port/database</em>
      				    </li>
      	    			<li>
			      	      user: database user account, this user must have been granted the REPLICATION permission
      				    </li>
      	    			<li>
			      	      password: password of the database user account
      				    </li>
      	  			</ul>
							</div>
						</note>
					</setting>
      		<setting name="slave_config_n" default_value="" required="true">
        		<note language="de">
          		<div xmlns="http://www.w3.org/1999/xhtml">
            		Der Parameter gibt den Pfad und Namen der Konfigurationsdatei mit Zugangsdaten für die Slave-Datenbank an.
            		Der Parameter kann mehrfach mit fortlaufend aufsteigenden Nummern <code>slave_config_<em>1</em>,
            		slave_config_<em>2</em></code> etc. angegeben werden, um die Replikation mehrerer Slave-Datenbanken zu überwachen.
            		<br/><br/>
            		Der Aufbau der Konfigurationsdatei muss dem beim Parameter <em>master_config</em> beschriebenen Beispiel folgen.
							</div>
						</note>
        		<note language="en">
          		<div xmlns="http://www.w3.org/1999/xhtml">
            		This parameter specifies the path and name of the configuration file for slave database access.
            	  Multiple entries can be made here to monitor the replication of multiple slave databases.
            	  These entries must then be consecutively numbered - for example:
            	  <code>slave_config_<em>1</em>, slave_config_<em>2</em></code> etc.
            	  <br/><br/>
            	  The content of this configuration file should be created in the same way as described above 
            	  for the <em>master_config</em> parameter.
							</div>
						</note>
					</setting>
      		<setting name="delay_after_error" default_value="1:60;5:600;10:1800;20:3600;100:stop" required="false">
        		<note language="de">
          		<div xmlns="http://www.w3.org/1999/xhtml">
                Mit dem Parameter werden Wiederholungsintervalle für Fehlerfälle gesetzt (siehe obiges Beispiel):
                <br/><br/>
                <code>delay_after_error = 1:60;5:600;10:1800;20:3600;60:stop</code>
                <br/><br/>
                <em>delay_after_error</em> ist wie folgt zu interpretieren:
                 nach dem ersten Fehler je 60s warten, ab dem fünften Fehler
                 je 600s warten ..., nach dem 60. Fehler den Job stoppen.
							</div>
						</note>
        		<note language="en">
          		<div xmlns="http://www.w3.org/1999/xhtml">
                Wait intervals in case of errors (see above example):
                <br/><br/>
                <code>delay_after_error = 1:60;5:600;10:1800;20:3600;60:stop</code>
                <br/><br/>
                The meaning of this example setting is: wait 60s per retry after the first error,
                wait 600s per retry after the fifth error ..., stop the job after 60 errors.
							</div>
						</note>
					</setting>
				</section>
      </profile>
    </settings>
  </configuration>

  <documentation language="de">
    <div xmlns="http://www.w3.org/1999/xhtml">
			Dieser Job überwacht die Replikation einer MySQL Datenbank von einem Master und beliebig vielen Slaves.
			Die Datenbankreplikation wird von MySQL selbst durchgeführt, jedoch gibt es keine Benachrichtigung
			über Erfolg oder Misserfolg. Mit Hilfe dieses Jobs werden Datenbankadministratoren automatisch bei
			Fehlern in der MySQL-Replikation benachrichtigt.
    </div>
  </documentation>

  <documentation language="en">
    <div xmlns="http://www.w3.org/1999/xhtml">
      This job supervises the replication of a MySQL database using one master and an arbitrary number of slaves.
      The replication is carried out by the MySQL server itself which does not providefeedback as to whether 
      replication was successful or not.
      This job, however, causes database administrators to be notified upon failure of the replication.
    </div>
  </documentation>

</description>