Kaynağa Gözat

Merge branch 'candidate-5.2.0' into candidate-5.4.0

Signed-off-by: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 10 yıl önce
ebeveyn
işleme
d8a22bc3d3

+ 105 - 4
docs/ECLWatch/TheECLWatchMan.xml

@@ -341,6 +341,14 @@
       <xi:include href="HPCCDataHandling/DH-Mods/DH-Mod1.xml"
       <xi:include href="HPCCDataHandling/DH-Mods/DH-Mod1.xml"
                   xpointer="Spray_XML"
                   xpointer="Spray_XML"
                   xmlns:xi="http://www.w3.org/2001/XInclude" />
                   xmlns:xi="http://www.w3.org/2001/XInclude" />
+ 
+
+ 
+
+      <xi:include href="HPCCDataHandling/DH-Mods/DH-Mod1.xml"
+                  xpointer="Spray_JSON"
+                  xmlns:xi="http://www.w3.org/2001/XInclude" />
+               
 
 
       <xi:include href="HPCCDataHandling/DH-Mods/DH-Mod1.xml"
       <xi:include href="HPCCDataHandling/DH-Mods/DH-Mod1.xml"
                   xpointer="Spray_Variable"
                   xpointer="Spray_Variable"
@@ -576,7 +584,7 @@
 
 
         <mediaobject>
         <mediaobject>
           <imageobject>
           <imageobject>
-            <imagedata fileref="images/ECLWA460.jpg" />
+            <imagedata fileref="images/ECLWA460.jpg" vendor="eclwatchSS" />
           </imageobject>
           </imageobject>
         </mediaobject>
         </mediaobject>
       </figure></para>
       </figure></para>
@@ -591,6 +599,99 @@
     system administration tasks through ECL watch.</para>
     system administration tasks through ECL watch.</para>
 
 
     <sect1>
     <sect1>
+      <title>Topology</title>
+
+      <para>The Topology page provides a visual tree display with information
+      about your clusters, services, and nodes.</para>
+
+      <para>Click on the <emphasis role="bold">Topology</emphasis> link from
+      the Operations navigation sub-menu to access the topology page.</para>
+
+      <para><figure>
+          <title>Topology Page</title>
+
+          <mediaobject>
+            <imageobject>
+              <imagedata fileref="images/ECLWA463.jpg" vendor="ECLWatchSS" />
+            </imageobject>
+          </mediaobject>
+        </figure></para>
+
+      <sect2 id="TopologyTargets">
+        <title>Targets</title>
+
+        <para>The <emphasis role="bold">Targets</emphasis> Action button
+        displays your clusters by type.</para>
+
+        <para>Click on the arrow to the left of the Cluster folder/object to
+        expand. The expanded view displays.</para>
+
+        <para><figure>
+            <title>Expanded View</title>
+
+            <mediaobject>
+              <imageobject>
+                <imagedata fileref="images/ECLWA464.jpg" vendor="ECLWatchSS" />
+              </imageobject>
+            </mediaobject>
+          </figure>The expanded view displays the objects and nodes in the
+        selected container. Select the node or object to display more
+        information or to access the logs. The Summary, Configuration, and Log
+        tabs on the left side of the page display the relevant information for
+        the selected component.</para>
+      </sect2>
+
+      <sect2 id="TopologyServices">
+        <title>Services</title>
+
+        <para>Press the <emphasis role="bold">Services</emphasis> Action
+        button to display information on the various services running on your
+        cluster.</para>
+
+        <para>Click on the arrow to the left of the service you wish to
+        expand. The expanded view displays.</para>
+
+        <para><figure>
+            <title>Expanded Services</title>
+
+            <mediaobject>
+              <imageobject>
+                <imagedata fileref="images/ECLWA465.jpg" vendor="ECLWatchSS" />
+              </imageobject>
+            </mediaobject>
+          </figure></para>
+
+        <para>The services view provides a service oriented tree view that
+        provides access to the services. Expand the tree, and select the
+        component to view the Summary, Configuration, or Logs tabs for the
+        selected component.</para>
+      </sect2>
+
+      <sect2>
+        <title>Machines</title>
+
+        <para>Press the <emphasis role="bold">Machines</emphasis> Action
+        button for more information on the various machines or nodes running
+        in your cluster(s).</para>
+
+        <para><figure>
+            <title>Machines View</title>
+
+            <mediaobject>
+              <imageobject>
+                <imagedata fileref="images/ECLWA466.jpg" vendor="ECLWatchSS" />
+              </imageobject>
+            </mediaobject>
+          </figure></para>
+
+        <para>The <emphasis role="bold">Machines</emphasis> action button
+        opens a node oriented view of the tree. Expand the nodes to see the
+        services on each node. Select the component to view the Summary,
+        Configuration, or Logs tabs for that selected component.</para>
+      </sect2>
+    </sect1>
+
+    <sect1>
       <title>Disk Usage</title>
       <title>Disk Usage</title>
 
 
       <para>When you click on the Operations link, it opens the Disk Usage
       <para>When you click on the Operations link, it opens the Disk Usage
@@ -708,7 +809,7 @@
 
 
         <para>The default Ganglia page has a tab for Custom Monitoring where
         <para>The default Ganglia page has a tab for Custom Monitoring where
         you can easily add custom monitoring components. <figure>
         you can easily add custom monitoring components. <figure>
-            <title>Ganglia Custom Monitoring </title>
+            <title>Ganglia Custom Monitoring</title>
 
 
             <mediaobject>
             <mediaobject>
               <imageobject>
               <imageobject>
@@ -744,7 +845,7 @@
                 <imagedata fileref="images/ECLWa482.jpg" vendor="VM_welcome" />
                 <imagedata fileref="images/ECLWa482.jpg" vendor="VM_welcome" />
               </imageobject>
               </imageobject>
             </mediaobject>
             </mediaobject>
-          </figure> </para>
+          </figure></para>
       </sect2>
       </sect2>
 
 
       <sect2>
       <sect2>
@@ -753,7 +854,7 @@
         <para>In order to use Ganglia in ECL Watch, you need to have Ganglia
         <para>In order to use Ganglia in ECL Watch, you need to have Ganglia
         installed on your HPCC System. For details on installing Ganglia for
         installed on your HPCC System. For details on installing Ganglia for
         ECL Watch, refer to the <emphasis>HPCC Monitoring and
         ECL Watch, refer to the <emphasis>HPCC Monitoring and
-        Reporting</emphasis> manual. </para>
+        Reporting</emphasis> manual.</para>
       </sect2>
       </sect2>
     </sect1>
     </sect1>
   </chapter>
   </chapter>

+ 144 - 0
docs/HPCCDataHandling/DH-Mods/DH-Mod1.xml

@@ -748,6 +748,150 @@
       </itemizedlist>
       </itemizedlist>
     </sect2>
     </sect2>
 
 
+    <sect2 id="Spray_JSON" role="brk">
+      <title><emphasis role="bold">Spray JSON</emphasis></title>
+
+      <itemizedlist>
+        <listitem>
+          <para>Click on the <emphasis role="bold">Files</emphasis> icon, then
+          click the <emphasis role="bold">Landing Zones</emphasis> link from
+          the navigation sub-menu.</para>
+        </listitem>
+
+        <listitem>
+          <para>Click on the arrow next to your dropzone to expand the
+          list.</para>
+
+          <para>The files on your drop zone display.</para>
+        </listitem>
+
+        <listitem>
+          <para>Check the checkboxes for the file(s) you want to spray, then
+          press the Spray:<emphasis role="bold"> JSON </emphasis> action
+          button.</para>
+
+          <para>The dialog displays.</para>
+        </listitem>
+
+        <listitem>
+          <para>Fill in relevant details:</para>
+
+          <para><informaltable colsep="0" frame="none" rowsep="0">
+              <tgroup cols="2">
+                <colspec colwidth="122.40pt" />
+
+                <colspec colwidth="333.00pt" />
+
+                <tbody>
+                  <row>
+                    <entry align="right"><emphasis
+                    role="bold">Target</emphasis></entry>
+                  </row>
+
+                  <row>
+                    <entry><emphasis role="bold">Group</emphasis></entry>
+
+                    <entry>Select the name of cluster to spray to. You can
+                    only select a cluster in your environment.</entry>
+                  </row>
+
+                  <row>
+                    <entry><emphasis role="bold">Name
+                    Prefix</emphasis></entry>
+
+                    <entry>The prefix for the logical file</entry>
+                  </row>
+
+                  <row>
+                    <entry><emphasis role="bold">Target
+                    Name</emphasis></entry>
+
+                    <entry>The logical filename to create. This is pre-filled
+                    with the name of the source file on the landing zone, but
+                    can be changed.</entry>
+                  </row>
+
+                  <row>
+                    <entry><emphasis role="bold">Row Path </emphasis></entry>
+
+                    <entry>The path specifier to the JSON content. The default
+                    takes the root level content as an array of objects to be
+                    treated as rows.</entry>
+                  </row>
+
+                  <row>
+                    <entry align="right"><emphasis
+                    role="bold">Options:</emphasis></entry>
+                  </row>
+
+                  <row>
+                    <entry><emphasis role="bold">Format</emphasis></entry>
+
+                    <entry>Select the format from the droplist</entry>
+                  </row>
+
+                  <row>
+                    <entry><emphasis role="bold">Max Record
+                    Length</emphasis></entry>
+
+                    <entry>The length of longest record in the file.</entry>
+                  </row>
+
+                  <row>
+                    <entry><emphasis role="bold">Overwrite</emphasis></entry>
+
+                    <entry>Check this box to overwrite files of the same
+                    name.</entry>
+                  </row>
+
+                  <row>
+                    <entry><emphasis role="bold">No Split</emphasis></entry>
+
+                    <entry>Check this box to prevent splitting file parts to
+                    multiple target parts.</entry>
+                  </row>
+
+                  <row>
+                    <entry><emphasis role="bold">Fail if no source
+                    file</emphasis></entry>
+
+                    <entry>Check this box to allow the spray to fail if no
+                    source file is found.</entry>
+                  </row>
+
+                  <row>
+                    <entry><emphasis role="bold">Replicate</emphasis></entry>
+
+                    <entry><para>Check this box to create backup copies of all
+                    file parts in the backup directory (by convention on the
+                    secondary drive of the node following in the
+                    cluster).</para><para><emphasis role="bold">This option is
+                    only available on systems where replication has been
+                    enabled.</emphasis></para></entry>
+                  </row>
+
+                  <row>
+                    <entry><emphasis role="bold">Compress</emphasis></entry>
+
+                    <entry>Check this box to compress the files.</entry>
+                  </row>
+                </tbody>
+              </tgroup>
+            </informaltable></para>
+        </listitem>
+
+        <listitem>
+          <para>Press the <emphasis role="bold">Spray</emphasis>
+          button.</para>
+
+          <para>A <emphasis role="bold">DFU Workunit</emphasis> tab displays
+          for each job. You can see the progress of each spray operation on
+          the tab. If a job fails, information related to the cause of the
+          failure also displays.</para>
+        </listitem>
+      </itemizedlist>
+    </sect2>
+
     <sect2 id="Spray_Variable" role="brk">
     <sect2 id="Spray_Variable" role="brk">
       <title><emphasis role="bold">Spray Variable</emphasis></title>
       <title><emphasis role="bold">Spray Variable</emphasis></title>
 
 

BIN
docs/images/ECLWA460.jpg


BIN
docs/images/ECLWA463.jpg


BIN
docs/images/ECLWA464.jpg


BIN
docs/images/ECLWA465.jpg


BIN
docs/images/ECLWA466.jpg


+ 1 - 1
ecl/hqlcpp/hqlcpp.cpp

@@ -5736,7 +5736,7 @@ void HqlCppTranslator::doBuildCall(BuildCtx & ctx, const CHqlBoundTarget * tgt,
 
 
     IHqlExpression * external = funcdef->queryChild(0);
     IHqlExpression * external = funcdef->queryChild(0);
     IHqlExpression * formals = funcdef->queryChild(1);
     IHqlExpression * formals = funcdef->queryChild(1);
-    if (external->hasAttribute(ctxmethodAtom))
+    if (external->hasAttribute(ctxmethodAtom) || external->hasAttribute(contextAtom))
         ensureContextAvailable(ctx);
         ensureContextAvailable(ctx);
     if (external->hasAttribute(gctxmethodAtom) || external->hasAttribute(globalContextAtom))
     if (external->hasAttribute(gctxmethodAtom) || external->hasAttribute(globalContextAtom))
     {
     {

+ 1 - 1
esp/services/ws_dfu/ws_dfuService.cpp

@@ -1704,7 +1704,7 @@ void CWsDfuEx::getFilePartsOnClusters(IEspContext &context, const char* clusterR
                 partSizeStr.set("<N/A>");
                 partSizeStr.set("<N/A>");
             else
             else
             {
             {
-                __uint64 size = partPropertyTree->getPropInt("@size");
+                __uint64 size = partPropertyTree->getPropInt64("@size");
                 comma c4(size);
                 comma c4(size);
                 partSizeStr<<c4;
                 partSizeStr<<c4;
 
 

+ 45 - 0
esp/src/eclwatch/nls/es/hpcc.js

@@ -33,6 +33,7 @@ define(
     ArchivedOnly: "Solo archivado",
     ArchivedOnly: "Solo archivado",
     ArchivedWarning: "Advertencia: Por favor especifique rango de fechas corto. O si no, la recuperacion de workunits puede ser demorada.",
     ArchivedWarning: "Advertencia: Por favor especifique rango de fechas corto. O si no, la recuperacion de workunits puede ser demorada.",
     AutoRefresh: "Actualizar Automaticamente",
     AutoRefresh: "Actualizar Automaticamente",
+    Back: "Atras",
     BannerColor: "Color de Banner",
     BannerColor: "Color de Banner",
     BannerMessage: "Mensaje del Banner",
     BannerMessage: "Mensaje del Banner",
     BannerScroll: "Desplazamiento del Banner",
     BannerScroll: "Desplazamiento del Banner",
@@ -60,9 +61,11 @@ define(
     Command: "Comando",
     Command: "Comando",
     Comment: "Comentario",
     Comment: "Comentario",
     Completed: "Completado",
     Completed: "Completado",
+    ComplexityWarning: "Mas de {threshold} actividades ({activityCount}) - ¿suprimir primer visualización?",
     Component: "Componente",
     Component: "Componente",
     Compress: "Comprimir",
     Compress: "Comprimir",
     Compressed: "Comprimido",
     Compressed: "Comprimido",
+    CompressedFileSize: "Tamaño de Archivo Comprimido",
     Configuration: "Configuracion",
     Configuration: "Configuracion",
     ConfirmPassword: "Confirme la Contraseña",
     ConfirmPassword: "Confirme la Contraseña",
     ConfirmRemoval: "¿Seguro que quieres hacer esto?",
     ConfirmRemoval: "¿Seguro que quieres hacer esto?",
@@ -80,12 +83,14 @@ define(
     Debug: "Depurar",
     Debug: "Depurar",
     DEF: "DEF",
     DEF: "DEF",
     Delete: "Eliminar",
     Delete: "Eliminar",
+    Deleted: "Borrado",
     DeleteSelectedFiles: "¿Borrar archivos seleccionados?",
     DeleteSelectedFiles: "¿Borrar archivos seleccionados?",
     DeleteSelectedGroups: "Eliminar  grupo(s) escojido(s)?",
     DeleteSelectedGroups: "Eliminar  grupo(s) escojido(s)?",
     DeleteSelectedPermissions: "Borrar permiso(s) escojido(s)?",
     DeleteSelectedPermissions: "Borrar permiso(s) escojido(s)?",
     DeleteSelectedQueries: "¿Borrar queries seleccionados?",
     DeleteSelectedQueries: "¿Borrar queries seleccionados?",
     DeleteSelectedUsers: "Eliminar Usuario(s) escojido(s)?",
     DeleteSelectedUsers: "Eliminar Usuario(s) escojido(s)?",
     DeleteSelectedWorkunits: "¿Borrar unidades de trabajo seleccionadas?",
     DeleteSelectedWorkunits: "¿Borrar unidades de trabajo seleccionadas?",
+    DeleteSuperfile2: "¿Borrar Super-Archivo?",
     DeleteSuperfile: "¿Borrar super-archivo?",
     DeleteSuperfile: "¿Borrar super-archivo?",
     DeleteThisPackage: "Eliminar este paquete?",
     DeleteThisPackage: "Eliminar este paquete?",
     Delimited: "Delimitado",
     Delimited: "Delimitado",
@@ -94,17 +99,20 @@ define(
     DenyRead: "<center>Negar<br>Leer</center>",
     DenyRead: "<center>Negar<br>Leer</center>",
     DenyWrite: "<center>Negar<br>Escribir</center>",
     DenyWrite: "<center>Negar<br>Escribir</center>",
     Depth: "Profundidad",
     Depth: "Profundidad",
+    DepthTooltip: "Máxima Profundidad de Subgrafo",
     Deschedule: "Eliminar del plan de ejecución",
     Deschedule: "Eliminar del plan de ejecución",
     DescheduleSelectedWorkunits: "Desprogramar Workunit(s) escojida(s)?",
     DescheduleSelectedWorkunits: "Desprogramar Workunit(s) escojida(s)?",
     Description: "Descripción",
     Description: "Descripción",
     Despray: "Despray",
     Despray: "Despray",
     Details: "Detalles",
     Details: "Detalles",
     DFUServerName: "Nombre del servidor de DFU",
     DFUServerName: "Nombre del servidor de DFU",
+    DFUWorkunit: "Unidad de Trabajo de DFU",
     Directory: "Directorio",
     Directory: "Directorio",
     DisableScopeScanConfirm: "Esta seguro que desea inhabilitar Scope Scans? Cuando DALI se reinicie, las opciones cambiadas se revierten a las opciones de la configuración.",
     DisableScopeScanConfirm: "Esta seguro que desea inhabilitar Scope Scans? Cuando DALI se reinicie, las opciones cambiadas se revierten a las opciones de la configuración.",
     DisableScopeScans: "Inhabilitar Scope Scans",
     DisableScopeScans: "Inhabilitar Scope Scans",
     DiskUsage: "Utilización del disco",
     DiskUsage: "Utilización del disco",
     Distance: "Distancia",
     Distance: "Distancia",
+    DistanceTooltip: "Maxima Actividad Distancia de Vecindario",
     Dll: "Dll",
     Dll: "Dll",
     DOT: "DOT",
     DOT: "DOT",
     DOTAttributes: "Atributos DOT",
     DOTAttributes: "Atributos DOT",
@@ -114,6 +122,7 @@ define(
     Duration: "Duración",
     Duration: "Duración",
     EBCDIC: "EBCDIC",
     EBCDIC: "EBCDIC",
     ECL: "ECL",
     ECL: "ECL",
+    ECLWorkunit: "Unidad de Trabajo de ECL",
     Edges: "Bordes",
     Edges: "Bordes",
     Edit: "Editar",
     Edit: "Editar",
     EditDOT: "Editar DOT",
     EditDOT: "Editar DOT",
@@ -160,11 +169,16 @@ define(
     Find: "Encontrar",
     Find: "Encontrar",
     FindNext: "Encontrar próximo",
     FindNext: "Encontrar próximo",
     FindPrevious: "Encontrar previo",
     FindPrevious: "Encontrar previo",
+    Finished: "Terminado",
     FirstName: "Primer Nombre",
     FirstName: "Primer Nombre",
+    FirstNRows: "Primeras N Filas",
     Fixed: "Fijo",
     Fixed: "Fijo",
+    Folder: "Carpeta",
     Format: "Formato",
     Format: "Formato",
+    Forward: "Adelante",
     FromDate: "Desde Fecha",
     FromDate: "Desde Fecha",
     FromSizes: "Desde Tamaños",
     FromSizes: "Desde Tamaños",
+    FromTime: "Tiempo de Comenzar",
     FullName: "Nombre Entero",
     FullName: "Nombre Entero",
     Graph: "Gráfico",
     Graph: "Gráfico",
     Graphs: "Gráficos",
     Graphs: "Gráficos",
@@ -207,6 +221,8 @@ define(
     LargestSize: "Tomaño mas Grande",
     LargestSize: "Tomaño mas Grande",
     LastName: "Apellido",
     LastName: "Apellido",
     LastNDays: "ULtimos N días",
     LastNDays: "ULtimos N días",
+    LastNHours: "Ultimas N Horas",
+    LastNRows: "Ultimas N Filas",
     LDAPWarning: "<b>Error en Servicios de LDAP:</b>  'Demasiados Usuarios' - Por favor aplique un Filtro.",
     LDAPWarning: "<b>Error en Servicios de LDAP:</b>  'Demasiados Usuarios' - Por favor aplique un Filtro.",
     LegacyForm: "Forma histórica",
     LegacyForm: "Forma histórica",
     LibrariesUsed: "Bibliotecas usadas",
     LibrariesUsed: "Bibliotecas usadas",
@@ -221,6 +237,7 @@ define(
     LoadPackageContentHere: "(Cargar aqui el contenido del paquete)",
     LoadPackageContentHere: "(Cargar aqui el contenido del paquete)",
     LoadPackageFromFile: "Cargar paquete con contenido de archivo",
     LoadPackageFromFile: "Cargar paquete con contenido de archivo",
     Local: "Local",
     Local: "Local",
+    Log: "Registro",
     LogFile: "Archivo de registro",
     LogFile: "Archivo de registro",
     LoggedInAs: "Conectado como",
     LoggedInAs: "Conectado como",
     LogicalFile: "Archivo Lógico",
     LogicalFile: "Archivo Lógico",
@@ -229,9 +246,12 @@ define(
     LogicalFilesOnly: "Archivos logicos Solamente",
     LogicalFilesOnly: "Archivos logicos Solamente",
     LogicalFileType: "Tipo de archivo lógico",
     LogicalFileType: "Tipo de archivo lógico",
     LogicalName: "Nombre lógico",
     LogicalName: "Nombre lógico",
+    Logs: "Registros",
     log_analysis_1: "log_analysis_1*",
     log_analysis_1: "log_analysis_1*",
     Low: "Bajo",
     Low: "Bajo",
     ManualCopy: "Oprima Crtl_C",
     ManualCopy: "Oprima Crtl_C",
+    ManualOverviewSelection: "Seleccion manual sera requirida",
+    ManualTreeSelection: "Seleccion manual de arbol sera requirida",
     Mappings: "Mapeados",
     Mappings: "Mapeados",
     Mask: "Máscara",
     Mask: "Máscara",
     Max: "Máx",
     Max: "Máx",
@@ -250,6 +270,7 @@ define(
     MonitorShotLimit: "Límite de disparos del monitor",
     MonitorShotLimit: "Límite de disparos del monitor",
     MonitorSub: "Sub monitor",
     MonitorSub: "Sub monitor",
     Month: "Mez",
     Month: "Mez",
+    More: "Mas",
     MustContainUppercaseAndSymbol: "Debe Contener mayúscula y símbolo",
     MustContainUppercaseAndSymbol: "Debe Contener mayúscula y símbolo",
     NA: "No Applica",
     NA: "No Applica",
     Name: "Nombre",
     Name: "Nombre",
@@ -306,10 +327,12 @@ define(
     PasswordExpired: "Su contraseña expiro. Por favor cambiela.",
     PasswordExpired: "Su contraseña expiro. Por favor cambiela.",
     PasswordExpirePostfix: " dia(s). Desea cambiarla?",
     PasswordExpirePostfix: " dia(s). Desea cambiarla?",
     PasswordExpirePrefix: "Su contraseña expira en",
     PasswordExpirePrefix: "Su contraseña expira en",
+    PasswordOpenZAP: "Contraseña para abrir ZAP (opcional)",
     PasswordsDoNotMatch: "Las Contraseñas No Coinciden",
     PasswordsDoNotMatch: "Las Contraseñas No Coinciden",
     Path: "Camino",
     Path: "Camino",
     PathMask: "Máscara del camino",
     PathMask: "Máscara del camino",
     Pause: "Pausa",
     Pause: "Pausa",
+    PauseNow: "Pausar",
     PctComplete: "% completado",
     PctComplete: "% completado",
     PercentDone: "Porcentaje completado",
     PercentDone: "Porcentaje completado",
     PerformingLayout: "Generando disposición...",
     PerformingLayout: "Generando disposición...",
@@ -319,6 +342,7 @@ define(
     PlaceholderFirstName: "John",
     PlaceholderFirstName: "John",
     PlaceholderLastName: "Smith",
     PlaceholderLastName: "Smith",
     Playground: "Patio de juegos",
     Playground: "Patio de juegos",
+    Plugins: "Plugins",
     Port: "Puerto",
     Port: "Puerto",
     Prefix: "Prefijo",
     Prefix: "Prefijo",
     PrefixPlaceholder: "filename{:length}, filesize{:[B|L][1-8]}",
     PrefixPlaceholder: "filename{:length}, filesize{:[B|L][1-8]}",
@@ -339,13 +363,17 @@ define(
     Quarter: "Cuarto",
     Quarter: "Cuarto",
     Queries: "Consultas",
     Queries: "Consultas",
     QueriesNoPackage: "Consultas sin correspondiente paquete",
     QueriesNoPackage: "Consultas sin correspondiente paquete",
+    Query: "Consulta",
     QueryDetailsfor: "Detalles de Query por",
     QueryDetailsfor: "Detalles de Query por",
+    QueryID: "ID de la Consulta",
     QueryIDPlaceholder: "som?q*ry.1",
     QueryIDPlaceholder: "som?q*ry.1",
+    QueryName: "Nombre de la Consulta",
     QueryNamePlaceholder: "My?Su?erQ*ry",
     QueryNamePlaceholder: "My?Su?erQ*ry",
     QuerySet: "Grupo de Query",
     QuerySet: "Grupo de Query",
     Queue: "Cola",
     Queue: "Cola",
     Quote: "Comilla",
     Quote: "Comilla",
     QuotedTerminator: "Terminador Encomillado",
     QuotedTerminator: "Terminador Encomillado",
+    RawTextPage: "Texto (Pagina Actual)",
     RecordCount: "Número de registros",
     RecordCount: "Número de registros",
     RecordLength: "Largo de registro",
     RecordLength: "Largo de registro",
     Records: "Registros",
     Records: "Registros",
@@ -360,6 +388,7 @@ define(
     RemoteDali: "Dali remoto",
     RemoteDali: "Dali remoto",
     RemoteDaliIP: "Remote&nbsp;Dali&nbsp;IP&nbsp;Address",
     RemoteDaliIP: "Remote&nbsp;Dali&nbsp;IP&nbsp;Address",
     Remove: "Remover",
     Remove: "Remover",
+    RemoveSubfiles: "Borrar Sub-Archivo(s)",
     RemoveUser: "Esta apunto de excluirse del grupo:",
     RemoveUser: "Esta apunto de excluirse del grupo:",
     Rename: "Renombrar",
     Rename: "Renombrar",
     RenderedSVG: "SVG creado",
     RenderedSVG: "SVG creado",
@@ -368,6 +397,8 @@ define(
     RequestSchema: "Esquema del requerimiento",
     RequestSchema: "Esquema del requerimiento",
     Reschedule: "Re-planear ejecución",
     Reschedule: "Re-planear ejecución",
     Reset: "Origen",
     Reset: "Origen",
+    ResetThisQuery: "Reajustar esta Consulat",
+    ResetViewToSelection: "Reajustar Vista a la Seleccion",
     Resource: "Recurso",
     Resource: "Recurso",
     Resources: "Recursos",
     Resources: "Recursos",
     ResponseSchema: "Esquema de la respuesta",
     ResponseSchema: "Esquema de la respuesta",
@@ -380,6 +411,8 @@ define(
     Resume: "Continuar",
     Resume: "Continuar",
     RetainSuperfileStructure: "Retener estructura del super-archivo",
     RetainSuperfileStructure: "Retener estructura del super-archivo",
     RetypePassword: "Confirme la contraseña",
     RetypePassword: "Confirme la contraseña",
+    Reverse: "Marchar Atrás",
+    RowPath: "Ruta de Fila",
     Rows: "Líneas",
     Rows: "Líneas",
     RowTag: "Etiqueta de línea",
     RowTag: "Etiqueta de línea",
     RoxieCluster: "Sistema Roxie",
     RoxieCluster: "Sistema Roxie",
@@ -418,6 +451,7 @@ define(
     Start: "Comienzo",
     Start: "Comienzo",
     Started: "Comenzado",
     Started: "Comenzado",
     State: "Estado",
     State: "Estado",
+    Stats: "Estatísticas",
     Status: "Estado",
     Status: "Estado",
     Stopped: "Detenido",
     Stopped: "Detenido",
     Subgraph: "Subgrafo",
     Subgraph: "Subgrafo",
@@ -428,7 +462,9 @@ define(
     SummaryMessage: "Mensaje resumido",
     SummaryMessage: "Mensaje resumido",
     Superfile: "Superfile",
     Superfile: "Superfile",
     SuperFile: "Super File",
     SuperFile: "Super File",
+    Superfiles: "Super-Archivos",
     SuperFiles: "Superfiles",
     SuperFiles: "Superfiles",
+    SuperFilesBelongsTo: "Miembro de Super-Archivo(s)",
     SuperfilesOnly: "Solo Superfiles",
     SuperfilesOnly: "Solo Superfiles",
     Suspend: "Suspender",
     Suspend: "Suspender",
     Suspended: "Suspendido",
     Suspended: "Suspendido",
@@ -448,6 +484,7 @@ define(
     TargetWuid: "Wuid del Objecto",
     TargetWuid: "Wuid del Objecto",
     Terminators: "Terminadores",
     Terminators: "Terminadores",
     TestPages: "Páginas de prueba",
     TestPages: "Páginas de prueba",
+    Text: "Texto",
     ThorMasterAddress: "Direccion del Thor Master",
     ThorMasterAddress: "Direccion del Thor Master",
     ThorNetworkAddress: "Dirección de red de Thor",
     ThorNetworkAddress: "Dirección de red de Thor",
     Time: "Tiempo",
     Time: "Tiempo",
@@ -474,8 +511,11 @@ define(
     title_HPCCPlatformMain: "ECL Watch - Hogar",
     title_HPCCPlatformMain: "ECL Watch - Hogar",
     title_HPCCPlatformOps: "ECL Watch - Operaciones",
     title_HPCCPlatformOps: "ECL Watch - Operaciones",
     title_HPCCPlatformRoxie: "ECL Watch - Roxie",
     title_HPCCPlatformRoxie: "ECL Watch - Roxie",
+    title_HPCCPlatformServicesPlugin: "ECL Watch - Plugins",
     title_Inputs: "Entradas",
     title_Inputs: "Entradas",
     title_LFDetails: "Detalles de archivos lógicos",
     title_LFDetails: "Detalles de archivos lógicos",
+    title_LibrariesUsed: "Librerias Usadas",
+    title_Log: "Archivo de Registro",
     title_LZBrowse: "Zonas de descarga",
     title_LZBrowse: "Zonas de descarga",
     title_MemberOf: "Miembros de",
     title_MemberOf: "Miembros de",
     title_Members: "Miembros",
     title_Members: "Miembros",
@@ -489,15 +529,20 @@ define(
     title_Results: "Salidas",
     title_Results: "Salidas",
     title_SearchResults: "Resultados de búsqueda ",
     title_SearchResults: "Resultados de búsqueda ",
     title_SourceFiles: "",
     title_SourceFiles: "",
+    title_SourceFiles: "",
+    title_Topology: "Topología",
     title_TpThorStatus: "Estatus de Thor",
     title_TpThorStatus: "Estatus de Thor",
     title_UserPermissions: "Permisos del Usuario",
     title_UserPermissions: "Permisos del Usuario",
     title_UserQuery: "Permisos",
     title_UserQuery: "Permisos",
     title_WUDetails: "Detalles de las unidades de trabajo ECL",
     title_WUDetails: "Detalles de las unidades de trabajo ECL",
     title_WUQuery: "Unidades de trabajo ECL",
     title_WUQuery: "Unidades de trabajo ECL",
+    To: "A:",
     ToDate: "Hasta fecha",
     ToDate: "Hasta fecha",
     Toenablegraphviews: "Para habilitar vista de gráficos, instale el plugin Graph View Control",
     Toenablegraphviews: "Para habilitar vista de gráficos, instale el plugin Graph View Control",
     Top: "Arriva",
     Top: "Arriva",
+    Topology: "Topología",
     ToSizes: "A tamaño",
     ToSizes: "A tamaño",
+    TotalClusterTime: "Tiempo Total del Cluster",
     TotalSize: "Tamaño Total",
     TotalSize: "Tamaño Total",
     TotalThorTime: "Tiempo total de Thor",
     TotalThorTime: "Tiempo total de Thor",
     TransitionGuide: "Guía de transición",
     TransitionGuide: "Guía de transición",

+ 48 - 3
esp/src/eclwatch/nls/hu/hpcc.js

@@ -33,6 +33,7 @@ define(
     ArchivedOnly: "Csak tárolt.",
     ArchivedOnly: "Csak tárolt.",
     ArchivedWarning: "Figyelem: Adjon meg rövidebb időintervallumot! Ellenkező esetben a feladatok lekérdezése hosszabb ideig tarthat, mint amit az Ön bőngésző programja engedélyez.",
     ArchivedWarning: "Figyelem: Adjon meg rövidebb időintervallumot! Ellenkező esetben a feladatok lekérdezése hosszabb ideig tarthat, mint amit az Ön bőngésző programja engedélyez.",
     AutoRefresh: "Automatikus frissítés",
     AutoRefresh: "Automatikus frissítés",
+    Back: "Vissza",
     BannerColor: "Fejléc szín",
     BannerColor: "Fejléc szín",
     BannerMessage: "Fejléc szövege",
     BannerMessage: "Fejléc szövege",
     BannerScroll: "Fejléc görgetés",
     BannerScroll: "Fejléc görgetés",
@@ -59,11 +60,14 @@ define(
     Command: "Parancs",
     Command: "Parancs",
     Comment: "Megjegyzés",
     Comment: "Megjegyzés",
     Completed: "Kész",
     Completed: "Kész",
+    ComplexityWarning: "Több mint {threshold} aktivitás ({activityCount}) - elnyomjuk a kezdeti megjelenítést?",
     Component: "Komponens",
     Component: "Komponens",
     Compress: "Tömörít",
     Compress: "Tömörít",
     Compressed: "Tömörített",
     Compressed: "Tömörített",
+    CompressedFileSize: "Tömörített fájl méret",
     Configuration: "Beállítások",
     Configuration: "Beállítások",
     ConfirmPassword: "Jelszó jóváhagyás",
     ConfirmPassword: "Jelszó jóváhagyás",
+    ConfirmRemoval: "Biztos, hogy ezt akarja csinálni?",
     Content: "Tartalom",
     Content: "Tartalom",
     Contents: "Tartalom",
     Contents: "Tartalom",
     ContentType: "Tartalom típusa",
     ContentType: "Tartalom típusa",
@@ -78,12 +82,14 @@ define(
     Debug: "Hibakeresés",
     Debug: "Hibakeresés",
     DEF: "DEF",
     DEF: "DEF",
     Delete: "Törlés",
     Delete: "Törlés",
+    Deleted: "Törölt",
     DeleteSelectedFiles: "Töröljük a kiválasztott fájlokat?",
     DeleteSelectedFiles: "Töröljük a kiválasztott fájlokat?",
     DeleteSelectedGroups: "Törölni akarja a kijelölt csoporto(ka)t?",
     DeleteSelectedGroups: "Törölni akarja a kijelölt csoporto(ka)t?",
     DeleteSelectedPermissions: "Törli a kiválasztott hozzáférési engedélyeket?",
     DeleteSelectedPermissions: "Törli a kiválasztott hozzáférési engedélyeket?",
     DeleteSelectedQueries: "Töröljük a kiválasztott lekérdezéseket?",
     DeleteSelectedQueries: "Töröljük a kiválasztott lekérdezéseket?",
     DeleteSelectedUsers: "Törölni akarja a kijelölt felhasználó(ka)t?",
     DeleteSelectedUsers: "Törölni akarja a kijelölt felhasználó(ka)t?",
     DeleteSelectedWorkunits: "Törölni akarja a kiválasztott feladatokat?",
     DeleteSelectedWorkunits: "Törölni akarja a kiválasztott feladatokat?",
+    DeleteSuperfile2: "Szuper-fájl törlése",
     DeleteSuperfile: "Töröljük a Superfile-t?",
     DeleteSuperfile: "Töröljük a Superfile-t?",
     DeleteThisPackage: "Törölni akarja ezt a csomagot?",
     DeleteThisPackage: "Törölni akarja ezt a csomagot?",
     Delimited: "Határolt",
     Delimited: "Határolt",
@@ -92,17 +98,20 @@ define(
     DenyRead: "<center>Olvasás<br>Tiltása</center>",
     DenyRead: "<center>Olvasás<br>Tiltása</center>",
     DenyWrite: "<center>Írás<br>Tiltása</center>",
     DenyWrite: "<center>Írás<br>Tiltása</center>",
     Depth: "Mélység",
     Depth: "Mélység",
+    DepthTooltip: "Maximális al-gráf mélység",
     Deschedule: "Ütemezés törlése",
     Deschedule: "Ütemezés törlése",
     DescheduleSelectedWorkunits: "Megszűnteti a kijelőlt feladat ütemezését?",
     DescheduleSelectedWorkunits: "Megszűnteti a kijelőlt feladat ütemezését?",
     Description: "Leírás",
     Description: "Leírás",
     Despray: "Összegyűjt",
     Despray: "Összegyűjt",
     Details: "Részletek",
     Details: "Részletek",
     DFUServerName: "DFU Szerver név",
     DFUServerName: "DFU Szerver név",
+    DFUWorkunit: "DFU-munkaegység",
     Directory: "Könyvtár",
     Directory: "Könyvtár",
     DisableScopeScanConfirm: "Biztos, hogy letíltja a hatókör vizsgálatot? DALI újraíndításakor ezek a változtatások elvesznek.",
     DisableScopeScanConfirm: "Biztos, hogy letíltja a hatókör vizsgálatot? DALI újraíndításakor ezek a változtatások elvesznek.",
     DisableScopeScans: "Hatókör vizsgálat letiltása",
     DisableScopeScans: "Hatókör vizsgálat letiltása",
     DiskUsage: "Lemez használat",
     DiskUsage: "Lemez használat",
     Distance: "Távolság",
     Distance: "Távolság",
+    DistanceTooltip: "Legnagyobb aktivitás-szomszéd távolság",
     Dll: "Dll",
     Dll: "Dll",
     DOT: "DOT",
     DOT: "DOT",
     DOTAttributes: "DOT Attribútumok",
     DOTAttributes: "DOT Attribútumok",
@@ -112,6 +121,7 @@ define(
     Duration: "Időtartam",
     Duration: "Időtartam",
     EBCDIC: "EBCDIC",
     EBCDIC: "EBCDIC",
     ECL: "ECL",
     ECL: "ECL",
+    ECLWorkunit: "ECL-munkaegység",
     Edges: "Élek",
     Edges: "Élek",
     Edit: "Szerkesztés",
     Edit: "Szerkesztés",
     EditDOT: "DOT szerkesztés",
     EditDOT: "DOT szerkesztés",
@@ -159,11 +169,16 @@ define(
     Find: "Keresés",
     Find: "Keresés",
     FindNext: "Következőt",
     FindNext: "Következőt",
     FindPrevious: "Előzőt",
     FindPrevious: "Előzőt",
+    Finished: "Befejezett",
     FirstName: "Keresztnév",
     FirstName: "Keresztnév",
+    FirstNRows: "Első N rekord",
     Fixed: "Állandó rekordméret",
     Fixed: "Állandó rekordméret",
+    Folder: "Könyvtár",
     Format: "Formátum",
     Format: "Formátum",
+    Forward: "Előre",
     FromDate: "Dátumtól",
     FromDate: "Dátumtól",
     FromSizes: "Mérettől",
     FromSizes: "Mérettől",
+    FromTime: "Időponttól",
     FullName: "Teljes név",
     FullName: "Teljes név",
     Graph: "Gráf",
     Graph: "Gráf",
     Graphs: "Gráfok",
     Graphs: "Gráfok",
@@ -206,6 +221,8 @@ define(
     LargestSize: "Legnagyobb méret",
     LargestSize: "Legnagyobb méret",
     LastName: "Vezetéknév",
     LastName: "Vezetéknév",
     LastNDays: "Az utolsó N nap",
     LastNDays: "Az utolsó N nap",
+    LastNHours: "Utolsó N óra",
+    LastNRows: "Utolsó N rekord",
     LDAPWarning: "<b>LDAP szolgáltatás hiba:</b>  'Túl sok felhasználó' - Kérem, használjon szűrést!",
     LDAPWarning: "<b>LDAP szolgáltatás hiba:</b>  'Túl sok felhasználó' - Kérem, használjon szűrést!",
     LegacyForm: "Örökölt űrlap (Legacy Form)",
     LegacyForm: "Örökölt űrlap (Legacy Form)",
     LibrariesUsed: "Használt könyvtárak",
     LibrariesUsed: "Használt könyvtárak",
@@ -220,6 +237,7 @@ define(
     LoadPackageContentHere: "(Csomag tartalmának betöltése erre a helyre)",
     LoadPackageContentHere: "(Csomag tartalmának betöltése erre a helyre)",
     LoadPackageFromFile: "Csomag betöltése fájlból",
     LoadPackageFromFile: "Csomag betöltése fájlból",
     Local: "Helyi",
     Local: "Helyi",
+    Log: "Log",
     LogFile: "Log fájl",
     LogFile: "Log fájl",
     LoggedInAs: "Bejelentkezve mint ",
     LoggedInAs: "Bejelentkezve mint ",
     LogicalFile: "Logikai fájl",
     LogicalFile: "Logikai fájl",
@@ -229,9 +247,12 @@ define(
     LogicalFilesOnly: "Csak a logikai fájlokat",
     LogicalFilesOnly: "Csak a logikai fájlokat",
     LogicalFileType: "Logikai fájl típusa",
     LogicalFileType: "Logikai fájl típusa",
     LogicalName: "Logikai név",
     LogicalName: "Logikai név",
+    Logs: "Logok",
     log_analysis_1: "log_elemzés_1*",
     log_analysis_1: "log_elemzés_1*",
     Low: "Alacsony",
     Low: "Alacsony",
     ManualCopy: "Használja a Ctr+C-t",
     ManualCopy: "Használja a Ctr+C-t",
+    ManualOverviewSelection: "Gyorsnézet manuális kiválasztása szükséges",
+    ManualTreeSelection: "Manuális fa kiválasztás szükséges",
     Mappings: "Leképezések",
     Mappings: "Leképezések",
     Mask: "Maszk",
     Mask: "Maszk",
     Max: "Maximum",
     Max: "Maximum",
@@ -250,6 +271,7 @@ define(
     MonitorShotLimit: "Monitor találatok limitje",
     MonitorShotLimit: "Monitor találatok limitje",
     MonitorSub: "Almonitor",
     MonitorSub: "Almonitor",
     Month: "Hónap",
     Month: "Hónap",
+    More: "Tovább",
     MustContainUppercaseAndSymbol: "Csak nagybetűket és jeleket tartalmazhat",
     MustContainUppercaseAndSymbol: "Csak nagybetűket és jeleket tartalmazhat",
     NA: "N/A",
     NA: "N/A",
     Name: "Név",
     Name: "Név",
@@ -305,10 +327,12 @@ define(
     PasswordExpired: "A jelszava lejárt! Adjon meg újat!",
     PasswordExpired: "A jelszava lejárt! Adjon meg újat!",
     PasswordExpirePostfix: "napon bellül. Meg akarja változtatni?",
     PasswordExpirePostfix: "napon bellül. Meg akarja változtatni?",
     PasswordExpirePrefix: "Jelszava lejár",
     PasswordExpirePrefix: "Jelszava lejár",
+    PasswordOpenZAP: "Jelszó a ZAP megnyitásához (opciónális)",
     PasswordsDoNotMatch: "Jelszó nem egyezik",
     PasswordsDoNotMatch: "Jelszó nem egyezik",
     Path: "Útvonal",
     Path: "Útvonal",
     PathMask: "Útvonal maszk",
     PathMask: "Útvonal maszk",
     Pause: "Szüneteltetés",
     Pause: "Szüneteltetés",
+    PauseNow: "Azonnali felfüggesztés",
     PctComplete: "% kész",
     PctComplete: "% kész",
     PercentDone: "% kész",
     PercentDone: "% kész",
     PerformingLayout: "Elrendezés generálása...",
     PerformingLayout: "Elrendezés generálása...",
@@ -318,6 +342,7 @@ define(
     PlaceholderFirstName: "József",
     PlaceholderFirstName: "József",
     PlaceholderLastName: "Kiss",
     PlaceholderLastName: "Kiss",
     Playground: "ECL teszt labor",
     Playground: "ECL teszt labor",
+    Plugins: "Betölthető modulok",
     Port: "Port",
     Port: "Port",
     Prefix: "Előtag",
     Prefix: "Előtag",
     PrefixPlaceholder: "fájlnév{:hossz}, fájlméret{:[B|L][1-8]}",
     PrefixPlaceholder: "fájlnév{:hossz}, fájlméret{:[B|L][1-8]}",
@@ -338,13 +363,17 @@ define(
     Quarter: "Negyed",
     Quarter: "Negyed",
     Queries: "Lekérdezések",
     Queries: "Lekérdezések",
     QueriesNoPackage: "Lekérdezések hozzátartozó csomag nélkül",
     QueriesNoPackage: "Lekérdezések hozzátartozó csomag nélkül",
+    Query: "Lekérdezés",
     QueryDetailsfor: "A lekérdezés paraméterei",
     QueryDetailsfor: "A lekérdezés paraméterei",
+    QueryID: "Lekérdezés azonosító",
     QueryIDPlaceholder: "som?q*ry.1'",
     QueryIDPlaceholder: "som?q*ry.1'",
+    QueryName: "Lekérdezés név",
     QueryNamePlaceholder: "My?Su?erQ*ry",
     QueryNamePlaceholder: "My?Su?erQ*ry",
     QuerySet: "Lekérdezés készlet",
     QuerySet: "Lekérdezés készlet",
     Queue: "Sor",
     Queue: "Sor",
     Quote: "Idézőjel",
     Quote: "Idézőjel",
     QuotedTerminator: "A fájl idézőjelek közötti rekordhatároló karaktert tartalmaz",
     QuotedTerminator: "A fájl idézőjelek közötti rekordhatároló karaktert tartalmaz",
+    RawTextPage: "Formázatlan szöveg (aktuális lap)",
     RecordCount: "Rekord szám",
     RecordCount: "Rekord szám",
     RecordLength: "Rekord méret",
     RecordLength: "Rekord méret",
     Records: "Rekordok száma",
     Records: "Rekordok száma",
@@ -359,6 +388,8 @@ define(
     RemoteDali: "Távoli Dali hálózati címe",
     RemoteDali: "Távoli Dali hálózati címe",
     RemoteDaliIP: "Remote&nbsp;Dali&nbsp;IP&nbsp;Address",
     RemoteDaliIP: "Remote&nbsp;Dali&nbsp;IP&nbsp;Address",
     Remove: "Eltávolít",
     Remove: "Eltávolít",
+    RemoveSubfiles: "Al-fájl(ok) eltávolítása",
+    RemoveUser: "Arra készül, hogy eltávolítsa a felhasználói nevét a csoportból!",
     Rename: "Átnevez",
     Rename: "Átnevez",
     RenderedSVG: "Generált SVG",
     RenderedSVG: "Generált SVG",
     RenderSVG: "SVG generálás",
     RenderSVG: "SVG generálás",
@@ -366,6 +397,8 @@ define(
     RequestSchema: "Igénylő séma (Request Schema)",
     RequestSchema: "Igénylő séma (Request Schema)",
     Reschedule: "Újraütemez",
     Reschedule: "Újraütemez",
     Reset: "Forrás",
     Reset: "Forrás",
+    ResetThisQuery: "Vissza akarja állítani ezt a lekérdezést az allapállapotába?",
+    ResetViewToSelection: "Vissza akarja állítani ezt a nézetet a kiválasztott elemekre?",
     Resource: "Erőforrás",
     Resource: "Erőforrás",
     Resources: "Erőforrások",
     Resources: "Erőforrások",
     ResponseSchema: "Válasz séma (Response Schema)",
     ResponseSchema: "Válasz séma (Response Schema)",
@@ -378,6 +411,8 @@ define(
     Resume: "Tovább folytat",
     Resume: "Tovább folytat",
     RetainSuperfileStructure: "Superfile szerkezetének megőrzése",
     RetainSuperfileStructure: "Superfile szerkezetének megőrzése",
     RetypePassword: "Jelszó mégegyszer",
     RetypePassword: "Jelszó mégegyszer",
+    Reverse: "Visszafelé",
+    RowPath: "Rekord útvonal",
     Rows: "Sor",
     Rows: "Sor",
     RowTag: "Sor azonositó",
     RowTag: "Sor azonositó",
     RoxieCluster: "Roxie klaszter",
     RoxieCluster: "Roxie klaszter",
@@ -417,6 +452,7 @@ define(
     Start: "Indítás",
     Start: "Indítás",
     Started: "Elindítva",
     Started: "Elindítva",
     State: "Állapot",
     State: "Állapot",
+    Stats: "Statisztika",
     Status: "Állapot",
     Status: "Állapot",
     Stopped: "Megállítva",
     Stopped: "Megállítva",
     Subgraph: "Al-gráf",
     Subgraph: "Al-gráf",
@@ -425,10 +461,11 @@ define(
     Subtype: "Altípus",
     Subtype: "Altípus",
     Summary: "Összegzés",
     Summary: "Összegzés",
     SummaryMessage: "Összegzés",
     SummaryMessage: "Összegzés",
-    SuperFile: "Super File",
-    SuperFile: "Szuperfájl",
-    Superfile: "Szuperfálj",
+    SuperFile: "Szuper-fájl",
+    Superfile: "Szuper-fájl",
+    Superfiles: "Szuper-fájlok",
     SuperFiles: "Szuperfájlok",
     SuperFiles: "Szuperfájlok",
+    SuperFilesBelongsTo: "Szuperfájl(ok)hoz tartozik",
     SuperfilesOnly: "Kizárólag szuperfájl",
     SuperfilesOnly: "Kizárólag szuperfájl",
     Suspend: "Felfüggeszt",
     Suspend: "Felfüggeszt",
     Suspended: "Felfüggesztve",
     Suspended: "Felfüggesztve",
@@ -448,6 +485,7 @@ define(
     TargetWuid: "Cél/WUID",
     TargetWuid: "Cél/WUID",
     Terminators: "Rekord lezáró jelek",
     Terminators: "Rekord lezáró jelek",
     TestPages: "Tesztlapok",
     TestPages: "Tesztlapok",
+    Text: "Szöveg",
     ThorMasterAddress: "Thor Master hálózati címe",
     ThorMasterAddress: "Thor Master hálózati címe",
     ThorNetworkAddress: "Thor hálózati címe",
     ThorNetworkAddress: "Thor hálózati címe",
     Time: "Idő",
     Time: "Idő",
@@ -474,8 +512,11 @@ define(
     title_HPCCPlatformMain: "ECL Watch - Kezdőlap",
     title_HPCCPlatformMain: "ECL Watch - Kezdőlap",
     title_HPCCPlatformOps: "ECL Watch - Műveletek",
     title_HPCCPlatformOps: "ECL Watch - Műveletek",
     title_HPCCPlatformRoxie: "ECL Watch - Roxie",
     title_HPCCPlatformRoxie: "ECL Watch - Roxie",
+    title_HPCCPlatformServicesPlugin: "ECL Watch betölthető modulok",
     title_Inputs: "Bementek",
     title_Inputs: "Bementek",
     title_LFDetails: "Logikai fájl információk",
     title_LFDetails: "Logikai fájl információk",
+    title_LibrariesUsed: "Felhasznált kódkönyvtárak",
+    title_Log: "Log fájl",
     title_LZBrowse: "Lerakatok",
     title_LZBrowse: "Lerakatok",
     title_MemberOf: "Tagja a",
     title_MemberOf: "Tagja a",
     title_Members: "Tagok",
     title_Members: "Tagok",
@@ -489,15 +530,19 @@ define(
     title_Results: "Kimenet",
     title_Results: "Kimenet",
     title_SearchResults: "Keresés eredménye",
     title_SearchResults: "Keresés eredménye",
     title_SourceFiles: "Forrás fájlok",
     title_SourceFiles: "Forrás fájlok",
+    title_Topology: "Topológia",
     title_TpThorStatus: "Thor állapot",
     title_TpThorStatus: "Thor állapot",
     title_UserPermissions: "Felhasználó engedélyei",
     title_UserPermissions: "Felhasználó engedélyei",
     title_UserQuery: "Engedélyek",
     title_UserQuery: "Engedélyek",
     title_WUDetails: "ECL feladat jellemzők",
     title_WUDetails: "ECL feladat jellemzők",
     title_WUQuery: "ECL feladatok",
     title_WUQuery: "ECL feladatok",
+    To: "-ig",
     ToDate: "Dátumig",
     ToDate: "Dátumig",
     Toenablegraphviews: "A gráfok megjelenítéshez telepiteni kell a 'Graph View Control' bővítményt.",
     Toenablegraphviews: "A gráfok megjelenítéshez telepiteni kell a 'Graph View Control' bővítményt.",
     Top: "Felső",
     Top: "Felső",
+    Topology: "Topológia",
     ToSizes: "Méretig",
     ToSizes: "Méretig",
+    TotalClusterTime: "Teljes cluster idő",
     TotalSize: "Összméret",
     TotalSize: "Összméret",
     TotalThorTime: "Összes Thor idő",
     TotalThorTime: "Összes Thor idő",
     TransitionGuide: "Átmenet útmutató",
     TransitionGuide: "Átmenet útmutató",

+ 48 - 2
esp/src/eclwatch/nls/zh/hpcc.js

@@ -33,6 +33,7 @@
     ArchivedOnly: "仅限已存档的工作单元",
     ArchivedOnly: "仅限已存档的工作单元",
     ArchivedWarning: "警告:请指定一个小的日期范围. 否则, 检索时间可能较长,网页浏览器可能超时",
     ArchivedWarning: "警告:请指定一个小的日期范围. 否则, 检索时间可能较长,网页浏览器可能超时",
     AutoRefresh: "自动更新",
     AutoRefresh: "自动更新",
+    Back: "返回",
     BannerColor: "标语的颜色",
     BannerColor: "标语的颜色",
     BannerMessage: "标语的文字",
     BannerMessage: "标语的文字",
     BannerScroll: "标语滚动",
     BannerScroll: "标语滚动",
@@ -59,11 +60,14 @@
     Command: "指令",
     Command: "指令",
     Comment: "注释",
     Comment: "注释",
     Completed: "完成",
     Completed: "完成",
+    ComplexityWarning: "超过{}活动({})- 重新显示?",
     Component: "组成部分",
     Component: "组成部分",
     Compress: "压缩",
     Compress: "压缩",
     Compressed: "已压缩过的",
     Compressed: "已压缩过的",
+    CompressedFileSize: "压缩后的文件长度",
     Configuration: "设置",
     Configuration: "设置",
     ConfirmPassword: "确认密码",
     ConfirmPassword: "确认密码",
+    ConfirmRemoval: "确认",
     Content: "内容",
     Content: "内容",
     Contents: "内容",
     Contents: "内容",
     ContentType: "内容类型",
     ContentType: "内容类型",
@@ -78,12 +82,14 @@
     Debug: "故障诊断",
     Debug: "故障诊断",
     DEF: "DEF",
     DEF: "DEF",
     Delete: "删除",
     Delete: "删除",
+    Deleted: "已删除",
     DeleteSelectedFiles: "删除所选择的文件?",
     DeleteSelectedFiles: "删除所选择的文件?",
     DeleteSelectedGroups: "删除所选择的用户组?",
     DeleteSelectedGroups: "删除所选择的用户组?",
     DeleteSelectedPermissions: "删除所选的权限?",
     DeleteSelectedPermissions: "删除所选的权限?",
     DeleteSelectedQueries: "删除所选择的查询程序?",
     DeleteSelectedQueries: "删除所选择的查询程序?",
     DeleteSelectedUsers: "删除所选择的用户?",
     DeleteSelectedUsers: "删除所选择的用户?",
     DeleteSelectedWorkunits: "删除所选择的工作单元?",
     DeleteSelectedWorkunits: "删除所选择的工作单元?",
+    DeleteSuperfile2: "删除文件集",
     DeleteSuperfile: "删除文件集?",
     DeleteSuperfile: "删除文件集?",
     DeleteThisPackage: "删除文件包?",
     DeleteThisPackage: "删除文件包?",
     Delimited: "定界的",
     Delimited: "定界的",
@@ -92,17 +98,20 @@
     DenyRead: "<center>拒绝<br>读</center>",
     DenyRead: "<center>拒绝<br>读</center>",
     DenyWrite: "<center>拒绝<br>写</center>",
     DenyWrite: "<center>拒绝<br>写</center>",
     Depth: "深度",
     Depth: "深度",
+    DepthTooltip: "最大子图深度",
     Deschedule: "取消运行计划",
     Deschedule: "取消运行计划",
     DescheduleSelectedWorkunits: "取消所选工作单元的计划?",
     DescheduleSelectedWorkunits: "取消所选工作单元的计划?",
     Description: "说明",
     Description: "说明",
     Despray: "复合原文件",
     Despray: "复合原文件",
     Details: "细节",
     Details: "细节",
     DFUServerName: "DFU服务器名",
     DFUServerName: "DFU服务器名",
+    DFUWorkunit: "DFU工作单元",
     Directory: "文件目录",
     Directory: "文件目录",
     DisableScopeScanConfirm: "你确认要禁用范围扫描吗?在DALI重新启动后, 将复归原始的系统设置.",
     DisableScopeScanConfirm: "你确认要禁用范围扫描吗?在DALI重新启动后, 将复归原始的系统设置.",
     DisableScopeScans: "禁用范围扫描",
     DisableScopeScans: "禁用范围扫描",
     DiskUsage: "硬盘使用率",
     DiskUsage: "硬盘使用率",
     Distance: "距离",
     Distance: "距离",
+    DistanceTooltip: "最大相邻活动的距离",
     Dll: "动态联接库",
     Dll: "动态联接库",
     DOT: "DOT",
     DOT: "DOT",
     DOTAttributes: "DOT属性",
     DOTAttributes: "DOT属性",
@@ -112,6 +121,7 @@
     Duration: "时间段",
     Duration: "时间段",
     EBCDIC: "EBCDIC",
     EBCDIC: "EBCDIC",
     ECL: "ECL",
     ECL: "ECL",
+    ECLWorkunit: "ECL工作单元",
     Edges: "连接",
     Edges: "连接",
     Edit: "编辑",
     Edit: "编辑",
     EditDOT: "编辑DOT",
     EditDOT: "编辑DOT",
@@ -158,11 +168,16 @@
     Find: "查找",
     Find: "查找",
     FindNext: "查找下一个",
     FindNext: "查找下一个",
     FindPrevious: "查找前一个",
     FindPrevious: "查找前一个",
+    Finished: "已完成",
     FirstName: "名",
     FirstName: "名",
+    FirstNRows: "初始N行",
     Fixed: "定长的",
     Fixed: "定长的",
+    Folder: "文件夹",
     Format: "格式",
     Format: "格式",
+    Forward: "向前",
     FromDate: "起始日期",
     FromDate: "起始日期",
     FromSizes: "最小文件长度",
     FromSizes: "最小文件长度",
+    FromTime: "起始时间",
     FullName: "姓名",
     FullName: "姓名",
     Graph: "图形",
     Graph: "图形",
     Graphs: "图形",
     Graphs: "图形",
@@ -191,8 +206,8 @@
     IP: "IP",
     IP: "IP",
     IPAddress: "IP地址",
     IPAddress: "IP地址",
     IsLibrary: "程序库",
     IsLibrary: "程序库",
-    JobName: "任务名",
     Jobname: "任务名",
     Jobname: "任务名",
+    JobName: "任务名",
     jsmi: "李名*",
     jsmi: "李名*",
     JSmith: "李名*",
     JSmith: "李名*",
     JSON: "JSON",
     JSON: "JSON",
@@ -205,6 +220,8 @@
     LargestSize: "最大尺寸",
     LargestSize: "最大尺寸",
     LastName: "姓",
     LastName: "姓",
     LastNDays: "过去若干天以内",
     LastNDays: "过去若干天以内",
+    LastNHours: "最后N小时",
+    LastNRows: "最后N行",
     LDAPWarning: "<b>LDAP服务错误:</b>用户太多无法显示,请选用过滤器.",
     LDAPWarning: "<b>LDAP服务错误:</b>用户太多无法显示,请选用过滤器.",
     LegacyForm: "旧式表格",
     LegacyForm: "旧式表格",
     LibrariesUsed: "使用程序库",
     LibrariesUsed: "使用程序库",
@@ -219,6 +236,7 @@
     LoadPackageContentHere: "(把文件包内容上载到这里)",
     LoadPackageContentHere: "(把文件包内容上载到这里)",
     LoadPackageFromFile: "从文件中上载文件包内容",
     LoadPackageFromFile: "从文件中上载文件包内容",
     Local: "局部",
     Local: "局部",
+    Log: "日志",
     LogFile: "日志文件",
     LogFile: "日志文件",
     LoggedInAs: "登录用户",
     LoggedInAs: "登录用户",
     LogicalFile: "逻辑文件",
     LogicalFile: "逻辑文件",
@@ -227,9 +245,12 @@
     LogicalFilesOnly: "逻辑文件",
     LogicalFilesOnly: "逻辑文件",
     LogicalFileType: "逻辑文件类型",
     LogicalFileType: "逻辑文件类型",
     LogicalName: "逻辑文件名",
     LogicalName: "逻辑文件名",
+    Logs: "日志",
     log_analysis_1: "日志_分析_1*",
     log_analysis_1: "日志_分析_1*",
     Low: "低",
     Low: "低",
     ManualCopy: "按Ctrl+C键",
     ManualCopy: "按Ctrl+C键",
+    ManualOverviewSelection: "要求人工检查选项",
+    ManualTreeSelection: "要求人工选择树",
     Mappings: "映像",
     Mappings: "映像",
     Mask: "掩码",
     Mask: "掩码",
     Max: "最大",
     Max: "最大",
@@ -248,6 +269,7 @@
     MonitorShotLimit: "监视发射限制",
     MonitorShotLimit: "监视发射限制",
     MonitorSub: "监视子文件",
     MonitorSub: "监视子文件",
     Month: "月",
     Month: "月",
+    More: "更多",
     MustContainUppercaseAndSymbol: "需含大写字符和符号",
     MustContainUppercaseAndSymbol: "需含大写字符和符号",
     NA: "不适用",
     NA: "不适用",
     Name: "名称",
     Name: "名称",
@@ -303,10 +325,12 @@
     PasswordExpired: "你的密码已过期。请立刻更新。",
     PasswordExpired: "你的密码已过期。请立刻更新。",
     PasswordExpirePostfix: "天过期. 现在更新吗?",
     PasswordExpirePostfix: "天过期. 现在更新吗?",
     PasswordExpirePrefix: "你的登录密码将在",
     PasswordExpirePrefix: "你的登录密码将在",
+    PasswordOpenZAP: "打开ZAP的口令(选项)",
     PasswordsDoNotMatch: "密码不匹配",
     PasswordsDoNotMatch: "密码不匹配",
     Path: "路径",
     Path: "路径",
     PathMask: "路径掩码",
     PathMask: "路径掩码",
     Pause: "暂停",
     Pause: "暂停",
+    PauseNow: "马上暂停",
     PctComplete: "任务完成%",
     PctComplete: "任务完成%",
     PercentDone: "任务完成%",
     PercentDone: "任务完成%",
     PerformingLayout: "图形布局中...",
     PerformingLayout: "图形布局中...",
@@ -316,6 +340,7 @@
     PlaceholderFirstName: "民",
     PlaceholderFirstName: "民",
     PlaceholderLastName: "张",
     PlaceholderLastName: "张",
     Playground: "操作平台",
     Playground: "操作平台",
+    Plugins: "插件",
     Port: "端口",
     Port: "端口",
     Prefix: "前缀",
     Prefix: "前缀",
     PrefixPlaceholder: "文件名{:长度}, 文件大小{:[B|L][1-8]}",
     PrefixPlaceholder: "文件名{:长度}, 文件大小{:[B|L][1-8]}",
@@ -336,13 +361,17 @@
     Quarter: "季",
     Quarter: "季",
     Queries: "查询程序",
     Queries: "查询程序",
     QueriesNoPackage: "与文件包不匹配的查询程序",
     QueriesNoPackage: "与文件包不匹配的查询程序",
+    Query: "查询",
     QueryDetailsfor: "查询程序的详细说明",
     QueryDetailsfor: "查询程序的详细说明",
+    QueryID: "查询程序标识",
     QueryIDPlaceholder: "某查询程序标识",
     QueryIDPlaceholder: "某查询程序标识",
+    QueryName: "查询程序名",
     QueryNamePlaceholder: "某查询程序名",
     QueryNamePlaceholder: "某查询程序名",
     QuerySet: "查询程序集",
     QuerySet: "查询程序集",
     Queue: "队列",
     Queue: "队列",
     Quote: "引用",
     Quote: "引用",
     QuotedTerminator: "引号里的终止符",
     QuotedTerminator: "引号里的终止符",
+    RawTextPage: "原始文本(当前页)",
     RecordCount: "记录数量",
     RecordCount: "记录数量",
     RecordLength: "记录长度",
     RecordLength: "记录长度",
     Records: "记录",
     Records: "记录",
@@ -357,6 +386,8 @@
     RemoteDali: "远程Dali",
     RemoteDali: "远程Dali",
     RemoteDaliIP: "远程&nbsp;Dali&nbsp;IP&nbsp;地址",
     RemoteDaliIP: "远程&nbsp;Dali&nbsp;IP&nbsp;地址",
     Remove: "删除",
     Remove: "删除",
+    RemoveSubfiles: "删除子文件",
+    RemoveUser: "将把你的用户从用户组里删除:",
     Rename: "更名",
     Rename: "更名",
     RenderedSVG: "渲染的SVG",
     RenderedSVG: "渲染的SVG",
     RenderSVG: "渲染SVG",
     RenderSVG: "渲染SVG",
@@ -364,6 +395,8 @@
     RequestSchema: "请求格式",
     RequestSchema: "请求格式",
     Reschedule: "再次加入运行计划",
     Reschedule: "再次加入运行计划",
     Reset: "设置更新",
     Reset: "设置更新",
+    ResetThisQuery: "清零当前查询程序",
+    ResetViewToSelection: "清除",
     Resource: "资源",
     Resource: "资源",
     Resources: "资源",
     Resources: "资源",
     ResponseSchema: "响应格式",
     ResponseSchema: "响应格式",
@@ -376,6 +409,8 @@
     Resume: "恢复",
     Resume: "恢复",
     RetainSuperfileStructure: "保留文件集的结构",
     RetainSuperfileStructure: "保留文件集的结构",
     RetypePassword: "验证密码",
     RetypePassword: "验证密码",
+    Reverse: "反转",
+    RowPath: "行路径",
     Rows: "行",
     Rows: "行",
     RowTag: "行标记",
     RowTag: "行标记",
     RoxieCluster: "Roxie集群",
     RoxieCluster: "Roxie集群",
@@ -414,6 +449,7 @@
     Start: "开始",
     Start: "开始",
     Started: "已开始",
     Started: "已开始",
     State: "状态",
     State: "状态",
+    Stats: "统计",
     Status: "状态",
     Status: "状态",
     Stopped: "已结束",
     Stopped: "已结束",
     Subgraph: "子图",
     Subgraph: "子图",
@@ -422,9 +458,11 @@
     Subtype: "子类",
     Subtype: "子类",
     Summary: "总结",
     Summary: "总结",
     SummaryMessage: "总结信息",
     SummaryMessage: "总结信息",
-    Superfile: "文件集",
     SuperFile: "文件集",
     SuperFile: "文件集",
+    Superfile: "文件集",
+    Superfiles: "文件集",
     SuperFiles: "文件集",
     SuperFiles: "文件集",
+    SuperFilesBelongsTo: "文件集里的文件",
     SuperfilesOnly: "仅含文件集",
     SuperfilesOnly: "仅含文件集",
     Suspend: "暂停使用",
     Suspend: "暂停使用",
     Suspended: "已暂停使用",
     Suspended: "已暂停使用",
@@ -443,6 +481,7 @@
     TargetWuid: "系统/工作单元标识",
     TargetWuid: "系统/工作单元标识",
     Terminators: "终止符",
     Terminators: "终止符",
     TestPages: "测试页面",
     TestPages: "测试页面",
+    Text: "文本",
     ThorMasterAddress: "THOR主服务器的网址",
     ThorMasterAddress: "THOR主服务器的网址",
     ThorNetworkAddress: "Thor网址",
     ThorNetworkAddress: "Thor网址",
     Time: "时间",
     Time: "时间",
@@ -469,8 +508,11 @@
     title_HPCCPlatformMain: "ECL Watch - 首页",
     title_HPCCPlatformMain: "ECL Watch - 首页",
     title_HPCCPlatformOps: "ECL Watch - 运行",
     title_HPCCPlatformOps: "ECL Watch - 运行",
     title_HPCCPlatformRoxie: "ECL Watch - Roxie",
     title_HPCCPlatformRoxie: "ECL Watch - Roxie",
+    title_HPCCPlatformServicesPlugin: "ECL Watch插件",
     title_Inputs: "输入",
     title_Inputs: "输入",
     title_LFDetails: "逻辑文件的详细说明",
     title_LFDetails: "逻辑文件的详细说明",
+    title_LibrariesUsed: "使用的库文件",
+    title_Log: "日志文件",
     title_LZBrowse: "文件停放区",
     title_LZBrowse: "文件停放区",
     title_MemberOf: "隶属",
     title_MemberOf: "隶属",
     title_Members: "成员",
     title_Members: "成员",
@@ -486,15 +528,19 @@
     title_SearchResults: "查询结果",
     title_SearchResults: "查询结果",
     title_SourceFiles: "",
     title_SourceFiles: "",
     title_SourceFiles: "源文件",
     title_SourceFiles: "源文件",
+    title_Topology: "系统结构",
     title_TpThorStatus: "状态",
     title_TpThorStatus: "状态",
     title_UserPermissions: "用户使用权限",
     title_UserPermissions: "用户使用权限",
     title_UserQuery: "使用权限",
     title_UserQuery: "使用权限",
     title_WUDetails: "ECL工作单元的详细说明",
     title_WUDetails: "ECL工作单元的详细说明",
     title_WUQuery: "ECL工作单元查询程序",
     title_WUQuery: "ECL工作单元查询程序",
+    To: "到",
     ToDate: "截止日期",
     ToDate: "截止日期",
     Toenablegraphviews: "在使用图形阅读器前,请先安装图形控制器",
     Toenablegraphviews: "在使用图形阅读器前,请先安装图形控制器",
     Top: "上部",
     Top: "上部",
+    Topology: "系统结构",
     ToSizes: "最大文件长度",
     ToSizes: "最大文件长度",
+    TotalClusterTime: "集群服务器累积时间",
     TotalSize: "总尺寸",
     TotalSize: "总尺寸",
     TotalThorTime: "在Thor上的时间",
     TotalThorTime: "在Thor上的时间",
     TransitionGuide: "转换指南",
     TransitionGuide: "转换指南",

+ 135 - 0
plugins/memcached/README.md

@@ -0,0 +1,135 @@
+ECL Memcached Plugin
+================
+
+This is the ECL plugin to utilize the volatile key-value cache [Memcached](http://memcached.org).
+It utilises the C API [libmemcached](http://libmemcached.org/libMemcached.html).
+
+Installation and Dependencies
+----------------------------
+
+To build the memcached plugin with the HPCC-Platform, libmemcached-dev is required.
+```
+sudo apt-get install libmemcached-dev
+```
+
+The memcached daemon can be obtained via - [source](http://memcached.org/downloads) or the preferred method:
+```
+sudo apt-get install memcached
+```
+
+*Note:* **libmemcached** 0.53 or greater is required to use this plugin as intended. It is advised to use the newest version of **memcached** possible to you.
+
+
+Getting started
+---------------
+
+The daemon can be started by typing `memcached -d` within a terminal. To run with with a non-default configuration, for example to listen on another **IP** and **port** -
+`memcached -d -l <ip> -p <port>`. When wishing to use a pool of memcached servers, each instance must be started, bound to the **IP** that makes it visible to the other
+instances, e.g. the default `memcached -d` on all machines will not work as they will all be bound to the localhost loopback, 127.0.0.1.
+
+This plugin forces the **_binary-only_** communication protocol and therefore **memcached** cannot be started in its ASCII mode, i.e. `memcached -b ascii`.
+
+*Note:* The default memcached **port** is 11211 and that if multiple and individual caches are required then they are by definition memacached instances with different ports.
+
+Further documentation is available [here](https://code.google.com/p/memcached/wiki/NewStart).
+
+The Actual Plugin
+-----------------
+
+The bulk of this memcached plugin for **ECL** is made up of the various `SET` and `GET` commands e.g. `GetString` or `SetReal`. They are accessible via the module `memcached`
+from the memcached plugin **ECL** library `lib-memcached`. i.e.
+```
+IMPORT memcached FROM lib_memcached;
+```
+Here is a list of the core plugin **functions**.
+
+###Set
+```
+SetUnicode (CONST VARSTRING key, CONST UNICODE value, CONST VARSTRING options, CONST VARSTRING partitionKey = '', UNSIGNED expire = 0)
+SetString  (CONST VARSTRING key, CONST STRING value,  CONST VARSTRING options, CONST VARSTRING partitionKey = '', UNSIGNED expire = 0)
+SetUtf8    (CONST VARSTRING key, CONST UTF8 value,    CONST VARSTRING options, CONST VARSTRING partitionKey = '', UNSIGNED expire = 0)
+SetBoolean (CONST VARSTRING key, BOOLEAN value,       CONST VARSTRING options, CONST VARSTRING partitionKey = '', UNSIGNED expire = 0)
+SetReal    (CONST VARSTRING key, REAL value,          CONST VARSTRING options, CONST VARSTRING partitionKey = '', UNSIGNED expire = 0)
+SetInteger (CONST VARSTRING key, INTEGER value,       CONST VARSTRING options, CONST VARSTRING partitionKey = '', UNSIGNED expire = 0)
+SetUnsigned(CONST VARSTRING key, UNSIGNED value,      CONST VARSTRING options, CONST VARSTRING partitionKey = '', UNSIGNED expire = 0)
+SetData    (CONST VARSTRING key, CONST DATA value,    CONST VARSTRING options, CONST VARSTRING partitionKey = '', UNSIGNED expire = 0)
+```
+
+###Get
+```
+INTEGER8   GetInteger(CONST VARSTRING key, CONST VARSTRING options, CONST VARSTRING partitionKey = '')
+UNSIGNED8 GetUnsigned(CONST VARSTRING key, CONST VARSTRING options, CONST VARSTRING partitionKey = '')
+STRING      GetString(CONST VARSTRING key, CONST VARSTRING options, CONST VARSTRING partitionKey = '')
+UNICODE    GetUnicode(CONST VARSTRING key, CONST VARSTRING options, CONST VARSTRING partitionKey = '')
+UTF8          GetUtf8(CONST VARSTRING key, CONST VARSTRING options, CONST VARSTRING partitionKey = '')
+BOOLEAN    GetBoolean(CONST VARSTRING key, CONST VARSTRING options, CONST VARSTRING partitionKey = '')
+REAL          GetReal(CONST VARSTRING key, CONST VARSTRING options, CONST VARSTRING partitionKey = '')
+DATA          GetData(CONST VARSTRING key, CONST VARSTRING options, CONST VARSTRING partitionKey = '')
+```
+
+###Utility
+```
+BOOLEAN Exists(CONST VARSTRING key, CONST VARSTRING options, CONST VARSTRING partitionKey = '')
+CONST VARSTRING KeyType(CONST VARSTRING key, CONST VARSTRING options, CONST VARSTRING partitionKey = '')
+Clear(CONST VARSTRING options)
+Delete(CONST VARSTRING key, CONST VARSTRING options, CONST VARSTRING partitionKey = '')
+```
+
+The core points to note here are:
+   * There is a **SET** and **GET** function associated with each fundamental **ECL** type. These must be used for and with their correct *value* types! Miss-use *should* result
+   in an runtime exception, however, this is only conditional on having the value retrieved from the server fitting into memory of the requested type. E.g. it is possible for a
+   STRING of length 8, set with SetString, being successfully retrieved from the cache via GetInteger without an **ECL** exception being thrown. A warning is added to the
+   local log file when this occurs.
+   * `CONST VARSTRING options` passes the server **IP** and **port** to the plugin in the *strict* format - `--SERVER=<ip>:<port>`. Multiple server use simply requires all
+   to be specified e.g. `--SERVER=192.168.1.98:11211 --SERVER=192.168.1.97:11211`. In addition a variety of options are passed in with this string e.g **_timeout_ _values_**.
+   A full list of possible options exists [here](http://docs.libmemcached.org/libmemcached_configuration.html).
+   * `UNSIGNED expire` has units seconds and a default of **0**, i.e. *forever*. *Note:* Anything above 30 days is treated as a unix timestamp.
+   * The default timeout is 1 second.
+   * `KeyType()` returns the **ECL** type as an **ECL** `VARSTRING`, i.e. `STRING` or `UNSIGNED`, or `UNKNOWN` if the value was set externally from this plugin
+   without a type specifier. *c.f.* Behaviour and Implementation Details below for further details.
+
+
+###An Memcached 'Partition Key'
+A *partition key* supplied to a `SET` will be hashed with the key and thus distribute the key-value pair according to this hash, such that all keys with the same
+*partition key* are on the same server. The notion of a partition is physical rather than logical. A *partition key* should therefore **_not_** be used with only
+a single memcached server. Observer the following two examples with servers started as `memcached -d -l 192.168.1.97` and `memcached -d -l 192.168.1.98`.
+
+```
+IMPORT memcached FROM lib_memcached;
+
+STRING server1 := '--SERVER=192.168.1.97:11211';
+REAL pi := 3.14159265359;
+
+SEQUENTIAL(
+    memcached.SetReal('pi', pi, server1);
+    memcached.SetReal('pi', pi*pi, server1, 'pi again');
+
+    memcached.GetReal('pi', server1);                                 //returns 9.869604401090658
+    memcached.GetReal('pi', server1, 'pi again');                     //returns 9.869604401090658
+    memcached.GetReal('pi', server1, 'you\'d think this would fail'); //returns 9.869604401090658
+    memcached.Clear(server1);
+    );
+
+STRING servers := server1 + ' --SERVER=192.168.1.98:11211';
+SEQUENTIAL(
+    memcached.SetReal('pi', pi, servers);
+    memcached.SetReal('pi', pi*pi, servers, 'pi again');
+
+    memcached.GetReal('pi', servers);                                 //returns 3.14159265359
+    memcached.GetReal('pi', servers, 'pi again');                     //returns 9.869604401090658
+    memcached.GetReal('pi', servers, 'you\'d think this would fail'); //returns 3.14159265359
+    memcached.Clear(servers);
+    );
+```
+
+*NOTE:* **libmemcached** uses a separate set of functions when using a *partition key*. When this plugin's default is used, the empty string is not hashed with the key,
+instead the non-partition-key functions are used.
+
+Behaviour and Implementation Details
+------------------------------------
+A few notes to point out here:
+   * When a key and value are stored with Set<type>, memcached also allows for a 4byte flag to be stored. This plugin utilizes this space to store an enumeration specifying the
+   **ECL** type that is being stored. Care should therefore be taken when using KeyType(<key>) when the key was set from a client other than this plugin.
+   * The following libmemcached settings are invoked by default for this plugin, all of which take precedence over any passed in via the `options` string:
+   **MEMCACHED_BEHAVIOR_KETAMA** = 1, **MEMCACHED_BEHAVIOR_USE_UDP** = 0, **MEMCACHED_BEHAVIOR_NO_BLOCK** = 0, **MEMCACHED_BEHAVIOR_BUFFER_REQUESTS** = 0,
+   **MEMCACHED_BEHAVIOR_BINARY_PROTOCOL** = 1.

+ 1 - 0
plugins/memcached/lib_memcached.ecllib

@@ -37,4 +37,5 @@ export memcached := SERVICE : plugin('memcached'), namespace('MemCachedPlugin')
   BOOLEAN Exists(CONST VARSTRING key, CONST VARSTRING options, CONST VARSTRING partitionKey = '') : cpp,action,context,entrypoint='MExists';
   BOOLEAN Exists(CONST VARSTRING key, CONST VARSTRING options, CONST VARSTRING partitionKey = '') : cpp,action,context,entrypoint='MExists';
   CONST VARSTRING KeyType(CONST VARSTRING key, CONST VARSTRING options, CONST VARSTRING partitionKey = '') : cpp,action,context,entrypoint='MKeyType'; //NOTE: calls get
   CONST VARSTRING KeyType(CONST VARSTRING key, CONST VARSTRING options, CONST VARSTRING partitionKey = '') : cpp,action,context,entrypoint='MKeyType'; //NOTE: calls get
   Clear(CONST VARSTRING options) : cpp,action,context,entrypoint='MClear';
   Clear(CONST VARSTRING options) : cpp,action,context,entrypoint='MClear';
+  Delete(CONST VARSTRING key, CONST VARSTRING options, CONST VARSTRING partionKey = '') : cpp,action,context,entrypoint='MDelete';
 END;
 END;

+ 18 - 72
plugins/memcached/memcachedplugin.cpp

@@ -97,6 +97,7 @@ public :
 
 
     void clear(ICodeContext * ctx, unsigned when);
     void clear(ICodeContext * ctx, unsigned when);
     bool exists(ICodeContext * ctx, const char * key, const char * partitionKey);
     bool exists(ICodeContext * ctx, const char * key, const char * partitionKey);
+    void deleteKey(ICodeContext * ctx, const char * key, const char * partitionKey);
     eclDataType getKeyType(const char * key, const char * partitionKey);
     eclDataType getKeyType(const char * key, const char * partitionKey);
 
 
     bool isSameConnection(const char * _options) const;
     bool isSameConnection(const char * _options) const;
@@ -109,10 +110,6 @@ private :
     bool logErrorOnFail(ICodeContext * ctx, memcached_return_t rc, const char * _msg);
     bool logErrorOnFail(ICodeContext * ctx, memcached_return_t rc, const char * _msg);
     void reportKeyTypeMismatch(ICodeContext * ctx, const char * key, uint32_t flag, eclDataType eclType);
     void reportKeyTypeMismatch(ICodeContext * ctx, const char * key, uint32_t flag, eclDataType eclType);
     void * cpy(const char * src, size_t length);
     void * cpy(const char * src, size_t length);
-    void logServerStats(ICodeContext * ctx);
-    void init(ICodeContext * ctx);
-    void invokePoolSecurity(ICodeContext * ctx);
-    void invokeConnectionSecurity(ICodeContext * ctx);
     void setPoolSettings();
     void setPoolSettings();
     void assertPool();//For internal purposes to insure correct order of the above processes and instantiation.
     void assertPool();//For internal purposes to insure correct order of the above processes and instantiation.
 
 
@@ -120,7 +117,6 @@ private :
     memcached_st * connection;
     memcached_st * connection;
     memcached_pool_st * pool;
     memcached_pool_st * pool;
     StringAttr options;
     StringAttr options;
-    bool alreadyInitialized;
     unsigned typeMismatchCount;
     unsigned typeMismatchCount;
 };
 };
 
 
@@ -298,13 +294,9 @@ void MemCachedPlugin::MCached::getVoidPtrLenPair(ICodeContext * ctx, const char
     returnValue = reinterpret_cast<void*>(cpy(value, returnLength));
     returnValue = reinterpret_cast<void*>(cpy(value, returnLength));
 }
 }
 
 
-MemCachedPlugin::MCached::MCached(ICodeContext * ctx, const char * _options)
+MemCachedPlugin::MCached::MCached(ICodeContext * ctx, const char * _options) : connection(NULL), pool(NULL), typeMismatchCount(0)
 {
 {
-    alreadyInitialized = false;
-    connection = NULL;
-    pool = NULL;
     options.set(_options);
     options.set(_options);
-    typeMismatchCount = 0;
 
 
 #if (LIBMEMCACHED_VERSION_HEX<0x53000)
 #if (LIBMEMCACHED_VERSION_HEX<0x53000)
     memcached_st *memc = memcached_create(NULL);
     memcached_st *memc = memcached_create(NULL);
@@ -363,7 +355,6 @@ MemCachedPlugin::MCached::MCached(ICodeContext * ctx, const char * _options)
     assertPool();
     assertPool();
 
 
     setPoolSettings();
     setPoolSettings();
-    invokePoolSecurity(ctx);
     connect(ctx);
     connect(ctx);
     checkServersUp(ctx);
     checkServersUp(ctx);
 }
 }
@@ -496,7 +487,16 @@ bool MemCachedPlugin::MCached::exists(ICodeContext * ctx, const char * key, cons
     }
     }
 #endif
 #endif
 }
 }
-
+void MemCachedPlugin::MCached::deleteKey(ICodeContext * ctx, const char * key, const char * partitionKey)
+{
+    memcached_return_t rc;
+    size_t partitionKeyLength = strlen(partitionKey);
+    if (partitionKeyLength)
+        rc = memcached_delete_by_key(connection, partitionKey, partitionKeyLength, key, strlen(key), (time_t)0);
+    else
+        rc = memcached_delete(connection, key, strlen(key), (time_t)0);
+    assertOnError(rc, "'Delete' request failed - ");
+}
 MemCachedPlugin::eclDataType MemCachedPlugin::MCached::getKeyType(const char * key, const char * partitionKey)
 MemCachedPlugin::eclDataType MemCachedPlugin::MCached::getKeyType(const char * key, const char * partitionKey)
 {
 {
     size_t returnValueLength;
     size_t returnValueLength;
@@ -530,72 +530,20 @@ void MemCachedPlugin::MCached::reportKeyTypeMismatch(ICodeContext * ctx, const c
     }
     }
 }
 }
 
 
-void MemCachedPlugin::MCached::logServerStats(ICodeContext * ctx)
-{
-    //NOTE: errors are ignored here so that at least some info is reported, such as non-connection related libmemcached version numbers
-    memcached_return_t rc;
-    char * args = NULL;
-
-    OwnedMalloc<memcached_stat_st> stats;
-    stats.setown(memcached_stat(connection, args, &rc));
-
-    OwnedMalloc<char*> keys;
-    keys.setown(memcached_stat_get_keys(connection, stats, &rc));
-
-    unsigned int numberOfServers = memcached_server_count(connection);
-    for (unsigned int i = 0; i < numberOfServers; ++i)
-    {
-        StringBuffer statsStr;
-        unsigned j = 0;
-        do
-        {
-            OwnedMalloc<char> value;
-            value.setown(memcached_stat_get_value(connection, &stats[i], keys[j], &rc));
-            statsStr.newline().append("libmemcached server stat - ").append(keys[j]).append(":").append(value);
-        } while (keys[++j]);
-        statsStr.newline().append("libmemcached client stat - libmemcached version:").append(memcached_lib_version());
-        ctx->logString(statsStr.str());
-    }
-}
-
-void MemCachedPlugin::MCached::init(ICodeContext * ctx)
-{
-    logServerStats(ctx);
-}
-
 void MemCachedPlugin::MCached::setPoolSettings()
 void MemCachedPlugin::MCached::setPoolSettings()
 {
 {
     assertPool();
     assertPool();
     const char * msg = "memcached_pool_behavior_set failed - ";
     const char * msg = "memcached_pool_behavior_set failed - ";
-    assertOnError(memcached_pool_behavior_set(pool, MEMCACHED_BEHAVIOR_HASH_WITH_PREFIX_KEY, 1), msg);//key set in invokeConnectionSecurity. Only hashed with keys and not partitionKeys
     assertOnError(memcached_pool_behavior_set(pool, MEMCACHED_BEHAVIOR_KETAMA, 1), msg);//NOTE: alias of MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA amongst others.
     assertOnError(memcached_pool_behavior_set(pool, MEMCACHED_BEHAVIOR_KETAMA, 1), msg);//NOTE: alias of MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA amongst others.
     memcached_pool_behavior_set(pool, MEMCACHED_BEHAVIOR_USE_UDP, 0);  // Note that this fails on early versions of libmemcached, so ignore result
     memcached_pool_behavior_set(pool, MEMCACHED_BEHAVIOR_USE_UDP, 0);  // Note that this fails on early versions of libmemcached, so ignore result
-    assertOnError(memcached_pool_behavior_set(pool, MEMCACHED_BEHAVIOR_SERVER_FAILURE_LIMIT, 1), msg);
-#if (LIBMEMCACHED_VERSION_HEX>=0x50000)
-    assertOnError(memcached_pool_behavior_set(pool, MEMCACHED_BEHAVIOR_REMOVE_FAILED_SERVERS, 1), msg);
-#endif
     assertOnError(memcached_pool_behavior_set(pool, MEMCACHED_BEHAVIOR_NO_BLOCK, 0), msg);
     assertOnError(memcached_pool_behavior_set(pool, MEMCACHED_BEHAVIOR_NO_BLOCK, 0), msg);
     assertOnError(memcached_pool_behavior_set(pool, MEMCACHED_BEHAVIOR_CONNECT_TIMEOUT, 1000), msg);//units of ms.
     assertOnError(memcached_pool_behavior_set(pool, MEMCACHED_BEHAVIOR_CONNECT_TIMEOUT, 1000), msg);//units of ms.
     assertOnError(memcached_pool_behavior_set(pool, MEMCACHED_BEHAVIOR_SND_TIMEOUT, 1000000), msg);//units of mu-s.
     assertOnError(memcached_pool_behavior_set(pool, MEMCACHED_BEHAVIOR_SND_TIMEOUT, 1000000), msg);//units of mu-s.
     assertOnError(memcached_pool_behavior_set(pool, MEMCACHED_BEHAVIOR_RCV_TIMEOUT, 1000000), msg);//units of mu-s.
     assertOnError(memcached_pool_behavior_set(pool, MEMCACHED_BEHAVIOR_RCV_TIMEOUT, 1000000), msg);//units of mu-s.
-    assertOnError(memcached_pool_behavior_set(pool, MEMCACHED_BEHAVIOR_BUFFER_REQUESTS, 0), msg);// Buffering does not work with the ecl runtime paradigm
-}
-
-void MemCachedPlugin::MCached::invokePoolSecurity(ICodeContext * ctx)
-{
-    assertPool();
+    assertOnError(memcached_pool_behavior_set(pool, MEMCACHED_BEHAVIOR_BUFFER_REQUESTS, 0), msg);
     assertOnError(memcached_pool_behavior_set(pool, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, 1), "memcached_pool_behavior_set failed - ");
     assertOnError(memcached_pool_behavior_set(pool, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, 1), "memcached_pool_behavior_set failed - ");
 }
 }
 
 
-void MemCachedPlugin::MCached::invokeConnectionSecurity(ICodeContext * ctx)
-{
-    //NOTE: Whether to assert or just report? This depends on when this is called. If before checkServersUp() and
-    //a server is down, it will cause the following to fail if asserted with only a 'poor' libmemcached error message.
-    //Reporting means that these 'security' measures may not be carried out. Moving checkServersUp() to here is probably the best
-    //soln. however, this comes with extra overhead.
-    logErrorOnFail(ctx, memcached_verbosity(connection, (uint32_t)(0)), "memcached_verbosity=0 failed - ");
-}
-
 void MemCachedPlugin::MCached::connect(ICodeContext * ctx)
 void MemCachedPlugin::MCached::connect(ICodeContext * ctx)
 {
 {
     assertPool();
     assertPool();
@@ -611,13 +559,6 @@ void MemCachedPlugin::MCached::connect(ICodeContext * ctx)
 #else
 #else
     connection = memcached_pool_fetch(pool, (struct timespec *)0 , &rc);
     connection = memcached_pool_fetch(pool, (struct timespec *)0 , &rc);
 #endif
 #endif
-    invokeConnectionSecurity(ctx);
-
-    if (!alreadyInitialized)//Do this now rather than after assert. Better to have something even if it could be jiberish.
-    {
-        init(ctx);//doesn't necessarily initialize anything, instead outputs specs etc for debugging
-        alreadyInitialized = true;
-    }
     assertOnError(rc, "memcached_pool_pop failed - ");
     assertOnError(rc, "memcached_pool_pop failed - ");
 }
 }
 
 
@@ -640,6 +581,11 @@ ECL_MEMCACHED_API const char * ECL_MEMCACHED_CALL MKeyType(ICodeContext * ctx, c
     const char * keyType = enumToStr(serverPool->getKeyType(key, partitionKey));
     const char * keyType = enumToStr(serverPool->getKeyType(key, partitionKey));
     return keyType;
     return keyType;
 }
 }
+ECL_MEMCACHED_API void ECL_MEMCACHED_CALL MDelete(ICodeContext * ctx, const char * key, const char * options, const char * partitionKey)
+{
+    OwnedMCached serverPool = MemCachedPlugin::createConnection(ctx, options);
+    serverPool->deleteKey(ctx, key, partitionKey);
+}
 //-----------------------------------SET------------------------------------------
 //-----------------------------------SET------------------------------------------
 //NOTE: These were all overloaded by 'value' type, however; this caused problems since ecl implicitly casts and doesn't type check.
 //NOTE: These were all overloaded by 'value' type, however; this caused problems since ecl implicitly casts and doesn't type check.
 ECL_MEMCACHED_API void ECL_MEMCACHED_CALL MSet(ICodeContext * ctx, const char * key, size32_t valueLength, const char * value, const char * options, const char * partitionKey, unsigned __int64 expire /* = 0 (ECL default)*/)
 ECL_MEMCACHED_API void ECL_MEMCACHED_CALL MSet(ICodeContext * ctx, const char * key, size32_t valueLength, const char * value, const char * options, const char * partitionKey, unsigned __int64 expire /* = 0 (ECL default)*/)

+ 1 - 0
plugins/memcached/memcachedplugin.hpp

@@ -65,6 +65,7 @@ namespace MemCachedPlugin {
     ECL_MEMCACHED_API bool             ECL_MEMCACHED_CALL MExists (ICodeContext * _ctx, const char * key, const char * options, const char * partitionKey);
     ECL_MEMCACHED_API bool             ECL_MEMCACHED_CALL MExists (ICodeContext * _ctx, const char * key, const char * options, const char * partitionKey);
     ECL_MEMCACHED_API const char *     ECL_MEMCACHED_CALL MKeyType(ICodeContext * _ctx, const char * key, const char * options, const char * partitionKey);
     ECL_MEMCACHED_API const char *     ECL_MEMCACHED_CALL MKeyType(ICodeContext * _ctx, const char * key, const char * options, const char * partitionKey);
     ECL_MEMCACHED_API void             ECL_MEMCACHED_CALL MClear  (ICodeContext * _ctx, const char * options);
     ECL_MEMCACHED_API void             ECL_MEMCACHED_CALL MClear  (ICodeContext * _ctx, const char * options);
+    ECL_MEMCACHED_API void             ECL_MEMCACHED_CALL MDelete (ICodeContext * _ctx, const char * key, const char * options, const char * partitionKey);
 }//close namespace
 }//close namespace
 }
 }
 #endif
 #endif

+ 12 - 0
testing/regress/ecl/key/memcachedtest.xml

@@ -46,3 +46,15 @@
 <Dataset name='Result 16'>
 <Dataset name='Result 16'>
  <Row><Result_16>false</Result_16></Row>
  <Row><Result_16>false</Result_16></Row>
 </Dataset>
 </Dataset>
+<Dataset name='Result 17'>
+ <Row><Result_17>true</Result_17></Row>
+</Dataset>
+<Dataset name='Result 18'>
+ <Row><Result_18>false</Result_18></Row>
+</Dataset>
+<Dataset name='Result 19'>
+ <Row><Result_19>true</Result_19></Row>
+</Dataset>
+<Dataset name='Result 20'>
+ <Row><Result_20>false</Result_20></Row>
+</Dataset>

+ 13 - 1
testing/regress/ecl/memcachedtest.ecl

@@ -87,6 +87,18 @@ SEQUENTIAL(
     memcached.Exists('testExpire', servers);
     memcached.Exists('testExpire', servers);
     Std.System.Debug.Sleep(9 * 1000);
     Std.System.Debug.Sleep(9 * 1000);
     memcached.Exists('testExpire', servers);
     memcached.Exists('testExpire', servers);
-    Std.System.Debug.Sleep(1 * 1000);
+    Std.System.Debug.Sleep(2 * 1000);
     memcached.Exists('testExpire', servers);
     memcached.Exists('testExpire', servers);
     );
     );
+
+SEQUENTIAL(
+    memcached.SetString('testDelete', 'foobar', servers);
+    memcached.Exists('testDelete', servers);
+    memcached.Delete('testDelete', servers);
+    memcached.Exists('testDelete', servers);
+
+    memcached.SetString('testDelete', 'foobar', servers, 'hashWithThis');
+    memcached.Exists('testDelete', servers, 'hashWithThis');
+    memcached.Delete('testDelete', servers, 'hashWithThis');
+    memcached.Exists('testDelete', servers, 'hashWithThis');
+    );

+ 4 - 1
thorlcr/activities/thdiskbaseslave.cpp

@@ -315,9 +315,12 @@ void CDiskWriteSlaveActivityBase::open()
     if (extend)
     if (extend)
         ActPrintLog("Extending file %s", fName.get());
         ActPrintLog("Extending file %s", fName.get());
 
 
+    /* Fixed length record size is used when outputting compressed stream to determine run-length compression vs default LZW compression.
+     * NB: only for FLAT files, not CSV or XML
+     */
     size32_t diskRowMinSz = 0;
     size32_t diskRowMinSz = 0;
     IOutputMetaData *diskRowMeta = diskHelperBase->queryDiskRecordSize()->querySerializedDiskMeta();
     IOutputMetaData *diskRowMeta = diskHelperBase->queryDiskRecordSize()->querySerializedDiskMeta();
-    if (diskRowMeta->isFixedSize())
+    if (diskRowMeta->isFixedSize() && (TAKdiskwrite == container.getKind()))
     {
     {
         diskRowMinSz = diskRowMeta->getMinRecordSize();
         diskRowMinSz = diskRowMeta->getMinRecordSize();
         if (grouped)
         if (grouped)