% 
% Licensed to the Apache Software Foundation (ASF) under one
% or more contributor license agreements.  See the NOTICE file
% distributed with this work for additional information
% regarding copyright ownership.  The ASF licenses this file
% to you under the Apache License, Version 2.0 (the
% "License"); you may not use this file except in compliance
% with the License.  You may obtain a copy of the License at
% 
%   http://www.apache.org/licenses/LICENSE-2.0
% 
% Unless required by applicable law or agreed to in writing,
% software distributed under the License is distributed on an
% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
% KIND, either express or implied.  See the License for the
% specific language governing permissions and limitations
% under the License.
% 
%%
%% ducc_monitor is currently unsupported. Perhaps it will come back after
%% release 1.  So the doc skeleton is preserved.
%%

% Create well-known link to this spot for HTML version
\ifpdf
\else
\HCode{<a name='DUCC_CLI_MONITOR'></a>}
\fi
    \section{ducc\_monitor}

    \paragraph{Description:}
    
    It may be desired to monitor a job's progress after it has been submitted. The monitor CLI 
    connects to the DUCC message flow and provides job status as it progresses including state 
    changes, error counts, and number of work items processed. 
    
    \paragraph{Usage:}
    \begin{description}
    \item[Script wrapper] \ducchome/bin/ducc-monitor {\em options}
    \item[Java Main]      java -cp \ducchome/lib/uima-ducc-cli.jar org.apache.uima.ducc.cli.DuccJobMonitor {\em options}
    \end{description}

    \paragraph{Options:}
    \begin{description}
        \item[$--$debug ]          
          Prints internal debugging information, intended for DUCC developers or extended problem determination.
        \item[$--$id {[jobid]}]
          The ID is the id of the job to monitor. (Required)
        \item[$--$help]
          Prints the usage text to the console. 
        \item[$--$quiet] 
          Disable CLI informational miessages;
        \item[--timestamp]
          Enables timestamps on the monitor messages.
     \end{description}
        
    \paragraph{Notes:}
