浏览代码

Merge branch 'candidate-5.2.4' into candidate-5.4.0

Signed-off-by: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 10 年之前
父节点
当前提交
a7d9759a73

+ 37 - 10
docs/ECLLanguageReference/ECLR_mods/RecordStructure.xml

@@ -82,7 +82,7 @@
           <emphasis>#OPTION(maxLength,####)</emphasis> to change the default).
           <emphasis>#OPTION(maxLength,####)</emphasis> to change the default).
           The maximum record size should be set as conservatively as possible,
           The maximum record size should be set as conservatively as possible,
           and is better set on a per-field basis (see the <emphasis
           and is better set on a per-field basis (see the <emphasis
-          role="bold">Field Modifiers</emphasis>section below).</entry>
+          role="bold">Field Modifiers </emphasis>section below).</entry>
         </row>
         </row>
 
 
         <row>
         <row>
@@ -598,11 +598,11 @@ END;</programlisting>
             XPATH(</emphasis>'<emphasis>tag</emphasis>'<emphasis role="bold">)
             XPATH(</emphasis>'<emphasis>tag</emphasis>'<emphasis role="bold">)
             }</emphasis></entry>
             }</emphasis></entry>
 
 
-            <entry>Specifies the XML <emphasis>tag</emphasis> that contains
-            the data, in a RECORD structure that defines XML data. This
-            overrides the default <emphasis>tag</emphasis> name (the lowercase
-            field <emphasis>identifier</emphasis>). See the <emphasis
-            role="bold">XPATH Support</emphasis> section below for
+            <entry>Specifies the XML or JSON <emphasis>tag</emphasis> that
+            contains the data, in a RECORD structure that defines XML or JSON
+            data. This overrides the default <emphasis>tag</emphasis> name
+            (the lowercase field <emphasis>identifier</emphasis>). See the
+            <emphasis role="bold">XPATH Support</emphasis> section below for
             details.</entry>
             details.</entry>
           </row>
           </row>
 
 
@@ -739,7 +739,7 @@ END;</programlisting>
     multiple times, you must use the ordinal operation (for example,
     multiple times, you must use the ordinal operation (for example,
     /foo[1]/bar) to explicit select the first occurrence.</para>
     /foo[1]/bar) to explicit select the first occurrence.</para>
 
 
-    <para>For XML DATASET reading and processing results of the
+    <para>For XML or JSON DATASETs reading and processing results of the
     SOAPCALL<indexterm>
     SOAPCALL<indexterm>
         <primary>SOAPCALL</primary>
         <primary>SOAPCALL</primary>
       </indexterm> function, the following XPATH syntax is specifically
       </indexterm> function, the following XPATH syntax is specifically
@@ -819,12 +819,12 @@ SET OF STRING Npeople{xpath('Name')};
 SET OF STRING Xpeople{xpath('/Name/@id')};
 SET OF STRING Xpeople{xpath('/Name/@id')};
     //matches: &lt;Name id='Kevin'/&gt;&lt;Name id='Richard'/&gt;</programlisting>
     //matches: &lt;Name id='Kevin'/&gt;&lt;Name id='Richard'/&gt;</programlisting>
 
 
-    <para>For writing XML files using OUTPUT, the rules are similar with the
-    following exceptions:</para>
+    <para>For writing XML or JSON files using OUTPUT, the rules are similar
+    with the following exceptions:</para>
 
 
     <itemizedlist>
     <itemizedlist>
       <listitem>
       <listitem>
-        <para>For scalar fields, simple tag names and XML attributes are
+        <para>For scalar fields, simple tag names and XML/JSON attributes are
         supported.</para>
         supported.</para>
       </listitem>
       </listitem>
 
 
@@ -1017,6 +1017,33 @@ OUTPUT(ds,,'~RTTEST::XMLtest2',
      &lt;/RECORDS&gt;
      &lt;/RECORDS&gt;
  */</programlisting>
  */</programlisting>
 
 
+    <para>XPATH can also be used to define a JSON file</para>
+
+    <programlisting>/* a JSON  file called "MyBooks.json" contains this data:
+[
+  {
+    "id" : "978-0641723445",
+    "name" : "The Lightning Thief",
+    "author" : "Rick Riordan"
+  }
+,
+  {
+    "id" : "978-1423103349",
+    "name" : "The Sea of Monsters",
+    "author" : "Rick Riordan"
+  }
+]
+*/
+
+BookRec := RECORD
+  STRING ID {XPATH('id')}; //data from id tag -- renames field to uppercase
+  STRING title {XPATH('name')}; //data from name tag, renaming the field
+  STRING author; //data from author tag, tag name is lowercase and matches field name  
+END;
+
+books := DATASET('~jd::mybooks.json',BookRec,JSON('/'));
+OUTPUT(books);</programlisting>
+
     <para>See Also: <link linkend="DATASET">DATASET</link>, <link
     <para>See Also: <link linkend="DATASET">DATASET</link>, <link
     linkend="DICTIONARY">DICTIONARY</link>, <link
     linkend="DICTIONARY">DICTIONARY</link>, <link
     linkend="INDEX_record_structure">INDEX</link>, <link
     linkend="INDEX_record_structure">INDEX</link>, <link

+ 122 - 2
docs/ECLLanguageReference/ECLR_mods/Recrd-DATASET.xml

@@ -96,7 +96,7 @@
 
 
           <entry>One of the following keywords, optionally followed by
           <entry>One of the following keywords, optionally followed by
           relevant options for that specific type of file: THOR /FLAT, CSV,
           relevant options for that specific type of file: THOR /FLAT, CSV,
-          XML, PIPE. Each of these is discussed in its own section,
+          XML, JSON, PIPE. Each of these is discussed in its own section,
           below.</entry>
           below.</entry>
         </row>
         </row>
 
 
@@ -302,7 +302,7 @@
 
 
   <para>The first two forms are alternatives to each other and either may be
   <para>The first two forms are alternatives to each other and either may be
   used with any of the <emphasis>filetypes</emphasis> described below
   used with any of the <emphasis>filetypes</emphasis> described below
-  (<emphasis role="bold">THOR/FLAT, CSV, XML, PIPE</emphasis>).</para>
+  (<emphasis role="bold">THOR/FLAT, CSV, XML, JSON, PIPE</emphasis>).</para>
 
 
   <para>The third form defines the result of an OUTPUT with the NAMED option
   <para>The third form defines the result of an OUTPUT with the NAMED option
   within the same workunit or the workunit specified by the
   within the same workunit or the workunit specified by the
@@ -819,6 +819,126 @@ END;
 books := DATASET('MyFile',rform,XML('library/book'));</programlisting>
 books := DATASET('MyFile',rform,XML('library/book'));</programlisting>
   </sect2>
   </sect2>
 
 
+  <sect2 id="JSON_Files">
+    <title>JSON Files</title>
+
+    <para><emphasis> attr</emphasis><emphasis role="bold"> :=
+    DATASET(</emphasis><emphasis> file, struct, </emphasis><emphasis
+    role="bold">JSON<indexterm>
+        <primary>JSON</primary>
+      </indexterm>( </emphasis><emphasis>xpath</emphasis><emphasis
+    role="bold"> [, NOROOT<indexterm>
+        <primary>NOROOT</primary>
+      </indexterm> ] ) [,ENCRYPT<indexterm>
+        <primary>ENCRYPT</primary>
+      </indexterm>(</emphasis><emphasis>key</emphasis><emphasis role="bold">)
+    ]);</emphasis></para>
+
+    <informaltable colsep="1" frame="all" rowsep="1">
+      <tgroup cols="2">
+        <colspec align="left" colwidth="122.40pt" />
+
+        <colspec />
+
+        <tbody>
+          <row>
+            <entry><emphasis role="bold">JSON</emphasis></entry>
+
+            <entry>Specifies the <emphasis>file</emphasis> is a JSON
+            file.</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>xpath</emphasis></entry>
+
+            <entry>A string constant containing the full XPATH to the tag that
+            delimits the records in the <emphasis>file</emphasis>.</entry>
+          </row>
+
+          <row>
+            <entry><emphasis role="bold">NOROOT</emphasis></entry>
+
+            <entry>Specifies the <emphasis>file</emphasis> is a JSON file with
+            no root level markup, only a collection of objects.</entry>
+          </row>
+
+          <row>
+            <entry><emphasis role="bold"><emphasis
+            role="bold">ENCRYPT</emphasis></emphasis></entry>
+
+            <entry>Optional. Specifies the <emphasis>file</emphasis> was
+            created by OUTPUT with the ENCRYPT option.</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>key</emphasis></entry>
+
+            <entry>A string constant containing the encryption key used to
+            create the file.</entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </informaltable>
+
+    <para>This form is used to read a JSON file. The
+    <emphasis>xpath</emphasis> parameter defines the path used to locate
+    records within the JSON content using a subset of standard XPATH
+    (<emphasis role="underline">www.w3.org/TR/xpath</emphasis>) syntax (see
+    the <emphasis role="bold">XPATH Support</emphasis> section under the
+    RECORD structure discussion for a description of the supported
+    subset).</para>
+
+    <para>The key to getting individual field values from the JSON lies in the
+    RECORD structure<indexterm>
+        <primary>RECORD structure</primary>
+      </indexterm> field definitions. If the field name exactly matches a
+    lower case JSON tag containing the data, then nothing special is required.
+    Otherwise, <emphasis>{xpath(xpathtag)} </emphasis>appended to the field
+    name (where the <emphasis>xpathtag</emphasis> is a string constant
+    containing standard XPATH syntax) is required to extract the data. An
+    XPATH consisting of empty quotes ('') indicates the field receives the
+    entire record. An absolute XPATH is used to access properties of child
+    elements. Because JSON is case sensitive, and ECL identifiers are case
+    insensitive, xpaths need to be specified if the tag contains any upper
+    case characters.</para>
+
+    <para><emphasis role="bold">NOTE:</emphasis> JSON reading and parsing can
+    consume a large amount of memory, depending on the usage. In particular,
+    if the specified xpath matches a very large amount of data, then a large
+    data structure will be provided to the transform. Therefore, the more you
+    match, the more resources you consume per match. For example, if you have
+    a very large document and you match an element near the root that
+    virtually encompasses the whole thing, then the whole thing will be
+    constructed as a referenceable structure that the ECL can get at.</para>
+
+    <para><emphasis role="bold">Example:</emphasis></para>
+
+    <programlisting>/* a JSON  file called "MyBooks.json" contains this data:
+[
+  {
+    "id" : "978-0641723445",
+    "name" : "The Lightning Thief",
+    "author" : "Rick Riordan"
+  }
+,
+  {
+    "id" : "978-1423103349",
+    "name" : "The Sea of Monsters",
+    "author" : "Rick Riordan"
+  }
+]
+*/
+
+BookRec := RECORD
+  STRING ID {XPATH('id')}; //data from id tag -- renames field to uppercase
+  STRING title {XPATH('name')}; //data from name tag, renaming the field
+  STRING author; //data from author tag -- tag name is lowercase and matches field name  
+END;
+
+books := DATASET('~jd::mybooks.json',BookRec,JSON('/'));
+OUTPUT(books);</programlisting>
+  </sect2>
+
   <sect2 id="PIPE_Files">
   <sect2 id="PIPE_Files">
     <title>PIPE Files<indexterm>
     <title>PIPE Files<indexterm>
         <primary>PIPE Files</primary>
         <primary>PIPE Files</primary>

+ 2 - 3
ecl/eclcc/eclcc.cpp

@@ -436,11 +436,10 @@ static int doMain(int argc, const char *argv[])
     if (!processor.parseCommandLineOptions(argc, argv))
     if (!processor.parseCommandLineOptions(argc, argv))
         return 1;
         return 1;
 
 
-    if (processor.printKeywordsToXml())
-        return 0;
-
     try
     try
     {
     {
+        if (processor.printKeywordsToXml())
+            return 0;
         if (!processor.processFiles())
         if (!processor.processFiles())
             return 2;
             return 2;
     }
     }

+ 3 - 1
ecl/eclcc/reservedwords.cpp

@@ -575,8 +575,10 @@ void printKeywordsToXml()
      buffer.append("</xml>\n");
      buffer.append("</xml>\n");
 
 
      Owned<IFile> treeFile = createIFile("ECLKeywords.xml");
      Owned<IFile> treeFile = createIFile("ECLKeywords.xml");
+     assertex(treeFile);
      Owned<IFileIO> io = treeFile->open(IFOcreaterw);
      Owned<IFileIO> io = treeFile->open(IFOcreaterw);
+     assertex(io);
      Owned<IIOStream> out = createIOStream(io);
      Owned<IIOStream> out = createIOStream(io);
-
+     assertex(out);
      out->write(buffer.length(), buffer.str());
      out->write(buffer.length(), buffer.str());
 }
 }

+ 38 - 3
esp/src/eclwatch/WUDetailsWidget.js

@@ -54,6 +54,7 @@ define([
     "dijit/form/Button",
     "dijit/form/Button",
     "dijit/form/DropDownButton",
     "dijit/form/DropDownButton",
     "dijit/form/ValidationTextBox",
     "dijit/form/ValidationTextBox",
+    "dijit/form/Select",
     "dijit/Toolbar",
     "dijit/Toolbar",
     "dijit/ToolbarSeparator",
     "dijit/ToolbarSeparator",
     "dijit/TooltipDialog",
     "dijit/TooltipDialog",
@@ -114,6 +115,8 @@ define([
             this.zapDescription = registry.byId(this.id + "ZapDescription");
             this.zapDescription = registry.byId(this.id + "ZapDescription");
             this.warnHistory = registry.byId(this.id + "WarnHistory");
             this.warnHistory = registry.byId(this.id + "WarnHistory");
             this.warnTimings = registry.byId(this.id + "WarnTimings");
             this.warnTimings = registry.byId(this.id + "WarnTimings");
+            this.clusters = registry.byId(this.id + "Clusters");
+            this.allowedClusters = registry.byId(this.id + "AllowedClusters");
 
 
             this.infoGridWidget = registry.byId(this.id + "InfoContainer");
             this.infoGridWidget = registry.byId(this.id + "InfoContainer");
             this.zapDialog = registry.byId(this.id + "ZapDialog");
             this.zapDialog = registry.byId(this.id + "ZapDialog");
@@ -141,10 +144,12 @@ define([
             var protectedCheckbox = registry.byId(this.id + "Protected");
             var protectedCheckbox = registry.byId(this.id + "Protected");
             var context = this;
             var context = this;
             this.wu.update({
             this.wu.update({
-                Scope: dom.byId(context.id + "Scope").value,
-                Description: dom.byId(context.id + "Description").value,
+                State: dom.byId(this.id + "State").innerHTML,
                 Jobname: dom.byId(context.id + "Jobname").value,
                 Jobname: dom.byId(context.id + "Jobname").value,
-                Protected: protectedCheckbox.get("value")
+                Description: dom.byId(context.id + "Description").value,
+                Protected: protectedCheckbox.get("value"),
+                Scope: dom.byId(context.id + "Scope").value,
+                ClusterSelection: this.allowedClusters.get("value")
             }, null);
             }, null);
         },
         },
         _onRestore: function (event) {
         _onRestore: function (event) {
@@ -236,6 +241,7 @@ define([
                 this.wu.refresh();
                 this.wu.refresh();
             }
             }
             this.infoGridWidget.init(params);
             this.infoGridWidget.init(params);
+            this.checkIfClustersAllowed();
         },
         },
 
 
         initTab: function () {
         initTab: function () {
@@ -320,6 +326,35 @@ define([
             return text;
             return text;
         },
         },
 
 
+        checkIfClustersAllowed: function () {
+            var context = this;
+            WsWorkunits.WUInfo({
+                request: {
+                    Wuid: this.wu.Wuid
+                }
+            }).then(function (response) {
+                if (lang.exists("WUInfoResponse.Workunit.AllowedClusters.AllowedCluster", response)) {
+                    var targetData = response.WUInfoResponse.Workunit.AllowedClusters.AllowedCluster;
+                    if (targetData.length >= 1) {
+                        context.allowedClusters.options.push({
+                            label: "&nbsp;",
+                            value: ""
+                        });
+                        for (var i = 0; i < targetData.length; ++i) {
+                            context.allowedClusters.options.push({
+                                label: targetData[i],
+                                value: targetData[i]
+                            });
+                        }
+                        context.allowedClusters.set("value", "")
+                        domClass.add(context.id + "Cluster", "hidden");
+                    } else {
+                        domClass.add(context.id + "AllowedClusters", "hidden");
+                    }
+                }
+            });
+        },
+
         updateInput: function (name, oldValue, newValue) {
         updateInput: function (name, oldValue, newValue) {
             var registryNode = registry.byId(this.id + name);
             var registryNode = registry.byId(this.id + name);
             if (registryNode) {
             if (registryNode) {

+ 48 - 1
esp/src/eclwatch/nls/bs/hpcc.js

@@ -33,6 +33,7 @@
     ArchivedOnly: "Samo Arhiviran",
     ArchivedOnly: "Samo Arhiviran",
     ArchivedWarning: "Upozorenje: koristite kratak vremenski period. Ako koristite duži vremenski period, pretraživanje radnih jedinica može trajati duže od dozviljenog vremena za pretraživanje .",
     ArchivedWarning: "Upozorenje: koristite kratak vremenski period. Ako koristite duži vremenski period, pretraživanje radnih jedinica može trajati duže od dozviljenog vremena za pretraživanje .",
     AutoRefresh: "Osvježi",
     AutoRefresh: "Osvježi",
+    Back: "Nazad",
     BannerColor: "Boja Reklamnog Bloka",
     BannerColor: "Boja Reklamnog Bloka",
     BannerMessage: "Poruka za Reklamni Blok",
     BannerMessage: "Poruka za Reklamni Blok",
     BannerScroll: "Kretanje Reklamnog Bloka",
     BannerScroll: "Kretanje Reklamnog Bloka",
@@ -59,11 +60,14 @@
     Command: "Komanda",
     Command: "Komanda",
     Comment: "Komentar",
     Comment: "Komentar",
     Completed: "Kompletiran",
     Completed: "Kompletiran",
+    ComplexityWarning: "Više od praga {threshold} aktivnosti ({activityCount}) - zaustavite prikaz podataka?",
     Component: "Komponenta",
     Component: "Komponenta",
     Compress: "Sabijte",
     Compress: "Sabijte",
     Compressed: "Komprimirani",
     Compressed: "Komprimirani",
+    CompressedFileSize: "Komprimirana Veličina Datoteke",
     Configuration: "Konfiguracija",
     Configuration: "Konfiguracija",
     ConfirmPassword: "Potvrdite Lozinku",
     ConfirmPassword: "Potvrdite Lozinku",
+    ConfirmRemoval: "Jeste li sigurni da to želite učiniti?",
     Content: "Sadržaj",
     Content: "Sadržaj",
     Contents: "Sadržaji",
     Contents: "Sadržaji",
     ContentType: "Vrsta Sadržaja",
     ContentType: "Vrsta Sadržaja",
@@ -78,12 +82,14 @@
     Debug: "Otklonite Neispravnosti",
     Debug: "Otklonite Neispravnosti",
     DEF: "DEF",
     DEF: "DEF",
     Delete: "Obrišite",
     Delete: "Obrišite",
+    Deleted: "Izbrisan",
     DeleteSelectedFiles: "Obrišite Odabrane Datoteke?",
     DeleteSelectedFiles: "Obrišite Odabrane Datoteke?",
     DeleteSelectedGroups: "Obrišite odabranu(e) grupu(e)?",
     DeleteSelectedGroups: "Obrišite odabranu(e) grupu(e)?",
     DeleteSelectedPermissions: "Obrišite Odabrane Dozvole Za Pristup",
     DeleteSelectedPermissions: "Obrišite Odabrane Dozvole Za Pristup",
     DeleteSelectedQueries: "Obrišite Odabrane Zahtjeve?",
     DeleteSelectedQueries: "Obrišite Odabrane Zahtjeve?",
     DeleteSelectedUsers: "Obrišite Odabrane Korisnike?",
     DeleteSelectedUsers: "Obrišite Odabrane Korisnike?",
     DeleteSelectedWorkunits: "Obrišite Odabrane Radne Jedinice?",
     DeleteSelectedWorkunits: "Obrišite Odabrane Radne Jedinice?",
+    DeleteSuperfile2: "Izbrišite Super Datoteku",
     DeleteSuperfile: "Obrišite Superdatoteke?",
     DeleteSuperfile: "Obrišite Superdatoteke?",
     DeleteThisPackage: "Obrišite ovaj paket?",
     DeleteThisPackage: "Obrišite ovaj paket?",
     Delimited: "Razgraničen",
     Delimited: "Razgraničen",
@@ -92,17 +98,20 @@
     DenyRead: "<center>Zabranite<br>Čitanje</center>",
     DenyRead: "<center>Zabranite<br>Čitanje</center>",
     DenyWrite: "<center>Zabranite<br>Pisanje</center>",
     DenyWrite: "<center>Zabranite<br>Pisanje</center>",
     Depth: "Dubina",
     Depth: "Dubina",
+    DepthTooltip: "'Najveća Dubina Podgrafa",
     Deschedule: "Izbacite Is Reda Za Izvršavanje",
     Deschedule: "Izbacite Is Reda Za Izvršavanje",
     DescheduleSelectedWorkunits: "Izbacite Odabrane Radne Jedinice Is Reda Za Izvršavanje?",
     DescheduleSelectedWorkunits: "Izbacite Odabrane Radne Jedinice Is Reda Za Izvršavanje?",
     Description: "Opis",
     Description: "Opis",
     Despray: "Ponovo Objedinite Datoteku",
     Despray: "Ponovo Objedinite Datoteku",
     Details: "Detalji",
     Details: "Detalji",
     DFUServerName: "Ime DFU Servera",
     DFUServerName: "Ime DFU Servera",
+    DFUWorkunit: "DFU RadnaJedinica",
     Directory: "Direktorij",
     Directory: "Direktorij",
     DisableScopeScanConfirm: "Da li ste sigurni da želite da onemogućite skaniranje opsega? Promjene će biti prihvaćene poslije restarta DALIja",
     DisableScopeScanConfirm: "Da li ste sigurni da želite da onemogućite skaniranje opsega? Promjene će biti prihvaćene poslije restarta DALIja",
     DisableScopeScans: "Onemogućite Skaniranje Opsega",
     DisableScopeScans: "Onemogućite Skaniranje Opsega",
     DiskUsage: "Iskorištenost Diska",
     DiskUsage: "Iskorištenost Diska",
     Distance: "Razdaljina",
     Distance: "Razdaljina",
+    DistanceTooltip: "Maksimalna Veličina Podgrafa Za Izabranu Aktivnost",
     Dll: "Dll",
     Dll: "Dll",
     DOT: "DOT",
     DOT: "DOT",
     DOTAttributes: "DOT Atributi",
     DOTAttributes: "DOT Atributi",
@@ -112,6 +121,7 @@
     Duration: "Trajanje",
     Duration: "Trajanje",
     EBCDIC: "EBCDIC",
     EBCDIC: "EBCDIC",
     ECL: "ECL",
     ECL: "ECL",
+    ECLWorkunit: "ECL RadnaJedinica",
     Edges: "Ivice",
     Edges: "Ivice",
     Edit: "Editujte",
     Edit: "Editujte",
     EditDOT: "Editujte DOT",
     EditDOT: "Editujte DOT",
@@ -159,11 +169,16 @@
     Find: "Nađite",
     Find: "Nađite",
     FindNext: "Nađite Slijedeći",
     FindNext: "Nađite Slijedeći",
     FindPrevious: "Nađite Prethodni",
     FindPrevious: "Nađite Prethodni",
+    Finished: "Završen",
     FirstName: "Ime",
     FirstName: "Ime",
+    FirstNRows: "Prvih N Redova",
     Fixed: "Fiksni",
     Fixed: "Fiksni",
+    Folder: "Fascikla",
     Format: "Format",
     Format: "Format",
+    Forward: "Naprijed",
     FromDate: "Od Datuma",
     FromDate: "Od Datuma",
     FromSizes: "Od Veličine",
     FromSizes: "Od Veličine",
+    FromTime: "Od Vremena",
     FullName: "Ime i Prezime",
     FullName: "Ime i Prezime",
     Graph: "Graf",
     Graph: "Graf",
     Graphs: "Grafikoni",
     Graphs: "Grafikoni",
@@ -206,6 +221,8 @@
     LargestSize: "Najveća veličina",
     LargestSize: "Najveća veličina",
     LastName: "Prezime",
     LastName: "Prezime",
     LastNDays: "Poslijednjih N Dana",
     LastNDays: "Poslijednjih N Dana",
+    LastNHours: "Posljednjih N Sati",
+    LastNRows: "Posljednjih N Redova",
     LDAPWarning: "<b>Greška LDAP Servica:</b>  'Previše korisnika' - Molimo koristite filter.",
     LDAPWarning: "<b>Greška LDAP Servica:</b>  'Previše korisnika' - Molimo koristite filter.",
     LegacyForm: "Stari Prevaziđeni Formular",
     LegacyForm: "Stari Prevaziđeni Formular",
     LibrariesUsed: "Biblioteke u Korištenju",
     LibrariesUsed: "Biblioteke u Korištenju",
@@ -220,6 +237,7 @@
     LoadPackageContentHere: "(Dobavite ovamo sadržaj paketa)",
     LoadPackageContentHere: "(Dobavite ovamo sadržaj paketa)",
     LoadPackageFromFile: "Dobavite Paket iz Datoteke",
     LoadPackageFromFile: "Dobavite Paket iz Datoteke",
     Local: "Lokalni",
     Local: "Lokalni",
+    Log: "Dnevnik (Log)",
     LogFile: "Datoteka Aktivnosti",
     LogFile: "Datoteka Aktivnosti",
     LoggedInAs: "Prijavljen kao",
     LoggedInAs: "Prijavljen kao",
     LogicalFile: "Logička Datoteka",
     LogicalFile: "Logička Datoteka",
@@ -228,9 +246,12 @@
     LogicalFilesOnly: "Samo Logičke Datoteke",
     LogicalFilesOnly: "Samo Logičke Datoteke",
     LogicalFileType: "Tip Logičke Datoteke",
     LogicalFileType: "Tip Logičke Datoteke",
     LogicalName: "Ime Logičke Datoteke",
     LogicalName: "Ime Logičke Datoteke",
+    Logs: "Dnevnici",
     log_analysis_1: "log_analysis_1*",
     log_analysis_1: "log_analysis_1*",
     Low: "Nizak",
     Low: "Nizak",
     ManualCopy: "Pritisnite Ctrl+C",
     ManualCopy: "Pritisnite Ctrl+C",
+    ManualOverviewSelection: "Nophodno Je Odabrati Pregled",
+    ManualTreeSelection: "Nophodno Je Odabrati Drvo",
     Mappings: "Mapiranja",
     Mappings: "Mapiranja",
     Mask: "Maska",
     Mask: "Maska",
     Max: "Maksimum",
     Max: "Maksimum",
@@ -249,6 +270,7 @@
     MonitorShotLimit: "Nadgledajte Shot Limit",
     MonitorShotLimit: "Nadgledajte Shot Limit",
     MonitorSub: "Nadgledajte Sub",
     MonitorSub: "Nadgledajte Sub",
     Month: "Mjesec",
     Month: "Mjesec",
+    More: "Nastavite",
     MustContainUppercaseAndSymbol: "Mora uključiti veliko slovo i simbol",
     MustContainUppercaseAndSymbol: "Mora uključiti veliko slovo i simbol",
     NA: "N/A",
     NA: "N/A",
     Name: "Ime",
     Name: "Ime",
@@ -304,10 +326,12 @@
     PasswordExpired: "Vaša lozinka je istekla I mora biti promijenjena",
     PasswordExpired: "Vaša lozinka je istekla I mora biti promijenjena",
     PasswordExpirePostfix: "dan(a). Želite li je sada promijeniti?",
     PasswordExpirePostfix: "dan(a). Želite li je sada promijeniti?",
     PasswordExpirePrefix: "Vaša lozinka će isteći za",
     PasswordExpirePrefix: "Vaša lozinka će isteći za",
+    PasswordOpenZAP: "Unesite Lozinku Za ZAP (opcionalno)",
     PasswordsDoNotMatch: "Pogrešna Lozinka.",
     PasswordsDoNotMatch: "Pogrešna Lozinka.",
     Path: "Put",
     Path: "Put",
     PathMask: "Maska za Put",
     PathMask: "Maska za Put",
     Pause: "Pauza",
     Pause: "Pauza",
+    PauseNow: "Zaustavite Odmah",
     PctComplete: "% Kompletiran",
     PctComplete: "% Kompletiran",
     PercentDone: "Procenat Završen",
     PercentDone: "Procenat Završen",
     PerformingLayout: "Izvršava Layout...",
     PerformingLayout: "Izvršava Layout...",
@@ -317,6 +341,7 @@
     PlaceholderFirstName: "John",
     PlaceholderFirstName: "John",
     PlaceholderLastName: "Smith",
     PlaceholderLastName: "Smith",
     Playground: "Igralište",
     Playground: "Igralište",
+    Plugins: "Dopune",
     Port: "Port",
     Port: "Port",
     Prefix: "Prefiks",
     Prefix: "Prefiks",
     PrefixPlaceholder: "filename{:length}, filesize{:[B|L][1-8]}",
     PrefixPlaceholder: "filename{:length}, filesize{:[B|L][1-8]}",
@@ -337,13 +362,17 @@
     Quarter: "Četvrtina",
     Quarter: "Četvrtina",
     Queries: "Upiti",
     Queries: "Upiti",
     QueriesNoPackage: "Upiti bez odgovarajućeg paketa",
     QueriesNoPackage: "Upiti bez odgovarajućeg paketa",
+    Query: "Upit",
     QueryDetailsfor: "Detalji o Upitu",
     QueryDetailsfor: "Detalji o Upitu",
+    QueryID: "Identifikator Upita",
     QueryIDPlaceholder: "som?q*ry.1",
     QueryIDPlaceholder: "som?q*ry.1",
+    QueryName: "Ime Upita",
     QueryNamePlaceholder: "My?Su?erQ*ry",
     QueryNamePlaceholder: "My?Su?erQ*ry",
     QuerySet: "Kolekcija Upita",
     QuerySet: "Kolekcija Upita",
     Queue: "Red (Queue)",
     Queue: "Red (Queue)",
     Quote: "Citat",
     Quote: "Citat",
     QuotedTerminator: "Završni Karakter",
     QuotedTerminator: "Završni Karakter",
+    RawTextPage: "Neobrađen Tekst (Tekuća Stranica)",
     RecordCount: "Broj Rekorda",
     RecordCount: "Broj Rekorda",
     RecordLength: "Dužina Rekorda",
     RecordLength: "Dužina Rekorda",
     Records: "Rekordi",
     Records: "Rekordi",
@@ -358,6 +387,8 @@
     RemoteDali: "Daleki Dali",
     RemoteDali: "Daleki Dali",
     RemoteDaliIP: "Daleki&nbsp;Dali&nbsp;IP&nbsp;Adresa",
     RemoteDaliIP: "Daleki&nbsp;Dali&nbsp;IP&nbsp;Adresa",
     Remove: "Uklonite",
     Remove: "Uklonite",
+    RemoveSubfiles: "Uklonite Pod-Datoteku",
+    RemoveUser: "Uklonite Korisnika",
     Rename: "Preimenujte",
     Rename: "Preimenujte",
     RenderedSVG: "Donesene SVG",
     RenderedSVG: "Donesene SVG",
     RenderSVG: "Donesite SVG",
     RenderSVG: "Donesite SVG",
@@ -365,6 +396,8 @@
     RequestSchema: "Shema Zahtjeva",
     RequestSchema: "Shema Zahtjeva",
     Reschedule: "Ponovo Stavite Na Raspored",
     Reschedule: "Ponovo Stavite Na Raspored",
     Reset: "Resetujte",
     Reset: "Resetujte",
+    ResetThisQuery: "Resetujte Tekući Upit",
+    ResetViewToSelection: "Resetujte Odabrani Prikaz",
     Resource: "Resurs",
     Resource: "Resurs",
     Resources: "Resursi",
     Resources: "Resursi",
     ResponseSchema: "Shema Odgovora",
     ResponseSchema: "Shema Odgovora",
@@ -377,6 +410,8 @@
     Resume: "Nastavite",
     Resume: "Nastavite",
     RetainSuperfileStructure: "Zadržite Strukturu Superdatoteke",
     RetainSuperfileStructure: "Zadržite Strukturu Superdatoteke",
     RetypePassword: "Ponovite Lozinku",
     RetypePassword: "Ponovite Lozinku",
+    Reverse: "Idite Unazad",
+    RowPath: "Put Do Rekorda",
     Rows: "Redovi",
     Rows: "Redovi",
     RowTag: "Etiketa Reda",
     RowTag: "Etiketa Reda",
     RoxieCluster: "Roxie Klaster",
     RoxieCluster: "Roxie Klaster",
@@ -415,6 +450,7 @@
     Start: "Počnite",
     Start: "Počnite",
     Started: "Počeo",
     Started: "Počeo",
     State: "Stanje",
     State: "Stanje",
+    Stats: "Statistike",
     Status: "Status",
     Status: "Status",
     Stopped: "Zaustavljen",
     Stopped: "Zaustavljen",
     Subgraph: "Pod-Graf",
     Subgraph: "Pod-Graf",
@@ -423,9 +459,11 @@
     Subtype: "Pod-Vrsta",
     Subtype: "Pod-Vrsta",
     Summary: "Kratak Pregled",
     Summary: "Kratak Pregled",
     SummaryMessage: "Sažeta Poruka",
     SummaryMessage: "Sažeta Poruka",
-    SuperFile: "Super Datoteka",
     Superfile: "Super Datoteka",
     Superfile: "Super Datoteka",
+    SuperFile: "Super Datoteka",
     SuperFiles: "Super Datoteke",
     SuperFiles: "Super Datoteke",
+    Superfiles: "SuperDatoteke",
+    SuperFilesBelongsTo: "Pripadnik Superdatoteke",
     SuperfilesOnly: "Samo Superdatoteke",
     SuperfilesOnly: "Samo Superdatoteke",
     Suspend: "Suspendujte",
     Suspend: "Suspendujte",
     Suspended: "Suspendovan",
     Suspended: "Suspendovan",
@@ -444,6 +482,7 @@
     TargetWuid: "Cilj/Wuid",
     TargetWuid: "Cilj/Wuid",
     Terminators: "Terminatori",
     Terminators: "Terminatori",
     TestPages: "Test Stranice",
     TestPages: "Test Stranice",
+    Text: "Tekst",
     ThorMasterAddress: "Adresa Glavnog Thora",
     ThorMasterAddress: "Adresa Glavnog Thora",
     ThorNetworkAddress: "Netvork Adresa Thora",
     ThorNetworkAddress: "Netvork Adresa Thora",
     Time: "Vrijeme",
     Time: "Vrijeme",
@@ -470,8 +509,11 @@
     title_HPCCPlatformMain: "ECL Watch - Glavna Stranica",
     title_HPCCPlatformMain: "ECL Watch - Glavna Stranica",
     title_HPCCPlatformOps: "ECL Watch - Upravljnje",
     title_HPCCPlatformOps: "ECL Watch - Upravljnje",
     title_HPCCPlatformRoxie: "ECL Watch - Roxie",
     title_HPCCPlatformRoxie: "ECL Watch - Roxie",
+    title_HPCCPlatformServicesPlugin: "ECL Monitor - Dopune",
     title_Inputs: "Unosi",
     title_Inputs: "Unosi",
     title_LFDetails: "Detalji o Logičkol Datoteci",
     title_LFDetails: "Detalji o Logičkol Datoteci",
+    title_LibrariesUsed: "Biblioteke U Korištenju",
+    title_Log: "Log Fajl",
     title_LZBrowse: "Zona za Pretovar",
     title_LZBrowse: "Zona za Pretovar",
     title_MemberOf: "Član Od",
     title_MemberOf: "Član Od",
     title_Members: "Članovi",
     title_Members: "Članovi",
@@ -485,15 +527,20 @@
     title_Results: "Rezultati",
     title_Results: "Rezultati",
     title_SearchResults: "Rezultati Pretraživanja",
     title_SearchResults: "Rezultati Pretraživanja",
     title_SourceFiles: "",
     title_SourceFiles: "",
+    title_SourceFiles: "Originalni Fajlovi",
+    title_Topology: "Topologija",
     title_TpThorStatus: "Stanje Thora",
     title_TpThorStatus: "Stanje Thora",
     title_UserPermissions: "Korisničke Dozvile za Pristup",
     title_UserPermissions: "Korisničke Dozvile za Pristup",
     title_UserQuery: "Prava Pristupa",
     title_UserQuery: "Prava Pristupa",
     title_WUDetails: "ECL Detalji o Radnoj Jedinici",
     title_WUDetails: "ECL Detalji o Radnoj Jedinici",
     title_WUQuery: "ECL Radne Jedinice",
     title_WUQuery: "ECL Radne Jedinice",
+    To: "Prema",
     ToDate: "Do Sada",
     ToDate: "Do Sada",
     Toenablegraphviews: "Da biste mogli vidjeli grafikone, moraćete instalisati Graph View Control plugin",
     Toenablegraphviews: "Da biste mogli vidjeli grafikone, moraćete instalisati Graph View Control plugin",
     Top: "Vrh",
     Top: "Vrh",
+    Topology: "Topologija",
     ToSizes: "Do Velićina",
     ToSizes: "Do Velićina",
+    TotalClusterTime: "Ukupno Vrijeme Klastera",
     TotalSize: "Totalna Veličina",
     TotalSize: "Totalna Veličina",
     TotalThorTime: "Ukupno Vrijeme Thor-a",
     TotalThorTime: "Ukupno Vrijeme Thor-a",
     TransitionGuide: "Vodič",
     TransitionGuide: "Vodič",

+ 48 - 1
esp/src/eclwatch/nls/hr/hpcc.js

@@ -33,6 +33,7 @@
     ArchivedOnly: "Samo Arhiviran",
     ArchivedOnly: "Samo Arhiviran",
     ArchivedWarning: "Upozorenje: koristite kratak vremenski period. Ako koristite duži vremenski period, pretraživanje radnih jedinica može trajati duže od dozviljenog vremena za pretraživanje .",
     ArchivedWarning: "Upozorenje: koristite kratak vremenski period. Ako koristite duži vremenski period, pretraživanje radnih jedinica može trajati duže od dozviljenog vremena za pretraživanje .",
     AutoRefresh: "Osvježi",
     AutoRefresh: "Osvježi",
+    Back: "Natrag",
     BannerColor: "Boja Reklamnog Bloka",
     BannerColor: "Boja Reklamnog Bloka",
     BannerMessage: "Poruka za Reklamni Blok",
     BannerMessage: "Poruka za Reklamni Blok",
     BannerScroll: "Kretanje Reklamnog Bloka",
     BannerScroll: "Kretanje Reklamnog Bloka",
@@ -59,11 +60,14 @@
     Command: "Komanda",
     Command: "Komanda",
     Comment: "Komentar",
     Comment: "Komentar",
     Completed: "Kompletiran",
     Completed: "Kompletiran",
+    ComplexityWarning: "Više od praga {threshold} aktivnosti ({activityCount}) - prekinite prikaz podataka?",
     Component: "Komponenta",
     Component: "Komponenta",
     Compress: "Sabijte",
     Compress: "Sabijte",
     Compressed: "Komprimirani",
     Compressed: "Komprimirani",
+    CompressedFileSize: "Komprimirana Veličina Datoteke",
     Configuration: "Konfiguracija",
     Configuration: "Konfiguracija",
     ConfirmPassword: "Potvrdite Lozinku",
     ConfirmPassword: "Potvrdite Lozinku",
+    ConfirmRemoval: "Jeste li sigurni da to želite učiniti?",
     Content: "Sadržaj",
     Content: "Sadržaj",
     Contents: "Sadržaji",
     Contents: "Sadržaji",
     ContentType: "Vrsta Sadržaja",
     ContentType: "Vrsta Sadržaja",
@@ -78,12 +82,14 @@
     Debug: "Otklonite Neispravnosti",
     Debug: "Otklonite Neispravnosti",
     DEF: "DEF",
     DEF: "DEF",
     Delete: "Obrišite",
     Delete: "Obrišite",
+    Deleted: "Obrisan",
     DeleteSelectedFiles: "Obrišite Odabrane Datoteke?",
     DeleteSelectedFiles: "Obrišite Odabrane Datoteke?",
     DeleteSelectedGroups: "Obrišite odabranu(e) grupu(e)?",
     DeleteSelectedGroups: "Obrišite odabranu(e) grupu(e)?",
     DeleteSelectedPermissions: "Obrišite Odabrane Dozvole Za Pristup",
     DeleteSelectedPermissions: "Obrišite Odabrane Dozvole Za Pristup",
     DeleteSelectedQueries: "Obrišite Odabrane Zahtjeve?",
     DeleteSelectedQueries: "Obrišite Odabrane Zahtjeve?",
     DeleteSelectedUsers: "Obrišite Odabrane Korisnike?",
     DeleteSelectedUsers: "Obrišite Odabrane Korisnike?",
     DeleteSelectedWorkunits: "Obrišite Odabrane Radne Jedinice?",
     DeleteSelectedWorkunits: "Obrišite Odabrane Radne Jedinice?",
+    DeleteSuperfile2: "Obrišite Super Datoteku",
     DeleteSuperfile: "Obrišite Superdatoteke?",
     DeleteSuperfile: "Obrišite Superdatoteke?",
     DeleteThisPackage: "Obrišite ovaj paket?",
     DeleteThisPackage: "Obrišite ovaj paket?",
     Delimited: "Razgraničen",
     Delimited: "Razgraničen",
@@ -92,17 +98,20 @@
     DenyRead: "<center>Zabranite<br>Čitanje</center>",
     DenyRead: "<center>Zabranite<br>Čitanje</center>",
     DenyWrite: "<center>Zabranite<br>Pisanje</center>",
     DenyWrite: "<center>Zabranite<br>Pisanje</center>",
     Depth: "Dubina",
     Depth: "Dubina",
+    DepthTooltip: "'Najveća Dubina Podgrafa",
     Deschedule: "Izbacite Is Reda Za Izvršavanje",
     Deschedule: "Izbacite Is Reda Za Izvršavanje",
     DescheduleSelectedWorkunits: "Izbacite Odabrane Radne Jedinice Is Reda Za Izvršavanje?",
     DescheduleSelectedWorkunits: "Izbacite Odabrane Radne Jedinice Is Reda Za Izvršavanje?",
     Description: "Opis",
     Description: "Opis",
     Despray: "Ponovo Objedinite Datoteku",
     Despray: "Ponovo Objedinite Datoteku",
     Details: "Detalji",
     Details: "Detalji",
     DFUServerName: "Ime DFU Servera",
     DFUServerName: "Ime DFU Servera",
+    DFUWorkunit: "DFU RadnaJedinica",
     Directory: "Direktorij",
     Directory: "Direktorij",
     DisableScopeScanConfirm: "Da li ste sigurni da želite da onemogućite skaniranje opsega? Promjene će biti prihvaćene poslije restarta DALIja",
     DisableScopeScanConfirm: "Da li ste sigurni da želite da onemogućite skaniranje opsega? Promjene će biti prihvaćene poslije restarta DALIja",
     DisableScopeScans: "Onemogućite Skaniranje Opsega",
     DisableScopeScans: "Onemogućite Skaniranje Opsega",
     DiskUsage: "Iskorištenost Diska",
     DiskUsage: "Iskorištenost Diska",
     Distance: "Razdaljina",
     Distance: "Razdaljina",
+    DistanceTooltip: "Maksimalna Veličina Podgrafa Za Odabranu Aktivnost",
     Dll: "Dll",
     Dll: "Dll",
     DOT: "DOT",
     DOT: "DOT",
     DOTAttributes: "DOT Atributi",
     DOTAttributes: "DOT Atributi",
@@ -112,6 +121,7 @@
     Duration: "Trajanje",
     Duration: "Trajanje",
     EBCDIC: "EBCDIC",
     EBCDIC: "EBCDIC",
     ECL: "ECL",
     ECL: "ECL",
+    ECLWorkunit: "ECL RadnaJedinica",
     Edges: "Ivice",
     Edges: "Ivice",
     Edit: "Editujte",
     Edit: "Editujte",
     EditDOT: "Editujte DOT",
     EditDOT: "Editujte DOT",
@@ -159,11 +169,16 @@
     Find: "Nađite",
     Find: "Nađite",
     FindNext: "Nađite Slijedeći",
     FindNext: "Nađite Slijedeći",
     FindPrevious: "Nađite Prethodni",
     FindPrevious: "Nađite Prethodni",
+    Finished: "Završen",
     FirstName: "Ime",
     FirstName: "Ime",
+    FirstNRows: "Prvih N Redova",
     Fixed: "Fiksni",
     Fixed: "Fiksni",
+    Folder: "Fascikla",
     Format: "Format",
     Format: "Format",
+    Forward: "Naprijed",
     FromDate: "Od Datuma",
     FromDate: "Od Datuma",
     FromSizes: "Od Veličine",
     FromSizes: "Od Veličine",
+    FromTime: "Od Vremena",
     FullName: "Ime i Prezime",
     FullName: "Ime i Prezime",
     Graph: "Graf",
     Graph: "Graf",
     Graphs: "Grafikoni",
     Graphs: "Grafikoni",
@@ -206,6 +221,8 @@
     LargestSize: "Najveća veličina",
     LargestSize: "Najveća veličina",
     LastName: "Prezime",
     LastName: "Prezime",
     LastNDays: "Poslijednjih N Dana",
     LastNDays: "Poslijednjih N Dana",
+    LastNHours: "Posljednjih N Sati",
+    LastNRows: "Posljednjih N Redova",
     LDAPWarning: "<b>Greška LDAP Servica:</b>  'Previše korisnika' - Molimo koristite filter.",
     LDAPWarning: "<b>Greška LDAP Servica:</b>  'Previše korisnika' - Molimo koristite filter.",
     LegacyForm: "Stari Prevaziđeni Formular",
     LegacyForm: "Stari Prevaziđeni Formular",
     LibrariesUsed: "Biblioteke u Korištenju",
     LibrariesUsed: "Biblioteke u Korištenju",
@@ -220,6 +237,7 @@
     LoadPackageContentHere: "(Dobavite ovamo sadržaj paketa)",
     LoadPackageContentHere: "(Dobavite ovamo sadržaj paketa)",
     LoadPackageFromFile: "Dobavite Paket iz Datoteke",
     LoadPackageFromFile: "Dobavite Paket iz Datoteke",
     Local: "Lokalni",
     Local: "Lokalni",
+    Log: "Dnevnik (Log)",
     LogFile: "Datoteka Aktivnosti",
     LogFile: "Datoteka Aktivnosti",
     LoggedInAs: "Prijavljen kao",
     LoggedInAs: "Prijavljen kao",
     LogicalFile: "Logička Datoteka",
     LogicalFile: "Logička Datoteka",
@@ -228,9 +246,12 @@
     LogicalFilesOnly: "Samo Logičke Datoteke",
     LogicalFilesOnly: "Samo Logičke Datoteke",
     LogicalFileType: "Tip Logičke Datoteke",
     LogicalFileType: "Tip Logičke Datoteke",
     LogicalName: "Ime Logičke Datoteke",
     LogicalName: "Ime Logičke Datoteke",
+    Logs: "Dnevnici",
     log_analysis_1: "log_analysis_1*",
     log_analysis_1: "log_analysis_1*",
     Low: "Nizak",
     Low: "Nizak",
     ManualCopy: "Pritisnite Ctrl+C",
     ManualCopy: "Pritisnite Ctrl+C",
+    ManualOverviewSelection: "Nophodno Je Selektirati Pregled",
+    ManualTreeSelection: "Nophodno Je Selektirati Drvo",
     Mappings: "Mapiranja",
     Mappings: "Mapiranja",
     Mask: "Maska",
     Mask: "Maska",
     Max: "Maksimum",
     Max: "Maksimum",
@@ -249,6 +270,7 @@
     MonitorShotLimit: "Nadgledajte Shot Limit",
     MonitorShotLimit: "Nadgledajte Shot Limit",
     MonitorSub: "Nadgledajte Sub",
     MonitorSub: "Nadgledajte Sub",
     Month: "Mjesec",
     Month: "Mjesec",
+    More: "Nastavite",
     MustContainUppercaseAndSymbol: "Mora uključiti veliko slovo i simbol",
     MustContainUppercaseAndSymbol: "Mora uključiti veliko slovo i simbol",
     NA: "N/A",
     NA: "N/A",
     Name: "Ime",
     Name: "Ime",
@@ -304,10 +326,12 @@
     PasswordExpired: "Vaša lozinka je istekla I mora biti promijenjena",
     PasswordExpired: "Vaša lozinka je istekla I mora biti promijenjena",
     PasswordExpirePostfix: "dan(a). Želite li je sada promijeniti?",
     PasswordExpirePostfix: "dan(a). Želite li je sada promijeniti?",
     PasswordExpirePrefix: "Vaša lozinka će isteći za",
     PasswordExpirePrefix: "Vaša lozinka će isteći za",
+    PasswordOpenZAP: "Unesite Lozinku Za ZAP (neobavezno)",
     PasswordsDoNotMatch: "Pogrešna Lozinka.",
     PasswordsDoNotMatch: "Pogrešna Lozinka.",
     Path: "Put",
     Path: "Put",
     PathMask: "Maska za Put",
     PathMask: "Maska za Put",
     Pause: "Pauza",
     Pause: "Pauza",
+    PauseNow: "Zaustavite Odmah",
     PctComplete: "% Kompletiran",
     PctComplete: "% Kompletiran",
     PercentDone: "Procenat Završen",
     PercentDone: "Procenat Završen",
     PerformingLayout: "Izvršava Layout...",
     PerformingLayout: "Izvršava Layout...",
@@ -317,6 +341,7 @@
     PlaceholderFirstName: "John",
     PlaceholderFirstName: "John",
     PlaceholderLastName: "Smith",
     PlaceholderLastName: "Smith",
     Playground: "Igralište",
     Playground: "Igralište",
+    Plugins: "Dodatci",
     Port: "Port",
     Port: "Port",
     Prefix: "Prefiks",
     Prefix: "Prefiks",
     PrefixPlaceholder: "filename{:length}, filesize{:[B|L][1-8]}",
     PrefixPlaceholder: "filename{:length}, filesize{:[B|L][1-8]}",
@@ -337,13 +362,17 @@
     Quarter: "Četvrtina",
     Quarter: "Četvrtina",
     Queries: "Upiti",
     Queries: "Upiti",
     QueriesNoPackage: "Upiti bez odgovarajućeg paketa",
     QueriesNoPackage: "Upiti bez odgovarajućeg paketa",
+    Query: "Upit",
     QueryDetailsfor: "Detalji o Upitu",
     QueryDetailsfor: "Detalji o Upitu",
+    QueryID: "Identifikator Upita",
     QueryIDPlaceholder: "som?q*ry.1",
     QueryIDPlaceholder: "som?q*ry.1",
+    QueryName: "Naziv Upita",
     QueryNamePlaceholder: "My?Su?erQ*ry",
     QueryNamePlaceholder: "My?Su?erQ*ry",
     QuerySet: "Kolekcija Upita",
     QuerySet: "Kolekcija Upita",
     Queue: "Red (Queue)",
     Queue: "Red (Queue)",
     Quote: "Citat",
     Quote: "Citat",
     QuotedTerminator: "Završni Karakter",
     QuotedTerminator: "Završni Karakter",
+    RawTextPage: "Neobrađen Tekst (Tekuća Stranica)",
     RecordCount: "Broj Rekorda",
     RecordCount: "Broj Rekorda",
     RecordLength: "Dužina Rekorda",
     RecordLength: "Dužina Rekorda",
     Records: "Rekordi",
     Records: "Rekordi",
@@ -358,6 +387,8 @@
     RemoteDali: "Daleki Dali",
     RemoteDali: "Daleki Dali",
     RemoteDaliIP: "Daleki&nbsp;Dali&nbsp;IP&nbsp;Adresa",
     RemoteDaliIP: "Daleki&nbsp;Dali&nbsp;IP&nbsp;Adresa",
     Remove: "Uklonite",
     Remove: "Uklonite",
+    RemoveSubfiles: "Uklonite Pod-Datoteku",
+    RemoveUser: "Uklonite Korisnika",
     Rename: "Preimenujte",
     Rename: "Preimenujte",
     RenderedSVG: "Donesene SVG",
     RenderedSVG: "Donesene SVG",
     RenderSVG: "Donesite SVG",
     RenderSVG: "Donesite SVG",
@@ -365,6 +396,8 @@
     RequestSchema: "Shema Zahtjeva",
     RequestSchema: "Shema Zahtjeva",
     Reschedule: "Ponovo Stavite Na Raspored",
     Reschedule: "Ponovo Stavite Na Raspored",
     Reset: "Resetujte",
     Reset: "Resetujte",
+    ResetThisQuery: "Resetujte Tekući Upit",
+    ResetViewToSelection: "Resetujte Odabrani Prikaz",
     Resource: "Resurs",
     Resource: "Resurs",
     Resources: "Resursi",
     Resources: "Resursi",
     ResponseSchema: "Shema Odgovora",
     ResponseSchema: "Shema Odgovora",
@@ -377,6 +410,8 @@
     Resume: "Nastavite",
     Resume: "Nastavite",
     RetainSuperfileStructure: "Zadržite Strukturu Superdatoteke",
     RetainSuperfileStructure: "Zadržite Strukturu Superdatoteke",
     RetypePassword: "Ponovite Lozinku",
     RetypePassword: "Ponovite Lozinku",
+    Reverse: "Idite Unazad",
+    RowPath: "Put Do Rekorda",
     Rows: "Redovi",
     Rows: "Redovi",
     RowTag: "Etiketa Reda",
     RowTag: "Etiketa Reda",
     RoxieCluster: "Roxie Klaster",
     RoxieCluster: "Roxie Klaster",
@@ -415,6 +450,7 @@
     Start: "Počnite",
     Start: "Počnite",
     Started: "Počeo",
     Started: "Počeo",
     State: "Stanje",
     State: "Stanje",
+    Stats: "Statistike",
     Status: "Status",
     Status: "Status",
     Stopped: "Zaustavljen",
     Stopped: "Zaustavljen",
     Subgraph: "Pod-Graf",
     Subgraph: "Pod-Graf",
@@ -423,9 +459,11 @@
     Subtype: "Pod-Vrsta",
     Subtype: "Pod-Vrsta",
     Summary: "Kratak Pregled",
     Summary: "Kratak Pregled",
     SummaryMessage: "Sažeta Poruka",
     SummaryMessage: "Sažeta Poruka",
-    SuperFile: "Super Datoteka",
     Superfile: "Super Datoteka",
     Superfile: "Super Datoteka",
+    SuperFile: "Super Datoteka",
     SuperFiles: "Super Datoteke",
     SuperFiles: "Super Datoteke",
+    Superfiles: "SuperDatoteke",
+    SuperFilesBelongsTo: "Pripadnik Superdatoteke",
     SuperfilesOnly: "Samo Superdatoteke",
     SuperfilesOnly: "Samo Superdatoteke",
     Suspend: "Suspendujte",
     Suspend: "Suspendujte",
     Suspended: "Suspendovan",
     Suspended: "Suspendovan",
@@ -444,6 +482,7 @@
     TargetWuid: "Cilj/Wuid",
     TargetWuid: "Cilj/Wuid",
     Terminators: "Terminatori",
     Terminators: "Terminatori",
     TestPages: "Test Stranice",
     TestPages: "Test Stranice",
+    Text: "Tekst",
     ThorMasterAddress: "Adresa Glavnog Thora",
     ThorMasterAddress: "Adresa Glavnog Thora",
     ThorNetworkAddress: "Netvork Adresa Thora",
     ThorNetworkAddress: "Netvork Adresa Thora",
     Time: "Vrijeme",
     Time: "Vrijeme",
@@ -470,8 +509,11 @@
     title_HPCCPlatformMain: "ECL Watch - Glavna Stranica",
     title_HPCCPlatformMain: "ECL Watch - Glavna Stranica",
     title_HPCCPlatformOps: "ECL Watch - Upravljnje",
     title_HPCCPlatformOps: "ECL Watch - Upravljnje",
     title_HPCCPlatformRoxie: "ECL Watch - Roxie",
     title_HPCCPlatformRoxie: "ECL Watch - Roxie",
+    title_HPCCPlatformServicesPlugin: "ECL Monitor - Dodatci",
     title_Inputs: "Unosi",
     title_Inputs: "Unosi",
     title_LFDetails: "Detalji o Logičkol Datoteci",
     title_LFDetails: "Detalji o Logičkol Datoteci",
+    title_LibrariesUsed: "Biblioteke U Korištenju",
+    title_Log: "Log Fajl",
     title_LZBrowse: "Zona za Pretovar",
     title_LZBrowse: "Zona za Pretovar",
     title_MemberOf: "Član Od",
     title_MemberOf: "Član Od",
     title_Members: "Članovi",
     title_Members: "Članovi",
@@ -485,15 +527,20 @@
     title_Results: "Rezultati",
     title_Results: "Rezultati",
     title_SearchResults: "Rezultati Pretraživanja",
     title_SearchResults: "Rezultati Pretraživanja",
     title_SourceFiles: "",
     title_SourceFiles: "",
+    title_SourceFiles: "Originalni Fajlovi",
+    title_Topology: "Topologija",
     title_TpThorStatus: "Stanje Thora",
     title_TpThorStatus: "Stanje Thora",
     title_UserPermissions: "Korisničke Dozvile za Pristup",
     title_UserPermissions: "Korisničke Dozvile za Pristup",
     title_UserQuery: "Prava Pristupa",
     title_UserQuery: "Prava Pristupa",
     title_WUDetails: "ECL Detalji o Radnoj Jedinici",
     title_WUDetails: "ECL Detalji o Radnoj Jedinici",
     title_WUQuery: "ECL Radne Jedinice",
     title_WUQuery: "ECL Radne Jedinice",
+    To: "Prema",
     ToDate: "Do Sada",
     ToDate: "Do Sada",
     Toenablegraphviews: "Da biste mogli vidjeli grafikone, moraćete instalisati Graph View Control plugin",
     Toenablegraphviews: "Da biste mogli vidjeli grafikone, moraćete instalisati Graph View Control plugin",
     Top: "Vrh",
     Top: "Vrh",
+    Topology: "Topologija",
     ToSizes: "Do Velićina",
     ToSizes: "Do Velićina",
+    TotalClusterTime: "Ukupno Vrijeme Klastera",
     TotalSize: "Totalna Veličina",
     TotalSize: "Totalna Veličina",
     TotalThorTime: "Ukupno Vrijeme Thor-a",
     TotalThorTime: "Ukupno Vrijeme Thor-a",
     TransitionGuide: "Vodič",
     TransitionGuide: "Vodič",

+ 46 - 0
esp/src/eclwatch/nls/sr/hpcc.js

@@ -33,6 +33,7 @@
     ArchivedOnly: "Само Архивиран",
     ArchivedOnly: "Само Архивиран",
     ArchivedWarning: "Упозорење: користите кратак временски период. Ако користите дужи временски период, претраживање радних јединица може трајати дуже од дозвиљеног времена за претраживање.",
     ArchivedWarning: "Упозорење: користите кратак временски период. Ако користите дужи временски период, претраживање радних јединица може трајати дуже од дозвиљеног времена за претраживање.",
     AutoRefresh: "Освежи",
     AutoRefresh: "Освежи",
+    Back: "Назад",
     BannerColor: "Боја Рекламног Блока",
     BannerColor: "Боја Рекламног Блока",
     BannerMessage: "Порука за Рекламни Блок",
     BannerMessage: "Порука за Рекламни Блок",
     BannerScroll: "Кретање Рекламног Блока",
     BannerScroll: "Кретање Рекламног Блока",
@@ -60,11 +61,14 @@
     Command: "Команда",
     Command: "Команда",
     Comment: "Коментар",
     Comment: "Коментар",
     Completed: "Комплетиран",
     Completed: "Комплетиран",
+    ComplexityWarning: "Више од прага {threshold} активности ({activityCount}) - прекините приказ података?",
     Component: "Компонента",
     Component: "Компонента",
     Compress: "Сабијте",
     Compress: "Сабијте",
     Compressed: "Компримирани",
     Compressed: "Компримирани",
+    CompressedFileSize: "Компримирана Величина Датотеке",
     Configuration: "Конфигурација",
     Configuration: "Конфигурација",
     ConfirmPassword: "Потврдите Лозинку",
     ConfirmPassword: "Потврдите Лозинку",
+    ConfirmRemoval: "Јесте ли сигурни да то желите учинити?",
     Content: "Садржај",
     Content: "Садржај",
     Contents: "Садржаји",
     Contents: "Садржаји",
     ContentType: "Врста Садржаја",
     ContentType: "Врста Садржаја",
@@ -79,12 +83,14 @@
     Debug: "Отклоните Неисправности",
     Debug: "Отклоните Неисправности",
     DEF: "ДЕФ",
     DEF: "ДЕФ",
     Delete: "Обришите",
     Delete: "Обришите",
+    Deleted: "Избрисан",
     DeleteSelectedFiles: "Обришите Одабране Датотеке?",
     DeleteSelectedFiles: "Обришите Одабране Датотеке?",
     DeleteSelectedGroups: "Обришите одабрану(е) групу(е)?",
     DeleteSelectedGroups: "Обришите одабрану(е) групу(е)?",
     DeleteSelectedPermissions: "Обришите Одабране Дозволе За Приступ",
     DeleteSelectedPermissions: "Обришите Одабране Дозволе За Приступ",
     DeleteSelectedQueries: "Обришите Одабране Захтјеве?",
     DeleteSelectedQueries: "Обришите Одабране Захтјеве?",
     DeleteSelectedUsers: "Обришите Одабране Кориснике?",
     DeleteSelectedUsers: "Обришите Одабране Кориснике?",
     DeleteSelectedWorkunits: "Обришите Одабране Радне Јединице?",
     DeleteSelectedWorkunits: "Обришите Одабране Радне Јединице?",
+    DeleteSuperfile2: "Избришите Супер Датотеку",
     DeleteSuperfile: "Обришите Супердатотеке?",
     DeleteSuperfile: "Обришите Супердатотеке?",
     DeleteThisPackage: "Обришите Овај Пакет?",
     DeleteThisPackage: "Обришите Овај Пакет?",
     Delimited: "Разграничен",
     Delimited: "Разграничен",
@@ -93,17 +99,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: "Поново Обjедините Датотеку",
     Despray: "Поново Обjедините Датотеку",
     Details: "Детаљи",
     Details: "Детаљи",
     DFUServerName: "Име ДФУ Сервера",
     DFUServerName: "Име ДФУ Сервера",
+    DFUWorkunit: "ДФУ РаднаЈединицa",
     Directory: "Директориј",
     Directory: "Директориј",
     DisableScopeScanConfirm: "Да ли сте сигурни да желите онемогућити сканирање опсега? Промене ће бити прихваћене после рестарта ДАЛИја",
     DisableScopeScanConfirm: "Да ли сте сигурни да желите онемогућити сканирање опсега? Промене ће бити прихваћене после рестарта ДАЛИја",
     DisableScopeScans: "Онемогућите Сканирање Опсега",
     DisableScopeScans: "Онемогућите Сканирање Опсега",
     DiskUsage: "Искориштеност Диска",
     DiskUsage: "Искориштеност Диска",
     Distance: "Раздаљина",
     Distance: "Раздаљина",
+    DistanceTooltip: "Максимална Величина Подграфа За Одабрану Активност",
     Dll: "Длл",
     Dll: "Длл",
     DOT: "ДОТ",
     DOT: "ДОТ",
     DOTAttributes: "ДОТ Атрибути",
     DOTAttributes: "ДОТ Атрибути",
@@ -113,6 +122,7 @@
     Duration: "Трајање",
     Duration: "Трајање",
     EBCDIC: "ЕБЦДИK",
     EBCDIC: "ЕБЦДИK",
     ECL: "ЕЦЛ",
     ECL: "ЕЦЛ",
+    ECLWorkunit: "ЕЦЛ РаднаЈединица",
     Edges: "Ивице",
     Edges: "Ивице",
     Edit: "Едитујте",
     Edit: "Едитујте",
     EditDOT: "Едитујте ДОТ",
     EditDOT: "Едитујте ДОТ",
@@ -159,11 +169,16 @@
     Find: "Нађите",
     Find: "Нађите",
     FindNext: "Нађите Следећи",
     FindNext: "Нађите Следећи",
     FindPrevious: "Нађите Претходни",
     FindPrevious: "Нађите Претходни",
+    Finished: "Завршен",
     FirstName: "Име",
     FirstName: "Име",
+    FirstNRows: "Првих Н Редова",
     Fixed: "Фиксни",
     Fixed: "Фиксни",
+    Folder: "Фасцикла",
     Format: "Формат",
     Format: "Формат",
+    Forward: "Напред",
     FromDate: "Од Датума",
     FromDate: "Од Датума",
     FromSizes: "Од Величине",
     FromSizes: "Од Величине",
+    FromTime: "Од Времена",
     FullName: "Име и Презиме",
     FullName: "Име и Презиме",
     Graph: "Граф",
     Graph: "Граф",
     Graphs: "Графикони",
     Graphs: "Графикони",
@@ -206,6 +221,8 @@
     LargestSize: "Највећа величина",
     LargestSize: "Највећа величина",
     LastName: "Презиме",
     LastName: "Презиме",
     LastNDays: "Последњих Н Дана",
     LastNDays: "Последњих Н Дана",
+    LastNHours: "Последњих Н Сати",
+    LastNRows: "Последњих Н Редова",
     LDAPWarning: "<б>Грешка ЛДАП Сервица:</б>  'Превише корисника' - Молимо користите филтер.",
     LDAPWarning: "<б>Грешка ЛДАП Сервица:</б>  'Превише корисника' - Молимо користите филтер.",
     LegacyForm: "Стари Превазиђени Формулар",
     LegacyForm: "Стари Превазиђени Формулар",
     LibrariesUsed: "Библиотеке у Кориштењу",
     LibrariesUsed: "Библиотеке у Кориштењу",
@@ -220,6 +237,7 @@
     LoadPackageContentHere: "(Добавите овамо садржај пакета)",
     LoadPackageContentHere: "(Добавите овамо садржај пакета)",
     LoadPackageFromFile: "Добавите Пакет из Датотеке",
     LoadPackageFromFile: "Добавите Пакет из Датотеке",
     Local: "Локални",
     Local: "Локални",
+    Log: "Дневник (Лог)",
     LogFile: "Датотека Активности",
     LogFile: "Датотека Активности",
     LoggedInAs: "Пријављен као",
     LoggedInAs: "Пријављен као",
     LogicalFile: "Логичка Датотека",
     LogicalFile: "Логичка Датотека",
@@ -228,9 +246,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: "Максимум",
@@ -249,6 +270,7 @@
     MonitorShotLimit: "Надгледајте Шот Лимит",
     MonitorShotLimit: "Надгледајте Шот Лимит",
     MonitorSub: "Надгледајте Суб",
     MonitorSub: "Надгледајте Суб",
     Month: "Месец",
     Month: "Месец",
+    More: "Наставите",
     MustContainUppercaseAndSymbol: "Мораte укључити велико слово и симбол",
     MustContainUppercaseAndSymbol: "Мораte укључити велико слово и симбол",
     NA: "Н/A",
     NA: "Н/A",
     Name: "Име",
     Name: "Име",
@@ -304,10 +326,12 @@
     PasswordExpired: "Ваша лозинка је истекла И мора бити промењена",
     PasswordExpired: "Ваша лозинка је истекла И мора бити промењена",
     PasswordExpirePostfix: "дан(а). Желите ли је сада променити?",
     PasswordExpirePostfix: "дан(а). Желите ли је сада променити?",
     PasswordExpirePrefix: "Ваша лозинка ће истећи за",
     PasswordExpirePrefix: "Ваша лозинка ће истећи за",
+    PasswordOpenZAP: "Унесите Лозинку За ЗАП (необавезно)",
     PasswordsDoNotMatch: "Погрешна Лозинка.",
     PasswordsDoNotMatch: "Погрешна Лозинка.",
     Path: "Пут",
     Path: "Пут",
     PathMask: "Маска за Пут",
     PathMask: "Маска за Пут",
     Pause: "Пауза",
     Pause: "Пауза",
+    PauseNow: "Зауставите Одмах",
     PctComplete: "% Комплетиран",
     PctComplete: "% Комплетиран",
     PercentDone: "Проценат Завршен",
     PercentDone: "Проценат Завршен",
     PerformingLayout: "Извршава Лejaут...",
     PerformingLayout: "Извршава Лejaут...",
@@ -317,6 +341,7 @@
     PlaceholderFirstName: "Џон",
     PlaceholderFirstName: "Џон",
     PlaceholderLastName: "Смит",
     PlaceholderLastName: "Смит",
     Playground: "Игралиште",
     Playground: "Игралиште",
+    Plugins: "Допуне",
     Port: "Порт",
     Port: "Порт",
     Prefix: "Префикс",
     Prefix: "Префикс",
     PrefixPlaceholder: "имедатотеке{:дужина}, величинадатотеке{:[B|L][1-8]}",
     PrefixPlaceholder: "имедатотеке{:дужина}, величинадатотеке{:[B|L][1-8]}",
@@ -337,13 +362,17 @@
     Quarter: "Четвртина",
     Quarter: "Четвртина",
     Queries: "Упити",
     Queries: "Упити",
     QueriesNoPackage: "Упити без одговарајућег пакета",
     QueriesNoPackage: "Упити без одговарајућег пакета",
+    Query: "Упит",
     QueryDetailsfor: "Детаљи о Упиту",
     QueryDetailsfor: "Детаљи о Упиту",
+    QueryID: "Идентификатор Упита",
     QueryIDPlaceholder: "som?q*ry.1",
     QueryIDPlaceholder: "som?q*ry.1",
+    QueryName: "Име Упита",
     QueryNamePlaceholder: "My?Su?erQ*ry",
     QueryNamePlaceholder: "My?Su?erQ*ry",
     QuerySet: "Колекција Упита",
     QuerySet: "Колекција Упита",
     Queue: "Ред (Kjу)",
     Queue: "Ред (Kjу)",
     Quote: "Цитат",
     Quote: "Цитат",
     QuotedTerminator: "Завршни Карактер",
     QuotedTerminator: "Завршни Карактер",
+    RawTextPage: "Необрађен Текст (Текућа Страница)",
     RecordCount: "Број Рекорда",
     RecordCount: "Број Рекорда",
     RecordLength: "Дужина Рекорда",
     RecordLength: "Дужина Рекорда",
     Records: "Рекорди",
     Records: "Рекорди",
@@ -358,6 +387,8 @@
     RemoteDali: "Далеки Дали",
     RemoteDali: "Далеки Дали",
     RemoteDaliIP: "Далеки&nbsp;Дали&nbsp;ИП&nbsp;Адреса",
     RemoteDaliIP: "Далеки&nbsp;Дали&nbsp;ИП&nbsp;Адреса",
     Remove: "Уклоните",
     Remove: "Уклоните",
+    RemoveSubfiles: "Уклоните Поддатотеку",
+    RemoveUser: "Уклоните Корисника",
     Rename: "Преименујте",
     Rename: "Преименујте",
     RenderedSVG: "Донесене СВГ",
     RenderedSVG: "Донесене СВГ",
     RenderSVG: "Донесите СВГ",
     RenderSVG: "Донесите СВГ",
@@ -365,6 +396,8 @@
     RequestSchema: "Шема Захтева",
     RequestSchema: "Шема Захтева",
     Reschedule: "Поново Ставите На Распоред",
     Reschedule: "Поново Ставите На Распоред",
     Reset: "Ресетујте",
     Reset: "Ресетујте",
+    ResetThisQuery: "Ресетујте Текући Упит",
+    ResetViewToSelection: "Ресетујте Одабрани Вју",
     Resource: "Ресурс",
     Resource: "Ресурс",
     Resources: "Ресурси",
     Resources: "Ресурси",
     ResponseSchema: "Шема Одговора",
     ResponseSchema: "Шема Одговора",
@@ -377,6 +410,8 @@
     Resume: "Наставите",
     Resume: "Наставите",
     RetainSuperfileStructure: "Задржите Структуру Супердатотеке",
     RetainSuperfileStructure: "Задржите Структуру Супердатотеке",
     RetypePassword: "Поновите Лозинку",
     RetypePassword: "Поновите Лозинку",
+    Reverse: "Идите Уназад",
+    RowPath: "Пут До Рекорда",
     Rows: "Редови",
     Rows: "Редови",
     RowTag: "Етикета Реда",
     RowTag: "Етикета Реда",
     RoxieCluster: "Роkcи Кластер",
     RoxieCluster: "Роkcи Кластер",
@@ -415,6 +450,7 @@
     Start: "Почните",
     Start: "Почните",
     Started: "Почео",
     Started: "Почео",
     State: "Стање",
     State: "Стање",
+    Stats: "Статистике",
     Status: "Статус",
     Status: "Статус",
     Stopped: "Заустављен",
     Stopped: "Заустављен",
     Subgraph: "ПодГраф",
     Subgraph: "ПодГраф",
@@ -426,6 +462,8 @@
     SuperFile: "Супер Датотека",
     SuperFile: "Супер Датотека",
     Superfile: "Супер Датотека",
     Superfile: "Супер Датотека",
     SuperFiles: "Супер Датотеке",
     SuperFiles: "Супер Датотеке",
+    Superfiles: "СуперДатотеке",
+    SuperFilesBelongsTo: "Припадник Супердатотеке",
     SuperfilesOnly: "Само Супердатотеке",
     SuperfilesOnly: "Само Супердатотеке",
     Suspend: "Суспендујте",
     Suspend: "Суспендујте",
     Suspended: "Суспендован",
     Suspended: "Суспендован",
@@ -444,6 +482,7 @@
     TargetWuid: "Циљ/Pjид",
     TargetWuid: "Циљ/Pjид",
     Terminators: "Терминатори",
     Terminators: "Терминатори",
     TestPages: "Тест Странице",
     TestPages: "Тест Странице",
+    Text: "Текст",
     ThorMasterAddress: "Адреса Главног Тора",
     ThorMasterAddress: "Адреса Главног Тора",
     ThorNetworkAddress: "Нетворк Адреса Торa",
     ThorNetworkAddress: "Нетворк Адреса Торa",
     Time: "Време",
     Time: "Време",
@@ -470,8 +509,11 @@
     title_HPCCPlatformMain: "ECL Watch - Главна Страница",
     title_HPCCPlatformMain: "ECL Watch - Главна Страница",
     title_HPCCPlatformOps: "ECL Watch - Управљње",
     title_HPCCPlatformOps: "ECL Watch - Управљње",
     title_HPCCPlatformRoxie: "ECL Watch - Роkcи",
     title_HPCCPlatformRoxie: "ECL Watch - Роkcи",
+    title_HPCCPlatformServicesPlugin: "ЕЦЛ Монитор - Допуне",
     title_Inputs: "Уноси",
     title_Inputs: "Уноси",
     title_LFDetails: "Детаљи о Логичкоj Датотеци",
     title_LFDetails: "Детаљи о Логичкоj Датотеци",
+    title_LibrariesUsed: "Библиотеке У Кориштењу",
+    title_Log: "Лог Фајл",
     title_LZBrowse: "Зона за Претовар",
     title_LZBrowse: "Зона за Претовар",
     title_MemberOf: "Члан Од",
     title_MemberOf: "Члан Од",
     title_Members: "Чланови",
     title_Members: "Чланови",
@@ -485,15 +527,19 @@
     title_Results: "Резултати",
     title_Results: "Резултати",
     title_SearchResults: "Резултати Претраживања",
     title_SearchResults: "Резултати Претраживања",
     title_SourceFiles: "Оригиналне Датотеке",
     title_SourceFiles: "Оригиналне Датотеке",
+    title_Topology: "Топологија",
     title_TpThorStatus: "Стање Тора",
     title_TpThorStatus: "Стање Тора",
     title_UserPermissions: "Корисничке Дозвиле за Приступ",
     title_UserPermissions: "Корисничке Дозвиле за Приступ",
     title_UserQuery: "Права Приступа",
     title_UserQuery: "Права Приступа",
     title_WUDetails: "ЕЦЛ Детаљи о Радној Јединици",
     title_WUDetails: "ЕЦЛ Детаљи о Радној Јединици",
     title_WUQuery: "ЕЦЛ Радне Јединице",
     title_WUQuery: "ЕЦЛ Радне Јединице",
+    To: "Према",
     ToDate: "До Сада",
     ToDate: "До Сада",
     Toenablegraphviews: "Да бисте могли видети графиконе, мораћете инсталисати Граф Вjу Kонтрол плaгин",
     Toenablegraphviews: "Да бисте могли видети графиконе, мораћете инсталисати Граф Вjу Kонтрол плaгин",
     Top: "Врх",
     Top: "Врх",
+    Topology: "Топологија",
     ToSizes: "До Величина",
     ToSizes: "До Величина",
+    TotalClusterTime: "Укупно Време Кластера",
     TotalSize: "Укупна Величина",
     TotalSize: "Укупна Величина",
     TotalThorTime: "Укупно Време Тора",
     TotalThorTime: "Укупно Време Тора",
     TransitionGuide: "Водич",
     TransitionGuide: "Водич",

+ 1 - 0
esp/src/eclwatch/templates/WUDetailsWidget.html

@@ -82,6 +82,7 @@
                             <li>
                             <li>
                                 <label class="Prompt" for="${id}Cluster">${i18n.Cluster}:</label>
                                 <label class="Prompt" for="${id}Cluster">${i18n.Cluster}:</label>
                                 <div id="${id}Cluster"></div>
                                 <div id="${id}Cluster"></div>
+                                <div id="${id}AllowedClusters" data-dojo-type="dijit.form.Select"/></div>
                             </li>
                             </li>
                             <li>
                             <li>
                                 <label class="Prompt" for="${id}TotalClusterTime">${i18n.TotalClusterTime}:</label>
                                 <label class="Prompt" for="${id}TotalClusterTime">${i18n.TotalClusterTime}:</label>

+ 41 - 18
roxie/ccd/ccdserver.cpp

@@ -5321,6 +5321,7 @@ IRoxieServerActivityFactory *createRoxieServerInlineTableActivityFactory(unsigne
 class CRoxieServerWorkUnitReadActivity : public CRoxieServerActivity
 class CRoxieServerWorkUnitReadActivity : public CRoxieServerActivity
 {
 {
     IHThorWorkunitReadArg &helper;
     IHThorWorkunitReadArg &helper;
+    CriticalSection readerCrit;
     Owned<IWorkUnitRowReader> wuReader; // MORE - can we use IRoxieInput instead?
     Owned<IWorkUnitRowReader> wuReader; // MORE - can we use IRoxieInput instead?
 public:
 public:
     CRoxieServerWorkUnitReadActivity(const IRoxieServerActivityFactory *_factory, IProbeManager *_probeManager)
     CRoxieServerWorkUnitReadActivity(const IRoxieServerActivityFactory *_factory, IProbeManager *_probeManager)
@@ -5348,8 +5349,10 @@ public:
 
 
     virtual void reset() 
     virtual void reset() 
     {
     {
-        CriticalBlock b(statecrit);
-        wuReader.clear();
+        {
+            CriticalBlock b(readerCrit);
+            wuReader.clear();
+        }
         CRoxieServerActivity::reset(); 
         CRoxieServerActivity::reset(); 
     };
     };
 
 
@@ -5357,11 +5360,15 @@ public:
 
 
     virtual const void *nextInGroup()
     virtual const void *nextInGroup()
     {
     {
-        CriticalBlock b(statecrit);
         ActivityTimer t(totalCycles, timeActivities);
         ActivityTimer t(totalCycles, timeActivities);
-        if (!wuReader)
-            return NULL;
-        const void *ret = wuReader->nextInGroup();
+        Linked<IWorkUnitRowReader> useReader;
+        {
+            CriticalBlock b(readerCrit);
+            if (!wuReader)
+                return NULL;
+            useReader.set(wuReader);
+        }
+        const void *ret = useReader->nextInGroup();
         if (ret)
         if (ret)
             processed++;
             processed++;
         return ret;
         return ret;
@@ -5747,6 +5754,7 @@ protected:
 class CRoxieServerLocalResultReadActivity : public CRoxieServerActivity
 class CRoxieServerLocalResultReadActivity : public CRoxieServerActivity
 {
 {
     IHThorLocalResultReadArg &helper;
     IHThorLocalResultReadArg &helper;
+    CriticalSection iterCrit;
     Owned<IRoxieInput> iter;
     Owned<IRoxieInput> iter;
     ILocalGraphEx * graph;
     ILocalGraphEx * graph;
     unsigned graphId;
     unsigned graphId;
@@ -5775,18 +5783,24 @@ public:
 
 
     virtual void reset() 
     virtual void reset() 
     {
     {
-        CriticalBlock b(statecrit);
-        iter.clear();
+        {
+            CriticalBlock b(iterCrit);
+            iter.clear();
+        }
         CRoxieServerActivity::reset(); 
         CRoxieServerActivity::reset(); 
     };
     };
 
 
     virtual const void *nextInGroup()
     virtual const void *nextInGroup()
     {
     {
-        CriticalBlock b(statecrit);
         ActivityTimer t(totalCycles, timeActivities);
         ActivityTimer t(totalCycles, timeActivities);
-        if (!iter)
-            return NULL;
-        const void * next = iter->nextInGroup();
+        Linked<IRoxieInput> useIter;
+        {
+            CriticalBlock b(iterCrit);
+            if (!iter)
+                return NULL;
+            useIter.set(iter);
+        }
+        const void * next = useIter->nextInGroup();
         if (next)
         if (next)
         {
         {
             processed++;
             processed++;
@@ -6076,6 +6090,7 @@ class CRoxieServerGraphLoopResultReadActivity : public CRoxieServerActivity
 {
 {
 protected:
 protected:
     IHThorGraphLoopResultReadArg &helper;
     IHThorGraphLoopResultReadArg &helper;
+    CriticalSection iterCrit;
     Owned<IRoxieInput> iter;
     Owned<IRoxieInput> iter;
     ILocalGraphEx * graph;
     ILocalGraphEx * graph;
     unsigned graphId;
     unsigned graphId;
@@ -6126,18 +6141,26 @@ public:
 
 
     virtual void reset() 
     virtual void reset() 
     {
     {
-        CriticalBlock b(statecrit);
-        if (iter)
-            iter->reset();
-        iter.clear();
+        {
+            CriticalBlock b(iterCrit);
+            if (iter)
+                iter->reset();
+            iter.clear();
+        }
         CRoxieServerActivity::reset(); 
         CRoxieServerActivity::reset(); 
     };
     };
 
 
     virtual const void *nextInGroup()
     virtual const void *nextInGroup()
     {
     {
-        CriticalBlock b(statecrit);
         ActivityTimer t(totalCycles, timeActivities);
         ActivityTimer t(totalCycles, timeActivities);
-        const void * next = iter ? iter->nextInGroup() : NULL;
+        Linked<IRoxieInput> useIter;
+        {
+            CriticalBlock b(iterCrit);
+            if (!iter)
+                return NULL;
+            useIter.set(iter);
+        }
+        const void * next = useIter->nextInGroup();
         if (next)
         if (next)
         {
         {
             processed++;
             processed++;

+ 44 - 49
system/jlib/jthread.cpp

@@ -1732,7 +1732,7 @@ class CLinuxPipeProcess: public CInterface, implements IPipeProcess
             }
             }
             return 0;
             return 0;
         }
         }
-        void stop() 
+        void stop()
         {
         {
             stopsem.signal();
             stopsem.signal();
             Thread::join();
             Thread::join();
@@ -1780,6 +1780,27 @@ protected: friend class PipeWriterThread;
     StringArray envVars;
     StringArray envVars;
     StringArray envValues;
     StringArray envValues;
 
 
+    void clearUtilityThreads()
+    {
+        Owned<cForkThread> ft;
+        cStdErrorBufferThread *et;
+        {
+            CriticalBlock block(sect); // clear forkthread and stderrbufferthread
+            ft.setown(forkthread.getClear());
+            et = stderrbufferthread;
+            stderrbufferthread = NULL;
+        }
+        if (ft)
+        {
+            ft->join();
+            ft.clear();
+        }
+        if (et)
+        {
+            et->stop();
+            delete et;
+        }
+    }
 public:
 public:
     IMPLEMENT_IINTERFACE;
     IMPLEMENT_IINTERFACE;
 
 
@@ -1805,22 +1826,7 @@ public:
         closeInput();
         closeInput();
         closeOutput();
         closeOutput();
         closeError();
         closeError();
-
-        Owned<cForkThread> ft;
-        cStdErrorBufferThread *et;
-        {   CriticalBlock block(sect); // clear forkthread  and stderrbufferthread
-            ft.setown(forkthread.getClear());
-            et = stderrbufferthread;
-            stderrbufferthread = NULL;
-        }
-        if (ft) {
-            ft->join();
-            ft.clear();
-        }
-        if (et) {
-            et->stop();
-            delete et;
-        }
+        clearUtilityThreads();
     }
     }
 
 
 
 
@@ -2083,51 +2089,40 @@ public:
             pipeProcess = (HANDLE)-1;
             pipeProcess = (HANDLE)-1;
         }
         }
     }
     }
-    
-    
+
     unsigned wait()
     unsigned wait()
     {
     {
-        CriticalBlock block(sect); 
-        if (stderrbufferthread)
-            stderrbufferthread->stop();
-        if (forkthread) {
-            {
-                CriticalUnblock unblock(sect);
-                forkthread->join();
-            }
-            if (pipeProcess != (HANDLE)-1) {
-                if (title.length())
-                    PROGLOG("%s: Pipe: process %d complete %d",title.get(),pipeProcess,retcode);
-                pipeProcess = (HANDLE)-1;
-            }
-            forkthread.clear();
-        }
-        return retcode;
+        bool timedout;
+        return wait(INFINITE, timedout);
     }
     }
 
 
     unsigned wait(unsigned timeoutms, bool &timedout)
     unsigned wait(unsigned timeoutms, bool &timedout)
     {
     {
-        CriticalBlock block(sect); 
         timedout = false;
         timedout = false;
-        if (forkthread) {
+        if (INFINITE != timeoutms)
+        {
+            CriticalBlock block(sect);
+            if (forkthread)
             {
             {
-                CriticalUnblock unblock(sect);
-                if (!forkthread->join(timeoutms)) {
-                    timedout = true;
-                    return retcode;
+                {
+                    CriticalUnblock unblock(sect);
+                    if (!forkthread->join(timeoutms))
+                    {
+                        timedout = true;
+                        return retcode;
+                    }
                 }
                 }
-
-            }
-            if (pipeProcess != (HANDLE)-1) {
-                if (title.length())
-                    PROGLOG("%s: Pipe: process %d complete %d",title.get(),pipeProcess,retcode);
-                pipeProcess = (HANDLE)-1;
             }
             }
-            forkthread.clear();
+        }
+        clearUtilityThreads(); // NB: will recall forkthread->join(), but doesn't matter
+        if (pipeProcess != (HANDLE)-1)
+        {
+            if (title.length())
+                PROGLOG("%s: Pipe: process %d complete %d", title.get(), pipeProcess, retcode);
+            pipeProcess = (HANDLE)-1;
         }
         }
         return retcode;
         return retcode;
     }
     }
-    
 
 
     void closeOutput()
     void closeOutput()
     {
     {