]> SALOME platform Git repositories - tools/sat.git/commitdiff
Salome HOME
Merge branch 'cvw/dec21'
authorcrouzet <nicolas.crouzet@cea.fr>
Fri, 8 Apr 2022 09:43:29 +0000 (11:43 +0200)
committercrouzet <nicolas.crouzet@cea.fr>
Fri, 8 Apr 2022 09:43:29 +0000 (11:43 +0200)
12 files changed:
commands/log.py
commands/source.py
src/ElementTree.py
src/debug.py
src/system.py
src/xmlManager.py
src/xsl/command.xsl
src/xsl/hat.xsl
src/xsl/jobs_board_report.xsl
src/xsl/jobs_global_report.xsl
src/xsl/test.xsl
src/xsl/test_history.xsl

index e2c190286d34ea16b72cd2656fe3f9f5e935a3f4..22a788570fc8fa85895c4ea82891a55e1b865ba6 100644 (file)
@@ -347,7 +347,7 @@ def run(args, runner, logger):
     # open the hat xml in the user editor
     if not options.no_browser:
         logger.write(_("\nOpening the hat log file %s\n" % xmlHatFilePath), 3)
-        src.system.show_in_editor(runner.cfg.USER.browser, xmlHatFilePath, logger)
+        src.system.show_in_webbrowser(runner.cfg.USER.browser, xmlHatFilePath, logger)
     else:
         logger.write("\nHat log File is %s\n" % xmlHatFilePath, 3)
     return 0
index 2b078cda46c5360f7127a3fe5764c262d723cbd0..0740ba125b90b3e9b43bea86b8920025beaa47c9 100644 (file)
@@ -120,8 +120,8 @@ def get_source_from_git(config,
     git_options= ''
     if "git_options" in product_info.git_info:
         git_options = product_info.git_info.git_options
-    sub_dir = None
 
+    sub_dir = None
     # what do we do with git tree structure and history
     if is_dev and "sub_dir" in product_info.git_info:
         logger.error("dev mode for product is incompatible with 'sub_dir' option")
@@ -130,10 +130,10 @@ def get_source_from_git(config,
     if not is_dev and "sub_dir" in product_info.git_info:
         sub_dir = product_info.git_info.sub_dir
 
-    if sub_dir  is None:
+    if sub_dir is None:
       # Call the system function that do the extraction in git mode
       retcode = src.system.git_extract(repo_git,
-                                   product_info.git_info.tag,git_options,
+                                   product_info.git_info.tag, git_options,
                                    source_dir, logger, environ)
     else:
       # Call the system function that do the extraction of a sub_dir in git mode
@@ -376,7 +376,7 @@ def get_product_sources(config,
 
     if product_info.get_source == "git":
         return get_source_from_git(config, product_info, source_dir, logger, pad, 
-                                    is_dev,env_appli)
+                                    is_dev, env_appli)
 
     if product_info.get_source == "archive":
         return get_source_from_archive(config, product_info, source_dir, logger)
@@ -386,20 +386,13 @@ def get_product_sources(config,
     
     if product_info.get_source == "cvs":
         cvs_user = config.USER.cvs_user
-        return get_source_from_cvs(cvs_user, 
-                                    product_info, 
-                                    source_dir, 
-                                    checkout, 
-                                    logger,
-                                    pad,
-                                    env_appli)
+        return get_source_from_cvs(cvs_user, product_info, source_dir, 
+                                    checkout, logger, pad, env_appli)
 
     if product_info.get_source == "svn":
         svn_user = config.USER.svn_user
         return get_source_from_svn(svn_user, product_info, source_dir, 
-                                    checkout,
-                                    logger,
-                                    env_appli)
+                                    checkout, logger, env_appli)
 
     if product_info.get_source == "native":
         # for native products we check the corresponding system packages are installed
@@ -487,12 +480,8 @@ def get_all_product_sources(config, products, logger):
             continue
 
         # Call to the function that get the sources for one product
-        retcode = get_product_sources(config, 
-                                     product_info, 
-                                     is_dev, 
-                                     source_dir,
-                                     logger, 
-                                     max_product_name_len, 
+        retcode = get_product_sources(config, product_info, is_dev, 
+                                     source_dir, logger, max_product_name_len, 
                                      checkout=False)
         
         '''
@@ -583,9 +572,7 @@ def run(args, runner, logger):
     products_infos = src.product.get_products_list(options, runner.cfg, logger)
     
     # Call to the function that gets all the sources
-    good_result, results = get_all_product_sources(runner.cfg, 
-                                                  products_infos,
-                                                  logger)
+    good_result, results = get_all_product_sources(runner.cfg, products_infos, logger)
 
     # Display the results (how much passed, how much failed, etc...)
     status = src.OK_STATUS
index 8b1b92bf8f5c17bd0aa330263cbf4784e54ef3bb..b871200f6461694aa6ff92d2fa83ab6bf8576130 100644 (file)
@@ -13,14 +13,14 @@ _versionPython = sys.version_info[0]
 if _versionPython < 3:
   # python2 previous historic mode
   import src.ElementTreePython2 as etree
-  DBG.write("ElementTree Python2", etree.__file__, DBG.isDeveloper())
+  DBG.write("ElementTree Python2 %s" % etree.VERSION, etree.__file__, DBG.isDeveloper())
   tostring = etree.tostring
 
 else:
   # python3 mode
   # import xml.etree.ElementTree as etree # native version
   import src.ElementTreePython3 as etree # VERSION 1.3.0 plus _serialize 'pretty_xml'
-  DBG.write("ElementTree Python3 VERSION 1.3.0", etree.__file__, DBG.isDeveloper())
+  DBG.write("ElementTree Python3 %s" % etree.VERSION, etree.__file__, DBG.isDeveloper())
 
   def tostring(node, encoding='utf-8'):
     """
index 1fbdcd47b39827ac27eed8a147492be0b651dc7d..330fb6df37c33468237c5c49f03f4e04528161b4 100755 (executable)
@@ -72,14 +72,17 @@ except ImportError:
 
 _debug = [False] #support push/pop for temporary activate debug outputs
 
-# wambeke is christian at home
-_developers = ["xchristian", "xwambeke"]
-
 
 def isDeveloper():
-    """if you are a developer, sometimes you want verbose traces etc."""
-    res = src.architecture.get_user()  in _developers
-    return res
+    """
+    if you are a developer, sometimes you want verbose traces unconditionally
+    export SAT_DEVELOPER_MODE=1 before launch sat command to do that
+    """
+    res = os.getenv("SAT_DEVELOPER_MODE", "0")
+    if res in "YES yes 1 Y y".split():
+        return True
+    else:
+        return False
 
 def indent(text, amount=2, ch=' '):
     """indent multi lines message"""
@@ -148,7 +151,7 @@ def format_exception(msg, limit=None, trace=None):
   """
   Format a stack trace and the exception information.
   as traceback.format_exception(), without color
-  with traceback only if (_debug) or (DBG._user in DBG._developers)
+  with traceback only if (_debug) or (DBG.isDeveloper())
   """
   etype, value, tb = sys.exc_info()
   res = msg
index c54452b4343efdadb1742d26ce59687418b4785d..842fb48bfdb8b6038a65d62c22bf012f33447b1d 100644 (file)
@@ -22,9 +22,12 @@ like open a browser or an editor, or call a git command
 '''
 
 import os
-import subprocess
+import subprocess as SP
 import time
 import tarfile
+import psutil
+import time
 
 import debug as DBG
 import utilsSat as UTS
@@ -49,21 +52,61 @@ def show_in_editor(editor, filePath, logger):
         # launch cmd using subprocess.Popen
         cmd = editor % filePath
         logger.write('Launched command:\n' + cmd + '\n', 5)
-        p = subprocess.Popen(cmd, shell=True)
+        p = SP.Popen(cmd, shell=True)
         p.communicate()
     except:
         logger.write(printcolors.printcError(_("Unable to edit file %s\n") 
                                              % filePath), 1)
 
+def show_in_webbrowser(editor, filePath, logger):
+    '''open filePath using web browser firefox, chromium etc...
+    if file is xml, previous http sever is done before to fix new security problems
+    
+    :param editor str: The web browser to use.
+    :param filePath str: The path to the file to open.
+    '''
+    # default editor is firefox
+    if editor is None or len(editor) == 0:
+        editor = 'firefox'
+    
+    path, namefile = os.path.split(filePath)
+    basefile, ext = os.path.splitext(namefile)
+
+    # previouly http.server 8765/6/7... kill ... or not ? TODO wait and see REX
+    port = os.getenv('SAT_PORT_LOG', '8765')
+    for proc in psutil.process_iter():
+      # help(proc)
+      cmdline = " ".join(proc.cmdline())
+      if "python3 -m http.server %s" % port in cmdline:
+        print("kill previous process '%s'" % cmdline)
+        proc.kill()  # TODO may be not owner ? -> change 8766/7/8... as SAT_PORT_LOG
+        
+    cmd = """
+set -x
+cd %(path)s
+python3 -m http.server %(port)s &> /dev/null &
+%(editor)s http://localhost:%(port)s/%(namefile)s
+""" % {"path": path, "editor": editor, "namefile": namefile, 'port': port}
+
+    # print("show_in_webbrowser:\n%s" % cmd)
+    
+    try:
+        # launch cmd using subprocess.Popen
+        logger.write('Launched command:\n%s\n' % cmd, 5)
+        p = SP.Popen(cmd, shell=True, stdout=SP.PIPE, stderr=SP.STDOUT)
+        res_out, _ = p.communicate()   # _ = None as stderr=SP.STDOUT
+        # print("Launched command stdout:\n%s" % res_out)
+    except Exception as e:
+        logger.write(printcolors.printcError(_("Unable to display file %s\n%s\n") 
+                                             % (filePath, e)), 1)
+    
+
 def git_describe(repo_path):
     '''Use git describe --tags command to return tag description of the git repository"
     :param repo_path str: The git repository to describe
     '''
     git_cmd="cd %s;git describe --tags" % repo_path
-    p = subprocess.Popen(git_cmd, shell=True,
-                    stdin=subprocess.PIPE,
-                    stdout=subprocess.PIPE,
-                    stderr=subprocess.PIPE)
+    p = SP.Popen(git_cmd, shell=True, stdin=SP.PIPE, stdout=SP.PIPE, stderr=SP.PIPE)
     p.wait()
     if p.returncode != 0:
         return False
@@ -77,7 +120,7 @@ def git_describe(repo_path):
 
 def git_extract(from_what, tag, git_options, where, logger, environment=None):
   '''Extracts sources from a git repository.
-
+87
   :param from_what str: The remote git repository.
   :param tag str: The tag.
   :param git_options str: git options
@@ -99,7 +142,9 @@ def git_extract(from_what, tag, git_options, where, logger, environment=None):
 set -x
 git clone %(git_options)s %(remote)s %(where)s
 res=$?
-if [ $res -eq 0 ]; then   touch -d "$(git --git-dir=%(where_git)s  log -1 --format=date_format)" %(where)s;fi
+if [ $res -eq 0 ]; then
+  touch -d "$(git --git-dir=%(where_git)s  log -1 --format=date_format)" %(where)s
+fi
 exit $res
 """
     cmd = cmd % {'git_options': git_options, 'remote': from_what, 'tag': tag, 'where': str(where), 'where_git': where_git}
@@ -116,8 +161,10 @@ rm -rf %(where)s
 git clone %(git_options)s %(remote)s %(where)s && \
 git --git-dir=%(where_git)s --work-tree=%(where)s checkout %(tag)s
 res=$?
-git --git-dir=%(where_git)s status|grep HEAD
-if [ $res -eq 0 -a $? -ne 0 ]; then   touch -d "$(git --git-dir=%(where_git)s  log -1 --format=date_format)" %(where)s;fi
+git --git-dir=%(where_git)s status | grep HEAD
+if [ $res -eq 0 -a $? -ne 0 ]; then
+  touch -d "$(git --git-dir=%(where_git)s  log -1 --format=date_format)" %(where)s
+fi
 exit $res
 """
     cmd = cmd % {'git_options': git_options,
@@ -127,7 +174,7 @@ exit $res
                  'where_git': where_git}
 
 
-  cmd=cmd.replace('date_format','"%ai"')
+  cmd=cmd.replace('date_format', '"%ai"')
   logger.logTxtFile.write("\n" + cmd + "\n")
   logger.logTxtFile.flush()
 
@@ -279,12 +326,11 @@ def cvs_extract(protocol, user, server, base, tag, product, where,
 
     logger.logTxtFile.write("\n" + command + "\n")
     logger.logTxtFile.flush()        
-    res = subprocess.call(command,
-                          cwd=str(where.dir()),
-                          env=environment.environ.environ,
-                          shell=True,
-                          stdout=logger.logTxtFile,
-                          stderr=subprocess.STDOUT)
+    res = SP.call(command, cwd=str(where.dir()),
+                           env=environment.environ.environ,
+                           shell=True,
+                           stdout=logger.logTxtFile,
+                           stderr=SP.STDOUT)
     return (res == 0)
 
 def svn_extract(user,
@@ -331,12 +377,11 @@ def svn_extract(user,
     logger.write(command + "\n", 5)
     logger.logTxtFile.write("\n" + command + "\n")
     logger.logTxtFile.flush()
-    res = subprocess.call(command,
-                          cwd=str(where.dir()),
-                          env=environment.environ.environ,
-                          shell=True,
-                          stdout=logger.logTxtFile,
-                          stderr=subprocess.STDOUT)
+    res = SP.call(command, cwd=str(where.dir()),
+                           env=environment.environ.environ,
+                           shell=True,
+                           stdout=logger.logTxtFile,
+                           stderr=SP.STDOUT)
     return (res == 0)
 
 def get_pkg_check_cmd(dist_name):
@@ -354,12 +399,12 @@ def get_pkg_check_cmd(dist_name):
     cmd_which_apt=["which", "apt"]
     with open(os.devnull, 'w') as devnull:
         # 1) we search for apt (debian based systems)
-        completed=subprocess.call(cmd_which_apt,stdout=devnull, stderr=subprocess.STDOUT)
+        completed=SP.call(cmd_which_apt,stdout=devnull, stderr=SP.STDOUT)
         if completed==0 and linux=="DB":
             cmd_is_package_installed=["apt", "list", "--installed"]
         else:
             # 2) if apt not found search for rpm (redhat)
-            completed=subprocess.call(cmd_which_rpm,stdout=devnull, stderr=subprocess.STDOUT) # only 3.8! ,capture_output=True)
+            completed=SP.call(cmd_which_rpm,stdout=devnull, stderr=SP.STDOUT) # only 3.8! ,capture_output=True)
             if completed==0 and linux=="RH":
                 cmd_is_package_installed=["rpm", "-q"]
             else:
@@ -389,19 +434,15 @@ def check_system_pkg(check_cmd,pkg):
         # also apt do not return status, we need to use grep
         # and apt output is too messy for being used 
         cmd_is_package_installed[-1]+="*" # we don't specify in pyconf the exact name because of version numbers
-        p=subprocess.Popen(cmd_is_package_installed,
-                           stdout=subprocess.PIPE,
-                           stderr=FNULL)
+        p=SP.Popen(cmd_is_package_installed, stdout=SP.PIPE, stderr=FNULL)
         try:
-            output = subprocess.check_output(['grep', pkg], stdin=p.stdout)
+            output = SP.check_output(['grep', pkg], stdin=p.stdout)
             msg_status=src.printcolors.printcSuccess("OK")
         except:
             msg_status=src.printcolors.printcError("KO")
             msg_status+=" (package is not installed!)\n"
     else:
-        p=subprocess.Popen(cmd_is_package_installed,
-                           stdout=subprocess.PIPE,
-                           stderr=FNULL)
+        p=SP.Popen(cmd_is_package_installed, stdout=SP.PIPE, stderr=FNULL)
         output, err = p.communicate()
         rc = p.returncode
         if rc==0:
index 4b4fa61cfc08152cc98c29eb82b9f17756859910..6a4bb660eebf4ec231cedc40f0b753724116654a 100644 (file)
@@ -61,7 +61,12 @@ class XmlLogFile(object):
           with open(log_file_path, 'w') as f:
             f.write("<?xml version='1.0' encoding='utf-8'?>\n")
             if stylesheet:
-                f.write("<?xml-stylesheet type='text/xsl' href='%s'?>\n" %  stylesheet)
+                # example as href='./hat.xsl' 
+                # as local file xml with local file xsl
+                # with 'python3 -m http.server 8765 &' and
+                # 'chromium-browser http://localhost:8765/hat.xml' or
+                # 'firefox http://localhost:8765/hat.xml'
+                f.write("<?xml-stylesheet type='text/xsl' href='./%s'?>\n" %  stylesheet)
                 pass
             res= etree.tostring(self.xmlroot, encoding='utf-8')
             f.write(res)
index aab7b647b60d9e36ff1b3c56b4483390b79c02b7..ebd3462a9cfdfb3c565a387e6532b7e399cd5974 100644 (file)
 <?xml version="1.0" encoding="utf-8"?>
 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-<xsl:output method="html" /> <!-- encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>-->
+<xsl:output method="html" /> 
+<!-- encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>-->
 <xsl:template match="/">
 
 <head>  
-      <title>SAlomeTools log</title>
-      <style type="text/css">
-         table       { width : 100%;
-                       margin:1px;
-                       padding:1px;
-                       border-collapse:collapse;
-                       empty-cells : show;
-                     }
-         td          { vertical-align : center; padding: 15px; }
-         h1          { text-align : center; font-style: italic; font-size: 20px; }
-         .legend     { font-weight : bold;
-                       text-align : center;
-                     } 
-         .def        { font-family: Arial, Verdana, "Times New Roman", Times, serif;}
-         hr.note     { color: #BFBFBF; }
-         .note       { text-align : right; font-style: italic; font-size: small; }
-         div.release { -moz-column-count: 2;
-                       overflow: auto;
-                       max-height: 250px;
-                     }
-         .OK2        { color:#00AA00; }
-         .KO2        { color:#FF0000; }
-      </style>
-      <script language="JavaScript"><![CDATA[
-           function Toggle(id) {
-             var element = document.getElementById(id);
+  <title>SAlomeTools log</title>
+  <style type="text/css">
+      table       { width : 100%;
+                    margin:1px;
+                    padding:1px;
+                    border-collapse:collapse;
+                    empty-cells : show;
+                  }
+      td          { vertical-align : center; padding: 10px; }
+      h1          { text-align : center; font-style: italic; font-size: 20px; }
+      .legend     { font-weight : bold; text-align : center; } 
+      .def        { font-family: monospace, Arial, Verdana, "Times New Roman", Times, serif;}
+      hr.note     { color: #BFBFBF; }
+      .note       { text-align : right; font-style: italic; font-size: small; }
+      div.release { -moz-column-count: 2; overflow: auto; max-height: 250px; }
+      .OK2        { color:#00AA00; }
+      .KO2        { color:#FF0000; }
+  </style>
+  <script language="JavaScript"><![CDATA[
+      function Toggle(id) {
+        var element = document.getElementById(id);
 
-             if ( element.style.display == "none" )
-                 element.style.display = "block";
-             else 
-                 element.style.display = "none";
-           }
-         ]]>
-      </script>
+        if ( element.style.display == "none" )
+            element.style.display = "block";
+        else 
+            element.style.display = "none";
+       }
+]]>
+  </script>
 </head>
-       <body class="def" bgcolor="aliceblue">
-               <h1><img src="LOGO-SAT.png"/></h1>
-               <table border="1">
-                       <tr>
-                               <xsl:for-each select="SATcommand/Site/@*">
-                                       <td bgcolor="LightBlue">
-                                               <b><xsl:value-of select="name(.)"/></b>
-                                       </td>
-                               </xsl:for-each>
-                       </tr>
-                       <tr>
-                               <xsl:for-each select="SATcommand/Site/@*">      
-                                       <td bgcolor="Beige"><xsl:value-of select="."/></td>
-                               </xsl:for-each>
-                       </tr>
-               </table>
-               
-               <h1>command's internal traces
-               <a href="#">
-                     <xsl:attribute name="onclick">javascript:Toggle('log')</xsl:attribute>
-                     <xsl:attribute name="title">Click to expand or collapse the command log</xsl:attribute>
-                     expand / collapse
-               </a>
-               </h1>
-               
-               <div style="display:none"><xsl:attribute name="id">log</xsl:attribute>
-                   <PRE><xsl:value-of select="SATcommand/Log"/></PRE>
-               </div>
-               
-               <h1>Links</h1>
-               <table border="1">
-                       <xsl:for-each select="SATcommand/Links/link">
-                               <tr>
-                                       <td bgcolor="Beige">
-                                               <xsl:if test="@passed='0'">
-                                                       <a>
-                                                               <xsl:attribute name="title">Click for more information</xsl:attribute>
-                                                               <xsl:attribute name="class">OK2</xsl:attribute>
-                                                               <xsl:attribute name="href"><xsl:value-of select="."/></xsl:attribute>
-                                                               <xsl:value-of select="@command"/>
-                                                       </a>
-                                               </xsl:if>
-                                               <xsl:if test="@passed!='0'">
-                                                       <a>
-                                                               <xsl:attribute name="title">Click for more information</xsl:attribute>
-                                                               <xsl:attribute name="class">KO2</xsl:attribute>
-                                                               <xsl:attribute name="href"><xsl:value-of select="."/></xsl:attribute>
-                                                               <xsl:value-of select="@command"/>
-                                                       </a>
-                                               </xsl:if>
-                                       </td>
-                                       <td bgcolor="LightBlue">
-                                               <xsl:value-of select="@launchedCommand"/>
-                                       </td>
-                               </tr>
-                       </xsl:for-each>
-                       
-               </table>
-               
-               <h1>output 
-               <a target="_blank">
-                       <xsl:attribute name="title">Click to open in an editor</xsl:attribute>
-                       <xsl:attribute name="href"><xsl:value-of select="SATcommand/OutLog"/></xsl:attribute>
-                       <xsl:attribute name="download"><xsl:value-of select="SATcommand/OutLog"/></xsl:attribute>
-                       log
-               </a>
-               </h1>
-               <xsl:variable name="txtLog">
-                       <xsl:value-of select="SATcommand/OutLog"/>
-               </xsl:variable>
-               <iframe src="{$txtLog}" frameborder="0" class="center" width="98%" height="600" scrolling="yes"></iframe>
-               <!--<iframe src="{$txtLog}" frameborder="0" class="center" width="98%" height="600" scrolling="yes"></iframe>-->
-       </body>
+
+<body class="def" bgcolor="aliceblue">
+  <h1><img src="LOGO-SAT.png"/></h1>
+  <table border="1">
+    <tr>
+      <xsl:for-each select="SATcommand/Site/@*">
+        <td bgcolor="LightBlue">
+          <b><xsl:value-of select="name(.)"/></b>
+        </td>
+      </xsl:for-each>
+    </tr>
+    <tr>
+      <xsl:for-each select="SATcommand/Site/@*">  
+        <td bgcolor="Beige"><xsl:value-of select="."/></td>
+      </xsl:for-each>
+    </tr>
+  </table>
+  
+  <h1>command's internal traces
+  <a href="#">
+        <xsl:attribute name="onclick">javascript:Toggle('log')</xsl:attribute>
+        <xsl:attribute name="title">Click to expand or collapse the command log</xsl:attribute>
+        expand / collapse
+  </a>
+  </h1>
+  
+  <div style="display:none"><xsl:attribute name="id">log</xsl:attribute>
+      <PRE><xsl:value-of select="SATcommand/Log"/></PRE>
+  </div>
+  
+  <h1>Links</h1>
+  <table border="1">
+    <xsl:for-each select="SATcommand/Links/link">
+      <tr>
+        <td bgcolor="Beige">
+          <xsl:if test="@passed='0'">
+            <a>
+              <xsl:attribute name="title">Click for more information</xsl:attribute>
+              <xsl:attribute name="class">OK2</xsl:attribute>
+              <xsl:attribute name="href"><xsl:value-of select="."/></xsl:attribute>
+              <xsl:value-of select="@command"/>
+            </a>
+          </xsl:if>
+          <xsl:if test="@passed!='0'">
+            <a>
+              <xsl:attribute name="title">Click for more information</xsl:attribute>
+              <xsl:attribute name="class">KO2</xsl:attribute>
+              <xsl:attribute name="href"><xsl:value-of select="."/></xsl:attribute>
+              <xsl:value-of select="@command"/>
+            </a>
+          </xsl:if>
+        </td>
+        <td bgcolor="LightBlue">
+          <xsl:value-of select="@launchedCommand"/>
+        </td>
+      </tr>
+    </xsl:for-each>
+    
+  </table>
+  
+  <h1>output 
+  <a target="_blank">
+    <xsl:attribute name="title">Click to open in an editor</xsl:attribute>
+    <xsl:attribute name="href"><xsl:value-of select="SATcommand/OutLog"/></xsl:attribute>
+    <xsl:attribute name="download"><xsl:value-of select="SATcommand/OutLog"/></xsl:attribute>
+    log
+  </a>
+  </h1>
+  <xsl:variable name="txtLog">
+    <xsl:value-of select="SATcommand/OutLog"/>
+  </xsl:variable>
+  <iframe src="{$txtLog}" frameborder="0" class="center" width="98%" height="600" scrolling="yes"></iframe>
+  <!--<iframe src="{$txtLog}" frameborder="0" class="center" width="98%" height="600" scrolling="yes"></iframe>-->
+</body>
 </xsl:template>
 
 </xsl:stylesheet>
index 87931fcd123e99447e8c848734f4e658784fee3a..d2e3d817f68c462aa591165aa5085894fe24eda9 100644 (file)
@@ -2,62 +2,63 @@
 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="html" />
 <xsl:template match="/">
-       
+  
 <head>  
-    <title>SAlomeTools log</title>
-    <style type="text/css">
-        table       { 
-                      margin:1px;
-                      padding:1px;
-                      border-collapse:collapse;
-                      empty-cells : show;
-                    }
-        td          { vertical-align : center;}
-        h1          { text-align : center; font-style: italic; }
-        .legend     { font-weight : bold;
-                      text-align : center;
-                    } 
-        .def        { font-family: Arial, Verdana, "Times New Roman", Times, serif;}
-        hr.note     { color: #BFBFBF; }
-        .note       { text-align : right; font-style: italic; font-size: small; }
-        div.release { -moz-column-count: 2;
-                      overflow: auto;
-                      max-height: 250px;
-                    }
-    </style>
+  <title>SAlomeTools log</title>
+  <style type="text/css">
+      table       { 
+                    margin: 1px;
+                    padding: 1px;
+                    border-collapse:collapse;
+                    empty-cells : show;
+                  }
+      td          { vertical-align : center; text-align : left; font-size: 15px; padding: 5px;}
+      th          { vertical-align : center; text-align : left; font-weight : bold; font-size: 18px; padding: 10px;}
+      h1          { text-align : center; font-style: italic; }
+      .legend     { font-weight : bold; text-align : center; } 
+      .def        { font-family: monospace, Arial, Verdana, "Times New Roman", Times, serif;}
+      hr.note     { color: #BFBFBF; }
+      .note       { text-align : right; font-style: italic; font-size: small; }
+      div.release { -moz-column-count: 2; overflow: auto; max-height: 250px; }
+  </style>
 </head>
-       <body class="def" bgcolor="aliceblue">
-               <h1><img src="LOGO-SAT.png"/></h1>
-                       <xsl:choose>
-                         <xsl:when test="not(LOGlist/@application='None')">
-                                 <h1>Logs of application <xsl:value-of select="LOGlist/@application"/></h1>
-                         </xsl:when>
-                         <xsl:otherwise>
-                                 <h1>
-                                         General Logs
-                                 </h1>
-                         </xsl:otherwise>
-                       </xsl:choose>
-                       <table border="1">
-                               <tr>
-                               <td width="100px" bgcolor="Beige">Command</td><td width="100px" bgcolor="Beige">date</td><td width="100px" bgcolor="Beige">time</td><td bgcolor="Beige">application</td><td bgcolor="Beige">full command</td>
-                               </tr>
-                               <xsl:for-each select="LOGlist/LogCommand">
-                                       <xsl:sort select="." order="descending" />
-                                       <tr bgcolor="aliceblue" width="2">
-                                               <td>
-                                                       <a title="log">
-                                                               <xsl:attribute name="href"><xsl:value-of select="."/></xsl:attribute>
-                                                               <xsl:value-of select="@cmd"/>
-                                                       </a>
-                                               </td>
-                                               <td><xsl:value-of select="@date"/></td>
-                                               <td><xsl:value-of select="@hour"/></td>
-                                               <td><xsl:value-of select="@application"/></td>
-                                               <td><xsl:value-of select="@full_command"/></td>
-                                       </tr>
-                               </xsl:for-each>
-                       </table>
-       </body>
+
+<body class="def" bgcolor="aliceblue">
+  <h1><img src="LOGO-SAT.png"/></h1>
+    <xsl:choose>
+      <xsl:when test="not(LOGlist/@application='None')">
+        <h1>Logs of application <xsl:value-of select="LOGlist/@application"/></h1>
+      </xsl:when>
+      <xsl:otherwise>
+        <h1>
+          General Logs
+        </h1>
+      </xsl:otherwise>
+    </xsl:choose>
+    <table border="1">
+      <tr>
+        <th bgcolor="Beige">Command</th>
+        <th bgcolor="Beige">date</th>
+        <th bgcolor="Beige">time</th>
+        <th bgcolor="Beige">application</th>
+        <th bgcolor="Beige">full command</th>
+      </tr>
+      <xsl:for-each select="LOGlist/LogCommand">
+        <xsl:sort select="." order="descending" />
+        <tr bgcolor="aliceblue" width="2">
+          <td>
+            <a title="log">
+              <xsl:attribute name="href"><xsl:value-of select="."/></xsl:attribute>
+              <xsl:value-of select="@cmd"/>
+            </a>
+          </td>
+          <td><xsl:value-of select="@date"/></td>
+          <td><xsl:value-of select="@hour"/></td>
+          <td><xsl:value-of select="@application"/></td>
+          <td><xsl:value-of select="@full_command"/></td>
+        </tr>
+      </xsl:for-each>
+    </table>
+</body>
 </xsl:template>
 </xsl:stylesheet>
index ea60ca4204b15c823624bb42307f289b1ad7a16c..5a94a39cd6a4e39812fe4b906a7dc4f56f05c132 100644 (file)
@@ -74,7 +74,7 @@
     h4            { text-align : left; font-size: small; font-weight: bold; display: inline; }
     h_err         { text-align : left; font-size: small; font-weight: normal; display: inline;         color: red; }
     .legend       { text-align : center; } 
-    .def        { font-family: Arial, Verdana, "Times New Roman", Times, serif;}
+    .def        { font-family: monospace, Arial, Verdana, "Times New Roman", Times, serif;}
    
 </style>
 
index 9b7e80001e9080a78574128508c850c4b1762c46..79873e671891128eef2a2551e25df8d660f2592d 100644 (file)
@@ -74,7 +74,7 @@
     h4            { text-align : left; font-size: small; font-weight: bold; display: inline; }
     h_err         { text-align : left; font-size: small; font-weight: normal; display: inline;         color: red; }
     .legend       { text-align : center; } 
-    .def        { font-family: Arial, Verdana, "Times New Roman", Times, serif; background-color:#FFFFCC;}
+    .def        { font-family: monospace, Arial, Verdana, "Times New Roman", Times, serif; background-color:#FFFFCC;}
    
 </style>
 
index 24dbfc5f4bdfced185edc54ecce3ea4354b3002c..96bad114097cbb3aa003cca85b275efc364b8d44 100644 (file)
@@ -7,7 +7,7 @@
 <head>
 <title>Tests of <xsl:value-of select="//product/@name" /></title>
 <style type="text/css">
-    .def        { font-family: Arial, Verdana, "Times New Roman", Times, serif;}
+    .def        { font-family: monospace, Arial, Verdana, "Times New Roman", Times, serif;}
     .OK         { background-color:#00FF00; }
     .KO         { background-color:#FF0000; }
     .KF         { background-color:#FFA500; }
index e46f56db2056005a1e5c6c7f9d59190202be2c7d..7d9ef716f052fa363e2ba74c39f1b5a663f987d9 100644 (file)
@@ -7,7 +7,7 @@
 <head>
 <title>Tests of <xsl:value-of select="//product/@name" /></title>
 <style type="text/css">
-    .def        { font-family: Arial, Verdana, "Times New Roman", Times, serif;}
+    .def        { font-family: monospace, Arial, Verdana, "Times New Roman", Times, serif;}
     .OK         { background-color:#00FF00; }
     .KO         { background-color:#FF0000; }
     .KF         { background-color:#FFA500; }