From a74f38dc32409f2cef199f9f4cbdc148d833edca Mon Sep 17 00:00:00 2001 From: hdsdi3g Date: Thu, 31 Dec 2015 18:36:46 +0100 Subject: [PATCH] Update #159: add new informations in InstanceStatus summary, add Instance Summaries and Classpath panels, update menu. --- app/controllers/ajs/Instances.java | 40 +++-- .../mydmam/manager/AJSgetItems.java} | 26 +-- app/hd3gtv/mydmam/manager/InstanceStatus.java | 74 ++++++++- app/react/mydmam/async/manager/Classpaths.jsx | 118 ++++++++++++++ app/react/mydmam/async/manager/Header.jsx | 67 ++++++++ app/react/mydmam/async/manager/Summaries.jsx | 117 ++++++++++++++ app/views/maingrid.html | 7 +- conf/jsfiles.json | 28 +++- conf/messages.en | 153 ++++++++++-------- conf/messages.fr | 153 ++++++++++-------- .../_reduced/_internal_concated.js.gz | Bin 34890 -> 35796 bytes .../mydmam.async.manager.Classpaths.js | 12 ++ .../_reduced/mydmam.async.manager.Header.js | 8 + .../mydmam.async.manager.Summaries.js | 11 ++ .../_reduced/mydmam.async.manager.view.js | 3 - .../mydmam.async.manager.Classpaths.js | 122 ++++++++++++++ .../mydmam.async.manager.Header.js | 71 ++++++++ .../mydmam.async.manager.Summaries.js | 121 ++++++++++++++ .../_transformed/mydmam.async.manager.view.js | 41 ----- 19 files changed, 949 insertions(+), 223 deletions(-) rename app/{react/mydmam/async/manager/view.jsx => hd3gtv/mydmam/manager/AJSgetItems.java} (56%) create mode 100644 app/react/mydmam/async/manager/Classpaths.jsx create mode 100644 app/react/mydmam/async/manager/Header.jsx create mode 100644 app/react/mydmam/async/manager/Summaries.jsx create mode 100644 public/javascripts/_reduced/mydmam.async.manager.Classpaths.js create mode 100644 public/javascripts/_reduced/mydmam.async.manager.Header.js create mode 100644 public/javascripts/_reduced/mydmam.async.manager.Summaries.js delete mode 100644 public/javascripts/_reduced/mydmam.async.manager.view.js create mode 100644 public/javascripts/_transformed/mydmam.async.manager.Classpaths.js create mode 100644 public/javascripts/_transformed/mydmam.async.manager.Header.js create mode 100644 public/javascripts/_transformed/mydmam.async.manager.Summaries.js delete mode 100644 public/javascripts/_transformed/mydmam.async.manager.view.js diff --git a/app/controllers/ajs/Instances.java b/app/controllers/ajs/Instances.java index 95d509a3..11c9c9dd 100644 --- a/app/controllers/ajs/Instances.java +++ b/app/controllers/ajs/Instances.java @@ -16,17 +16,26 @@ */ package controllers.ajs; +import java.lang.reflect.Type; +import java.util.ArrayList; + +import com.google.common.reflect.TypeToken; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; import controllers.Check; +import hd3gtv.mydmam.manager.AJSgetItems; import hd3gtv.mydmam.manager.AppManager; import hd3gtv.mydmam.manager.InstanceStatus; import hd3gtv.mydmam.web.AJSController; public class Instances extends AJSController { - /*private static Type al_String_typeOfT = new TypeToken>() { - }.getType();*/ + private static Type al_String_typeOfT = new TypeToken>() { + }.getType(); /*private static Type hm_StringJob_typeOfT = new TypeToken>() { }.getType();*/ @@ -41,15 +50,17 @@ public JsonElement serialize(AsyncJSBrokerResponseList src, Type typeOfSrc, Json } });*/ - /*AJSController.registerTypeAdapter(InstanceStatusResponse.class, new JsonSerializer() { - public JsonElement serialize(InstanceStatusResponse src, Type typeOfSrc, JsonSerializationContext context) { - return src.list; + AJSController.registerTypeAdapter(AJSgetItems.class, new JsonDeserializer() { + public AJSgetItems deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + AJSgetItems result = new AJSgetItems(); + result.refs = AppManager.getSimpleGson().fromJson(json.getAsJsonObject().get("refs").getAsJsonArray(), al_String_typeOfT); + return result; } - })*/; + }); } /** - * @return raw Cassandra json items. + * @return instance ref -> raw JS */ @Check("showInstances") public static JsonObject allSummaries() { @@ -59,7 +70,7 @@ public static JsonObject allSummaries() { } /** - * @return raw Cassandra json items. + * @return instance ref -> raw JS */ @Check("showInstances") public static JsonObject allThreads() { @@ -69,7 +80,7 @@ public static JsonObject allThreads() { } /** - * @return raw Cassandra json items. + * @return instance ref -> raw JS */ @Check("showInstances") public static JsonObject allClasspaths() { @@ -79,7 +90,7 @@ public static JsonObject allClasspaths() { } /** - * @return raw Cassandra json items. + * @return instance ref -> raw JS */ @Check("showInstances") public static JsonObject allItems() { @@ -88,4 +99,13 @@ public static JsonObject allItems() { return result; } + /** + * @return instance ref -> CF -> raw JS + */ + @Check("showInstances") + public static JsonObject byrefs(AJSgetItems items) { + JsonObject result = current.getByKeys(items.refs, true); + return result; + } + } diff --git a/app/react/mydmam/async/manager/view.jsx b/app/hd3gtv/mydmam/manager/AJSgetItems.java similarity index 56% rename from app/react/mydmam/async/manager/view.jsx rename to app/hd3gtv/mydmam/manager/AJSgetItems.java index 76ba76ca..6534d610 100644 --- a/app/react/mydmam/async/manager/view.jsx +++ b/app/hd3gtv/mydmam/manager/AJSgetItems.java @@ -14,24 +14,12 @@ * Copyright (C) hdsdi3g for hd3g.tv 2015 * */ +package hd3gtv.mydmam.manager; -manager.View = React.createClass({ - getInitialState: function() { - return { - }; - }, - componentWillMount: function() { - }, - componentDidMount: function(){ - }, - componentWillUnmount: function() { - }, - render: function(){ - return ( - - - ); - }, -}); +import java.util.ArrayList; -//mydmam.routes.push("broker-Jobs", "broker", manager.View, [{name: "broker", verb: "list"}]); +public class AJSgetItems { + + public ArrayList refs; + +} diff --git a/app/hd3gtv/mydmam/manager/InstanceStatus.java b/app/hd3gtv/mydmam/manager/InstanceStatus.java index db4cf70a..509d96c2 100644 --- a/app/hd3gtv/mydmam/manager/InstanceStatus.java +++ b/app/hd3gtv/mydmam/manager/InstanceStatus.java @@ -24,7 +24,9 @@ import java.net.SocketException; import java.net.UnknownHostException; import java.util.ArrayList; +import java.util.Arrays; import java.util.Enumeration; +import java.util.List; import java.util.Map; import com.google.gson.Gson; @@ -36,8 +38,11 @@ import com.netflix.astyanax.Keyspace; import com.netflix.astyanax.MutationBatch; import com.netflix.astyanax.connectionpool.exceptions.ConnectionException; +import com.netflix.astyanax.model.Column; import com.netflix.astyanax.model.ColumnFamily; +import com.netflix.astyanax.model.ColumnList; import com.netflix.astyanax.model.Row; +import com.netflix.astyanax.model.Rows; import com.netflix.astyanax.serializers.StringSerializer; import hd3gtv.configuration.Configuration; @@ -157,9 +162,26 @@ public class Summary { private String app_version; @SuppressWarnings("unused") private String java_version; + @SuppressWarnings("unused") + private String java_vendor; private String host_name; private ArrayList host_addresses; + @SuppressWarnings("unused") + private String os_arch; + @SuppressWarnings("unused") + private String os_name; + @SuppressWarnings("unused") + private String os_version; + @SuppressWarnings("unused") + private String user_country; + @SuppressWarnings("unused") + private String user_language; + @SuppressWarnings("unused") + private String user_name; + @SuppressWarnings("unused") + private String user_timezone; + /** * Only if manager is set */ @@ -190,7 +212,15 @@ public Summary() { } else { app_version = "unknow"; } - java_version = System.getProperty("java.version"); + java_version = System.getProperty("java.version", "0"); + java_vendor = System.getProperty("java.vendor", "(No set)"); + os_arch = System.getProperty("os.arch", "(No set)"); + os_name = System.getProperty("os.name", "(No set)"); + os_version = System.getProperty("os.version", "(No set)"); + user_country = System.getProperty("user.country", "(No set)"); + user_language = System.getProperty("user.language", "(No set)"); + user_name = System.getProperty("user.name", "(No set)"); + user_timezone = System.getProperty("user.timezone", "(No set)"); host_addresses = new ArrayList(); try { @@ -390,4 +420,46 @@ public void onFoundRow(Row row) throws Exception { return result; } + /** + * @return raw Cassandra items. + */ + public JsonObject getByKeys(ArrayList refs, boolean add_static_instance) { + if (refs == null) { + throw new NullPointerException("\"refs\" can't to be null"); + } + + final JsonObject result = new JsonObject(); + final JsonParser parser = new JsonParser(); + + List col_names = Arrays.asList(CF_COLS.COL_SUMMARY.toString(), CF_COLS.COL_ITEMS.toString()); + + try { + Rows rows = keyspace.prepareQuery(CF_INSTANCES).getKeySlice(refs).withColumnSlice(col_names).execute().getResult(); + + for (Row row : rows) { + JsonObject item = new JsonObject(); + ColumnList cols = row.getColumns(); + for (Column col : cols) { + String value = col.getStringValue(); + if (value != null) { + item.add(col.getName(), parser.parse(value)); + } + } + result.add(row.getKey(), item); + } + } catch (Exception e) { + manager.getServiceException().onCassandraError(e); + } + + if (add_static_instance) { + JsonObject item = new JsonObject(); + getStatic(); + item.add(CF_COLS.COL_SUMMARY.toString(), AppManager.getSimpleGson().toJsonTree(is_static.summary)); + item.add(CF_COLS.COL_ITEMS.toString(), is_static.getItems()); + result.add(is_static.summary.getInstanceNamePid(), item); + } + + return result; + } + } diff --git a/app/react/mydmam/async/manager/Classpaths.jsx b/app/react/mydmam/async/manager/Classpaths.jsx new file mode 100644 index 00000000..5f04d95f --- /dev/null +++ b/app/react/mydmam/async/manager/Classpaths.jsx @@ -0,0 +1,118 @@ +/* + * This file is part of MyDMAM. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * Copyright (C) hdsdi3g for hd3g.tv 2015 + * +*/ + +manager.Classpaths = React.createClass({ + getInitialState: function() { + return { + list: {}, + instances: {}, + }; + }, + componentWillMount: function() { + mydmam.async.request("instances", "allclasspaths", null, function(list) { + this.setState({list: list}); + }.bind(this)); + }, + render: function() { + var items = []; + var declared_classpath = []; + var instance_refs_to_resolve = []; + + /** + * Mergue all CP for create a reference list. + */ + var current_classpath; + for (var instance_ref in this.state.list) { + current_classpath = this.state.list[instance_ref]; + for (var pos in current_classpath) { + if (declared_classpath.indexOf(current_classpath[pos]) == -1) { + declared_classpath.push(current_classpath[pos]); + } + } + } + + for (pos in declared_classpath) { + for (var instance_ref in this.state.list) { + current_classpath = this.state.list[instance_ref]; + if (current_classpath.indexOf(declared_classpath[pos]) == -1) { + var instance_info = instance_ref; + if (this.state.instances[instance_ref]) { + if (this.state.instances[instance_ref] !== "nope") { + var summary = this.state.instances[instance_ref].summary; + instance_info = summary.instance_name + " (" + summary.app_name + ") " + summary.host_name; + } else { + instance_info = i18n("manager.classpath.notfound") + " :: " + instance_ref; + } + } else { + instance_refs_to_resolve.push(instance_ref); + } + + items.push( + {declared_classpath[pos]} + {instance_info} + ); + } + } + } + + if (instance_refs_to_resolve.length > 0) { + mydmam.async.request("instances", "byrefs", {refs: instance_refs_to_resolve}, function(data) { + for (var pos in instance_refs_to_resolve) { + if (data[instance_refs_to_resolve[pos]] == null) { + data[instance_refs_to_resolve[pos]] = "nope"; + } + } + this.setState({instances: jQuery.extend({}, this.state.instances, data)}); + }.bind(this)); + } + + /* + + {i18n("manager.instance.host")} + {i18n("manager.instance.manager")} + {i18n("manager.instance.version")} + {i18n("manager.instance.uptime")} + {i18n("manager.instance.jvm")} + {i18n("manager.instance.addr")} + {i18n("manager.instance.os")} + {i18n("manager.instance.user")} + + */ + //items.push(); + + return ( + + + + + + + + + {items} + +
{i18n("manager.classpath.missing")}{i18n("manager.classpath.missingin")}
+ ); + }, +}); + +manager.InstanceClasspath = React.createClass({ + render: function() { + return null; + }, +}); + diff --git a/app/react/mydmam/async/manager/Header.jsx b/app/react/mydmam/async/manager/Header.jsx new file mode 100644 index 00000000..2aa77e0b --- /dev/null +++ b/app/react/mydmam/async/manager/Header.jsx @@ -0,0 +1,67 @@ +/* + * This file is part of MyDMAM. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * Copyright (C) hdsdi3g for hd3g.tv 2015 + * +*/ + +manager.Header = React.createClass({ + render: function(){ + var show_this = null; + if (this.props.params) { + if (this.props.params.tab) { + if (this.props.params.tab == "summary") { + show_this = (); + } else if (this.props.params.tab == "classpath") { + show_this = (); + } + } + } + + //allitems + //allthreads + + if (show_this == null) { + show_this = (); + } + + return ( + +
    + + +
+ {show_this} +
+ ); + }, +}); + +mydmam.routes.push("manager", "manager/:tab", manager.Header, [{name: "instances", verb: "allsummaries"}]); + +manager.HeaderTab = React.createClass({ + onClick: function(e) { + //e.preventDefault(); + //this.props.onActiveChange(this.props.pos); + $(React.findDOMNode(this.refs.tab)).blur(); + }, + render: function(){ + var li_class = classNames({ + "active": this.props.href == location.hash + }); + + return (
  • + {i18n(this.props.i18nlabel)} +
  • ); + }, +}); diff --git a/app/react/mydmam/async/manager/Summaries.jsx b/app/react/mydmam/async/manager/Summaries.jsx new file mode 100644 index 00000000..91578ba1 --- /dev/null +++ b/app/react/mydmam/async/manager/Summaries.jsx @@ -0,0 +1,117 @@ +/* + * This file is part of MyDMAM. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * Copyright (C) hdsdi3g for hd3g.tv 2015 + * +*/ + +manager.Summaries = React.createClass({ + getInitialState: function() { + return { + list: {}, + interval: null, + }; + }, + componentWillMount: function() { + this.refresh(); + }, + refresh: function() { + mydmam.async.request("instances", "allsummaries", null, function(list) { + this.setState({list: list}); + }.bind(this)); + }, + componentDidMount: function(){ + this.setState({interval: setInterval(this.refresh, 10000)}); + }, + componentWillUnmount: function() { + if (this.state.interval) { + clearInterval(this.state.interval); + } + }, + render: function() { + var items = []; + for (var instance_ref in this.state.list) { + items.push(); + } + return ( + + + + + + + + + + + + + + + {items} + +
    {i18n("manager.instance.host")}{i18n("manager.instance.manager")}{i18n("manager.instance.version")}{i18n("manager.instance.uptime")}{i18n("manager.instance.jvm")}{i18n("manager.instance.addr")}{i18n("manager.instance.os")}{i18n("manager.instance.user")}
    + ); + }, +}); + +manager.InstanceSummary = React.createClass({ + render: function() { + + var addr = []; + for (var pos in this.props.instance.host_addresses) { + addr.push(• {this.props.instance.host_addresses[pos]}
    ); + } + + var arch = null; + if (this.props.instance.os_arch != "x86_64") { + arch = this.props.instance.os_arch; + } + + return ( + {this.props.instance.host_name}
    + PID {this.props.instance.pid} + + + {this.props.instance.instance_name}
    + {this.props.instance.app_name} + + + {this.props.instance.app_version} + + + + + + {this.props.instance.java_version}
    + + {this.props.instance.java_vendor} + + + {addr} + + + {this.props.instance.os_name}
    + {this.props.instance.os_version} {arch} +
    + + + + {this.props.instance.user_name} • {this.props.instance.user_language}_{this.props.instance.user_country}
    + {this.props.instance.user_timezone} +
    + + ); + }, +}); + diff --git a/app/views/maingrid.html b/app/views/maingrid.html index cdc65bcf..15a65e29 100644 --- a/app/views/maingrid.html +++ b/app/views/maingrid.html @@ -250,10 +250,13 @@ #{/secure.check} - #{secure.check 'showManager'} + #{secure.check 'showInstances'}
  • - &{'manager.pagename'} + &{'manager.pagename'}
  • + #{/secure.check} + + #{secure.check 'showManager'}
  • &{'service.clusterstatus.report.pagename'}
  • diff --git a/conf/jsfiles.json b/conf/jsfiles.json index cfd8ed81..68b765bc 100644 --- a/conf/jsfiles.json +++ b/conf/jsfiles.json @@ -14,13 +14,6 @@ "date": 1447281328000, "hash": "3074199de23c347614dce3928e5ccdd7" }, - "jsfile:629658be2d25f690a358268ca5da9b63": { - "relative_file_name": "mydmam/async/manager/view.jsx", - "relative_root_name": "/app/react", - "size": 1049, - "date": 1451521388000, - "hash": "b248de7ac9631f5a554a5a9c3bfd4efb" - }, "jsfile:6993cab1841c756c7031796d0e001257": { "relative_file_name": "mydmam.manager.js", "relative_root_name": "/public/javascripts/src", @@ -189,6 +182,13 @@ "date": 1432409474000, "hash": "a4f90f37554cb484feaec06408a09545" }, + "jsfile:b7d91545766920a3de285aba8fb98ffa": { + "relative_file_name": "mydmam/async/manager/Summaries.jsx", + "relative_root_name": "/app/react", + "size": 3193, + "date": 1451579856000, + "hash": "f44bdfceabaef81a1ee73aa07a6fac32" + }, "jsfile:443eb424ffd752530719098e172eff4c": { "relative_file_name": "mydmam.basket.a-header.js", "relative_root_name": "/public/javascripts/src", @@ -259,6 +259,20 @@ "date": 1432409474000, "hash": "c9ccdb08c2ec58f3e537362e231c5091" }, + "jsfile:0f9d92afb6e36b2ba525d38703dd6f0f": { + "relative_file_name": "mydmam/async/manager/Classpaths.jsx", + "relative_root_name": "/app/react", + "size": 3554, + "date": 1451583128000, + "hash": "eb881265572f48101a1ed62a36bc2808" + }, + "jsfile:020b7cab317b8f90a9bb2a9106ba04ea": { + "relative_file_name": "mydmam/async/manager/Header.jsx", + "relative_root_name": "/app/react", + "size": 1923, + "date": 1451579410000, + "hash": "462cc3db8bb812d211afdd0b3bf8c43e" + }, "jsfile:e3dcad62de20b45b8628c5fd4516d4a9": { "relative_file_name": "helloworld.jsx", "relative_root_name": "/app/react", diff --git a/conf/messages.en b/conf/messages.en index d2366491..bc2b8e6f 100644 --- a/conf/messages.en +++ b/conf/messages.en @@ -65,76 +65,89 @@ service.playjobs.switchjsdevmode.status=actually in dev mode service.playjobs.purgejs=Purge et re-make all computed JS files service.playjobs.ajsdebugpage=Async JS debug page -manager.pagename=Service manager -manager.loading=Loading... -manager.nodetectedmodule=No instance detected -manager.summary.title=Instance summary -manager.summary.instance_name= -manager.summary.app_name=Name -manager.summary.uptime=Uptime -manager.summary.java_version=Java version -manager.summary.app_version=App version -manager.summary.host=Server -manager.summary.addresses=Addresses -manager.summary.actions=Actions -manager.summary.broker.stop=Stop broker -manager.summary.broker.start=Start broker -manager.summary.next_updater_refresh_date.to=Will update within %s -manager.summary.next_updater_refresh_date.from=Not updated from %s -manager.threads.title=Threads stack traces -manager.threads.tnamestate=Name and state -manager.threads.tstacks=Stacks -manager.classpaths.title=Classpaths -manager.classpaths.item=Classpath item -manager.classpaths.missinginstances=Instances where it missing -manager.classpaths.cpiseverywhere=Present everywhere -manager.classpaths.warnmessage=The missing items are indicated only for information, it may be normal depending on the installation. -manager.cyclic.title=Regular creation jobs -manager.trigger.title=Creating jobs by triggers -manager.uafunctlist.title=User functionalities -manager.uafunctlist.functionality=Functionality -manager.uafunctlist.profiles=Declared profiles -manager.uafunctlist.capabilities=Capabilities -manager.uafunctlist.storageindexeswhitelist=Storage indexes whitelist -manager.uafunctlist.powerful_and_dangerous=Potentially dangerous -manager.workers.title=Active workers -manager.workers.empty=No active workers... -manager.workers.refresherror=Can't refresh the worker list. Check your access to the server. -manager.workers.inrefresh=The table is being updated... -manager.workers.category.INDEXING=Indexing -manager.workers.category.METADATA=Metadata -manager.workers.category.EXTERNAL_MODULE=Module -manager.workers.category.USERACTION=User action -manager.workers.category.INTERNAL=Internal -manager.workers.state.PROCESSING=In processing -manager.workers.state.WAITING=In waiting -manager.workers.state.STOPPED=Stopped -manager.workers.state.PENDING_STOP=In stop pending -manager.workers.action.start=Stop -manager.workers.action.stop=Start -manager.workers.currentjob=Current job: %s -manager.workers.capablitystorages=Storages: -manager.workers.th.instance=Instance -manager.workers.th.name=Name -manager.workers.th.state=State -manager.workers.th.capabilities=Capabilities -manager.jobcreator.disabled=Disabled -manager.jobcreator.createdby=Created by: -manager.jobcreator.th.instance=Instance -manager.jobcreator.th.name=Name -manager.jobcreator.th.declarations=Jobs creations -manager.jobcreator.th.actions=Actions -manager.jobcreator.context.neededindexedstoragesnames=Linked storages: -manager.jobcreator.action.enable=Enable -manager.jobcreator.action.disable=Disable -manager.jobcreator.action.createjobs=Create jobs -manager.jobcreator.cyclic.period=Period -manager.jobcreator.cyclic.onlyonoffhours=Only in off hours -manager.jobcreator.cyclic.actuallyonoffhours=Now in off hours -manager.jobcreator.cyclic.periodvalue=Creating every %s -manager.jobcreator.cyclic.nextdate=Next creation in %s -manager.jobcreator.cyclic.nonextdate=No next creation -manager.jobcreator.trigger.hook=Trigger on +manager.pagename=Instances +manager.summaries=Summary +manager.instance.uptime=Uptime +manager.instance.host=Host +manager.instance.manager=Manager +manager.instance.version=Version +manager.instance.jvm=Java VM +manager.instance.addr=Addresses +manager.instance.os=System +manager.instance.user=User +manager.classpath=Classpaths +manager.classpath.notfound=Can't found +manager.classpath.missing=Missing +manager.classpath.missingin=In +# manager.loading=Loading... +# manager.nodetectedmodule=No instance detected +# manager.summary.title=Instance summary +# manager.summary.instance_name= +# manager.summary.app_name=Name +# manager.summary.uptime=Uptime +# manager.summary.java_version=Java version +# manager.summary.app_version=App version +# manager.summary.host=Server +# manager.summary.addresses=Addresses +# manager.summary.actions=Actions +# manager.summary.broker.stop=Stop broker +# manager.summary.broker.start=Start broker +# manager.summary.next_updater_refresh_date.to=Will update within %s +# manager.summary.next_updater_refresh_date.from=Not updated from %s +# manager.threads.title=Threads stack traces +# manager.threads.tnamestate=Name and state +# manager.threads.tstacks=Stacks +# manager.classpaths.title=Classpaths +# manager.classpaths.item=Classpath item +# manager.classpaths.missinginstances=Instances where it missing +# manager.classpaths.cpiseverywhere=Present everywhere +# manager.classpaths.warnmessage=The missing items are indicated only for information, it may be normal depending on the installation. +# manager.cyclic.title=Regular creation jobs +# manager.trigger.title=Creating jobs by triggers +# manager.uafunctlist.title=User functionalities +# manager.uafunctlist.functionality=Functionality +# manager.uafunctlist.profiles=Declared profiles +# manager.uafunctlist.capabilities=Capabilities +# manager.uafunctlist.storageindexeswhitelist=Storage indexes whitelist +# manager.uafunctlist.powerful_and_dangerous=Potentially dangerous +# manager.workers.title=Active workers +# manager.workers.empty=No active workers... +# manager.workers.refresherror=Can't refresh the worker list. Check your access to the server. +# manager.workers.inrefresh=The table is being updated... +# manager.workers.category.INDEXING=Indexing +# manager.workers.category.METADATA=Metadata +# manager.workers.category.EXTERNAL_MODULE=Module +# manager.workers.category.USERACTION=User action +# manager.workers.category.INTERNAL=Internal +# manager.workers.state.PROCESSING=In processing +# manager.workers.state.WAITING=In waiting +# manager.workers.state.STOPPED=Stopped +# manager.workers.state.PENDING_STOP=In stop pending +# manager.workers.action.start=Stop +# manager.workers.action.stop=Start +# manager.workers.currentjob=Current job: %s +# manager.workers.capablitystorages=Storages: +# manager.workers.th.instance=Instance +# manager.workers.th.name=Name +# manager.workers.th.state=State +# manager.workers.th.capabilities=Capabilities +# manager.jobcreator.disabled=Disabled +# manager.jobcreator.createdby=Created by: +# manager.jobcreator.th.instance=Instance +# manager.jobcreator.th.name=Name +# manager.jobcreator.th.declarations=Jobs creations +# manager.jobcreator.th.actions=Actions +# manager.jobcreator.context.neededindexedstoragesnames=Linked storages: +# manager.jobcreator.action.enable=Enable +# manager.jobcreator.action.disable=Disable +# manager.jobcreator.action.createjobs=Create jobs +# manager.jobcreator.cyclic.period=Period +# manager.jobcreator.cyclic.onlyonoffhours=Only in off hours +# manager.jobcreator.cyclic.actuallyonoffhours=Now in off hours +# manager.jobcreator.cyclic.periodvalue=Creating every %s +# manager.jobcreator.cyclic.nextdate=Next creation in %s +# manager.jobcreator.cyclic.nonextdate=No next creation +# manager.jobcreator.trigger.hook=Trigger on manager.jobs.pagename=Jobs list manager.jobs.status.WAITING=Waiting manager.jobs.status.PREPARING=Preparing diff --git a/conf/messages.fr b/conf/messages.fr index 4d39f068..30c708bd 100644 --- a/conf/messages.fr +++ b/conf/messages.fr @@ -65,76 +65,89 @@ service.playjobs.switchjsdevmode.status=actuellement en mode dev service.playjobs.purgejs=Purger et refaire tout les fichiers JS calculés service.playjobs.ajsdebugpage=Page de debug async JS -manager.pagename=Gestion des services -manager.loading=Chargement... -manager.nodetectedmodule=Aucune instance détectée -manager.summary.title=Résumé des instances -manager.summary.instance_name=Instance -manager.summary.app_name=Nom -manager.summary.uptime=Uptime -manager.summary.java_version=Version Java -manager.summary.app_version=Version app -manager.summary.host=Serveur -manager.summary.addresses=Adresses -manager.summary.actions=Actions -manager.summary.broker.stop=Stop broker -manager.summary.broker.start=Start broker -manager.summary.next_updater_refresh_date.to=Sera mis à jour dans %s -manager.summary.next_updater_refresh_date.from=Plus à jour depuis %s -manager.threads.title=Traces des piles des threads -manager.threads.tnamestate=Nom et Etat -manager.threads.tstacks=Trace de la pile -manager.classpaths.title=Classpaths -manager.classpaths.item=Element du classpath -manager.classpaths.missinginstances=Instances où il manque -manager.classpaths.cpiseverywhere=Present partout -manager.classpaths.warnmessage=Les instances manquantes sont indiqués seulement pour information, cela peut-être normal selon les installations. -manager.cyclic.title=Création régulière de jobs -manager.trigger.title=Création de jobs par déclencheurs -manager.uafunctlist.title=Fonctionnalités utilisateur -manager.uafunctlist.functionality=Fonctionnalité -manager.uafunctlist.profiles=Profiles déclarés -manager.uafunctlist.capabilities=Capacités -manager.uafunctlist.storageindexeswhitelist=Liste blanche des stockages indexés -manager.uafunctlist.powerful_and_dangerous=Potentiellement dangereux -manager.workers.title=Workers actifs -manager.workers.empty=Pas de workers actifs... -manager.workers.refresherror=Impossible d'actualiser la liste des workers. Vérifiez votre accès au serveur. -manager.workers.inrefresh=Le tableau est en cours de mise à jour... -manager.workers.category.INDEXING=Indexation -manager.workers.category.METADATA=Metadata -manager.workers.category.EXTERNAL_MODULE=Module -manager.workers.category.USERACTION=Action utilisateur -manager.workers.category.INTERNAL=Interne -manager.workers.state.PROCESSING=En traitement -manager.workers.state.WAITING=En attente -manager.workers.state.STOPPED=Arrêté -manager.workers.state.PENDING_STOP=En cours d'arrêt -manager.workers.action.start=Démarrer -manager.workers.action.stop=Arrêter -manager.workers.currentjob=Job courant : %s -manager.workers.capablitystorages=Stockages: -manager.workers.th.instance=Instance -manager.workers.th.name=Nom -manager.workers.th.state=Etat -manager.workers.th.capabilities=Capacités -manager.jobcreator.disabled=Desactivé -manager.jobcreator.createdby=Crée par : -manager.jobcreator.th.instance=Instance -manager.jobcreator.th.name=Nom -manager.jobcreator.th.declarations=Creations de jobs -manager.jobcreator.th.actions=Actions -manager.jobcreator.context.neededindexedstoragesnames=Stockages liés : -manager.jobcreator.action.enable=Activer -manager.jobcreator.action.disable=Desactiver -manager.jobcreator.action.createjobs=Créer les jobs -manager.jobcreator.cyclic.period=Période -manager.jobcreator.cyclic.onlyonoffhours=Seulement en heures creuses -manager.jobcreator.cyclic.actuallyonoffhours=Actuellement en heures creuses -manager.jobcreator.cyclic.periodvalue=Création toutes les %s -manager.jobcreator.cyclic.nextdate=Prochaine création dans %s -manager.jobcreator.cyclic.nonextdate=Pas de prochaine création -manager.jobcreator.trigger.hook=Job de déclenchement +manager.pagename=Instances +manager.summaries=Résumé +manager.instance.uptime=Uptime +manager.instance.host=Serveur +manager.instance.manager=Manager +manager.instance.version=Version +manager.instance.jvm=VM Java +manager.instance.addr=Adresses +manager.instance.os=Système +manager.instance.user=Utilisateur +manager.classpath=Classpaths +manager.classpath.notfound=Introuvable +manager.classpath.missing=Manquant +manager.classpath.missingin=Dans +# manager.loading=Chargement... +# manager.nodetectedmodule=Aucune instance détectée +# manager.summary.title=Résumé des instances +# manager.summary.instance_name=Instance +# manager.summary.app_name=Nom +# manager.summary. +# manager.summary.java_version=Version Java +# manager.summary.app_version=Version app +# manager.summary.host=Serveur +# manager.summary.addresses=Adresses +# manager.summary.actions=Actions +# manager.summary.broker.stop=Stop broker +# manager.summary.broker.start=Start broker +# manager.summary.next_updater_refresh_date.to=Sera mis à jour dans %s +# manager.summary.next_updater_refresh_date.from=Plus à jour depuis %s +# manager.threads.title=Traces des piles des threads +# manager.threads.tnamestate=Nom et Etat +# manager.threads.tstacks=Trace de la pile +# manager.classpaths.title=Classpaths +# manager.classpaths.item=Element du classpath +# manager.classpaths.missinginstances=Instances où il manque +# manager.classpaths.cpiseverywhere=Present partout +# manager.classpaths.warnmessage=Les instances manquantes sont indiqués seulement pour information, cela peut-être normal selon les installations. +# manager.cyclic.title=Création régulière de jobs +# manager.trigger.title=Création de jobs par déclencheurs +# manager.uafunctlist.title=Fonctionnalités utilisateur +# manager.uafunctlist.functionality=Fonctionnalité +# manager.uafunctlist.profiles=Profiles déclarés +# manager.uafunctlist.capabilities=Capacités +# manager.uafunctlist.storageindexeswhitelist=Liste blanche des stockages indexés +# manager.uafunctlist.powerful_and_dangerous=Potentiellement dangereux +# manager.workers.title=Workers actifs +# manager.workers.empty=Pas de workers actifs... +# manager.workers.refresherror=Impossible d'actualiser la liste des workers. Vérifiez votre accès au serveur. +# manager.workers.inrefresh=Le tableau est en cours de mise à jour... +# manager.workers.category.INDEXING=Indexation +# manager.workers.category.METADATA=Metadata +# manager.workers.category.EXTERNAL_MODULE=Module +# manager.workers.category.USERACTION=Action utilisateur +# manager.workers.category.INTERNAL=Interne +# manager.workers.state.PROCESSING=En traitement +# manager.workers.state.WAITING=En attente +# manager.workers.state.STOPPED=Arrêté +# manager.workers.state.PENDING_STOP=En cours d'arrêt +# manager.workers.action.start=Démarrer +# manager.workers.action.stop=Arrêter +# manager.workers.currentjob=Job courant : %s +# manager.workers.capablitystorages=Stockages: +# manager.workers.th.instance=Instance +# manager.workers.th.name=Nom +# manager.workers.th.state=Etat +# manager.workers.th.capabilities=Capacités +# manager.jobcreator.disabled=Desactivé +# manager.jobcreator.createdby=Crée par : +# manager.jobcreator.th.instance=Instance +# manager.jobcreator.th.name=Nom +# manager.jobcreator.th.declarations=Creations de jobs +# manager.jobcreator.th.actions=Actions +# manager.jobcreator.context.neededindexedstoragesnames=Stockages liés : +# manager.jobcreator.action.enable=Activer +# manager.jobcreator.action.disable=Desactiver +# manager.jobcreator.action.createjobs=Créer les jobs +# manager.jobcreator.cyclic.period=Période +# manager.jobcreator.cyclic.onlyonoffhours=Seulement en heures creuses +# manager.jobcreator.cyclic.actuallyonoffhours=Actuellement en heures creuses +# manager.jobcreator.cyclic.periodvalue=Création toutes les %s +# manager.jobcreator.cyclic.nextdate=Prochaine création dans %s +# manager.jobcreator.cyclic.nonextdate=Pas de prochaine création +# manager.jobcreator.trigger.hook=Job de déclenchement manager.jobs.pagename=Liste des jobs manager.jobs.status.WAITING=En attente manager.jobs.status.PREPARING=En préparation diff --git a/public/javascripts/_reduced/_internal_concated.js.gz b/public/javascripts/_reduced/_internal_concated.js.gz index 8cab1bfaa58bf3b4217e976f77a6fca9f6e7be51..2c771c542df635dea17a982cb8de252cc911c2a9 100644 GIT binary patch literal 35796 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 literal 34890 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 diff --git a/public/javascripts/_reduced/mydmam.async.manager.Classpaths.js b/public/javascripts/_reduced/mydmam.async.manager.Classpaths.js new file mode 100644 index 00000000..f36a390c --- /dev/null +++ b/public/javascripts/_reduced/mydmam.async.manager.Classpaths.js @@ -0,0 +1,12 @@ +(function(a){a.Classpaths=React.createClass({displayName:"Classpaths",getInitialState:function(){return{list:{},instances:{}}; +},componentWillMount:function(){mydmam.async.request("instances","allclasspaths",null,function(b){this.setState({list:b}); +}.bind(this));},render:function(){var d=[];var c=[];var f=[];var h;for(var g in this.state.list){h=this.state.list[g]; +for(var i in h){if(c.indexOf(h[i])==-1){c.push(h[i]);}}}for(i in c){for(var g in this.state.list){h=this.state.list[g]; +if(h.indexOf(c[i])==-1){var b=g;if(this.state.instances[g]){if(this.state.instances[g]!=="nope"){var e=this.state.instances[g].summary; +b=e.instance_name+" ("+e.app_name+") "+e.host_name;}else{b=i18n("manager.classpath.notfound")+" :: "+g; +}}else{f.push(g);}d.push(React.createElement("tr",{key:md5(c[i]+g)},React.createElement("td",null,c[i]),React.createElement("td",null,b))); +}}}if(f.length>0){mydmam.async.request("instances","byrefs",{refs:f},function(j){for(var k in f){if(j[f[k]]==null){j[f[k]]="nope"; +}}this.setState({instances:jQuery.extend({},this.state.instances,j)});}.bind(this)); +}return(React.createElement("table",{className:"table table-bordered table-striped table-condensed"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,i18n("manager.classpath.missing")),React.createElement("th",null,i18n("manager.classpath.missingin")))),React.createElement("tbody",null,d))); +}});a.InstanceClasspath=React.createClass({displayName:"InstanceClasspath",render:function(){return null; +}});})(window.mydmam.async.manager); \ No newline at end of file diff --git a/public/javascripts/_reduced/mydmam.async.manager.Header.js b/public/javascripts/_reduced/mydmam.async.manager.Header.js new file mode 100644 index 00000000..4d6d86b7 --- /dev/null +++ b/public/javascripts/_reduced/mydmam.async.manager.Header.js @@ -0,0 +1,8 @@ +(function(a){a.Header=React.createClass({displayName:"Header",render:function(){var b=null; +if(this.props.params){if(this.props.params.tab){if(this.props.params.tab=="summary"){b=(React.createElement(a.Summaries,null)); +}else{if(this.props.params.tab=="classpath"){b=(React.createElement(a.Classpaths,null)); +}}}}if(b==null){b=(React.createElement(a.InstancesSummaries,null));}return(React.createElement(mydmam.async.PageHeaderTitle,{title:i18n("manager.pagename"),fluid:"true"},React.createElement("ul",{className:"nav nav-tabs"},React.createElement(a.HeaderTab,{href:"#manager/summary",i18nlabel:"manager.summaries"}),React.createElement(a.HeaderTab,{href:"#manager/classpath",i18nlabel:"manager.classpath"})),b)); +}});mydmam.routes.push("manager","manager/:tab",a.Header,[{name:"instances",verb:"allsummaries"}]); +a.HeaderTab=React.createClass({displayName:"HeaderTab",onClick:function(b){$(React.findDOMNode(this.refs.tab)).blur(); +},render:function(){var b=classNames({active:this.props.href==location.hash});return(React.createElement("li",{className:b},React.createElement("a",{href:this.props.href},i18n(this.props.i18nlabel)))); +}});})(window.mydmam.async.manager); \ No newline at end of file diff --git a/public/javascripts/_reduced/mydmam.async.manager.Summaries.js b/public/javascripts/_reduced/mydmam.async.manager.Summaries.js new file mode 100644 index 00000000..85058dea --- /dev/null +++ b/public/javascripts/_reduced/mydmam.async.manager.Summaries.js @@ -0,0 +1,11 @@ +(function(a){a.Summaries=React.createClass({displayName:"Summaries",getInitialState:function(){return{list:{},interval:null}; +},componentWillMount:function(){this.refresh();},refresh:function(){mydmam.async.request("instances","allsummaries",null,function(b){this.setState({list:b}); +}.bind(this));},componentDidMount:function(){this.setState({interval:setInterval(this.refresh,10000)}); +},componentWillUnmount:function(){if(this.state.interval){clearInterval(this.state.interval); +}},render:function(){var b=[];for(var c in this.state.list){b.push(React.createElement(a.InstanceSummary,{key:c,instance:this.state.list[c]})); +}return(React.createElement("table",{className:"table table-bordered table-striped table-condensed"},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",null,i18n("manager.instance.host")),React.createElement("th",null,i18n("manager.instance.manager")),React.createElement("th",null,i18n("manager.instance.version")),React.createElement("th",null,i18n("manager.instance.uptime")),React.createElement("th",null,i18n("manager.instance.jvm")),React.createElement("th",null,i18n("manager.instance.addr")),React.createElement("th",null,i18n("manager.instance.os")),React.createElement("th",null,i18n("manager.instance.user")))),React.createElement("tbody",null,b))); +}});a.InstanceSummary=React.createClass({displayName:"InstanceSummary",render:function(){var d=[]; +for(var c in this.props.instance.host_addresses){d.push(React.createElement("span",{key:c},"• ",this.props.instance.host_addresses[c],React.createElement("br",null))); +}var b=null;if(this.props.instance.os_arch!="x86_64"){b=this.props.instance.os_arch; +}return(React.createElement("tr",null,React.createElement("td",null,this.props.instance.host_name,React.createElement("br",null),React.createElement("small",{className:"muted"},"PID ",this.props.instance.pid)),React.createElement("td",null,this.props.instance.instance_name,React.createElement("br",null),this.props.instance.app_name),React.createElement("td",null,this.props.instance.app_version),React.createElement("td",null,React.createElement(mydmam.async.pathindex.reactSinceDate,{i18nlabel:"manager.instance.uptime",date:this.props.instance.starttime})),React.createElement("td",null,this.props.instance.java_version,React.createElement("br",null),React.createElement("small",{className:"muted"},this.props.instance.java_vendor)),React.createElement("td",null,d),React.createElement("td",null,React.createElement("small",null,this.props.instance.os_name,React.createElement("br",null),this.props.instance.os_version," ",b)),React.createElement("td",null,React.createElement("small",null,this.props.instance.user_name," • ",this.props.instance.user_language,"_",this.props.instance.user_country,React.createElement("br",null),this.props.instance.user_timezone)))); +}});})(window.mydmam.async.manager); \ No newline at end of file diff --git a/public/javascripts/_reduced/mydmam.async.manager.view.js b/public/javascripts/_reduced/mydmam.async.manager.view.js deleted file mode 100644 index dc54ad03..00000000 --- a/public/javascripts/_reduced/mydmam.async.manager.view.js +++ /dev/null @@ -1,3 +0,0 @@ -(function(a){a.View=React.createClass({displayName:"View",getInitialState:function(){return{}; -},componentWillMount:function(){},componentDidMount:function(){},componentWillUnmount:function(){},render:function(){return(React.createElement(mydmam.async.PageHeaderTitle,{title:i18n("manager.instances"),fluid:"true"})); -}});})(window.mydmam.async.manager); \ No newline at end of file diff --git a/public/javascripts/_transformed/mydmam.async.manager.Classpaths.js b/public/javascripts/_transformed/mydmam.async.manager.Classpaths.js new file mode 100644 index 00000000..b719564e --- /dev/null +++ b/public/javascripts/_transformed/mydmam.async.manager.Classpaths.js @@ -0,0 +1,122 @@ +/** This file is automatically generated! Do not edit. */ (function(manager) { /* + * This file is part of MyDMAM. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * Copyright (C) hdsdi3g for hd3g.tv 2015 + * +*/ + +manager.Classpaths = React.createClass({displayName: "Classpaths", + getInitialState: function() { + return { + list: {}, + instances: {}, + }; + }, + componentWillMount: function() { + mydmam.async.request("instances", "allclasspaths", null, function(list) { + this.setState({list: list}); + }.bind(this)); + }, + render: function() { + var items = []; + var declared_classpath = []; + var instance_refs_to_resolve = []; + + /** + * Mergue all CP for create a reference list. + */ + var current_classpath; + for (var instance_ref in this.state.list) { + current_classpath = this.state.list[instance_ref]; + for (var pos in current_classpath) { + if (declared_classpath.indexOf(current_classpath[pos]) == -1) { + declared_classpath.push(current_classpath[pos]); + } + } + } + + for (pos in declared_classpath) { + for (var instance_ref in this.state.list) { + current_classpath = this.state.list[instance_ref]; + if (current_classpath.indexOf(declared_classpath[pos]) == -1) { + var instance_info = instance_ref; + if (this.state.instances[instance_ref]) { + if (this.state.instances[instance_ref] !== "nope") { + var summary = this.state.instances[instance_ref].summary; + instance_info = summary.instance_name + " (" + summary.app_name + ") " + summary.host_name; + } else { + instance_info = i18n("manager.classpath.notfound") + " :: " + instance_ref; + } + } else { + instance_refs_to_resolve.push(instance_ref); + } + + items.push(React.createElement("tr", {key: md5(declared_classpath[pos] + instance_ref)}, + React.createElement("td", null, declared_classpath[pos]), + React.createElement("td", null, instance_info) + )); + } + } + } + + if (instance_refs_to_resolve.length > 0) { + mydmam.async.request("instances", "byrefs", {refs: instance_refs_to_resolve}, function(data) { + for (var pos in instance_refs_to_resolve) { + if (data[instance_refs_to_resolve[pos]] == null) { + data[instance_refs_to_resolve[pos]] = "nope"; + } + } + this.setState({instances: jQuery.extend({}, this.state.instances, data)}); + }.bind(this)); + } + + /* + + {i18n("manager.instance.host")} + {i18n("manager.instance.manager")} + {i18n("manager.instance.version")} + {i18n("manager.instance.uptime")} + {i18n("manager.instance.jvm")} + {i18n("manager.instance.addr")} + {i18n("manager.instance.os")} + {i18n("manager.instance.user")} + + */ + //items.push(); + + return ( + React.createElement("table", {className: "table table-bordered table-striped table-condensed"}, + React.createElement("thead", null, + React.createElement("tr", null, + React.createElement("th", null, i18n("manager.classpath.missing")), + React.createElement("th", null, i18n("manager.classpath.missingin")) + ) + ), + React.createElement("tbody", null, + items + ) + ) + ); + }, +}); + +manager.InstanceClasspath = React.createClass({displayName: "InstanceClasspath", + render: function() { + return null; + }, +}); + + +})(window.mydmam.async.manager); +// Generated by hd3gtv.mydmam.web.JSProcessor for the module internal +// Source hash: eb881265572f48101a1ed62a36bc2808 diff --git a/public/javascripts/_transformed/mydmam.async.manager.Header.js b/public/javascripts/_transformed/mydmam.async.manager.Header.js new file mode 100644 index 00000000..ead7f98f --- /dev/null +++ b/public/javascripts/_transformed/mydmam.async.manager.Header.js @@ -0,0 +1,71 @@ +/** This file is automatically generated! Do not edit. */ (function(manager) { /* + * This file is part of MyDMAM. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * Copyright (C) hdsdi3g for hd3g.tv 2015 + * +*/ + +manager.Header = React.createClass({displayName: "Header", + render: function(){ + var show_this = null; + if (this.props.params) { + if (this.props.params.tab) { + if (this.props.params.tab == "summary") { + show_this = (React.createElement(manager.Summaries, null)); + } else if (this.props.params.tab == "classpath") { + show_this = (React.createElement(manager.Classpaths, null)); + } + } + } + + //allitems + //allthreads + + if (show_this == null) { + show_this = (React.createElement(manager.InstancesSummaries, null)); + } + + return ( + React.createElement(mydmam.async.PageHeaderTitle, {title: i18n("manager.pagename"), fluid: "true"}, + React.createElement("ul", {className: "nav nav-tabs"}, + React.createElement(manager.HeaderTab, {href: "#manager/summary", i18nlabel: "manager.summaries"}), + React.createElement(manager.HeaderTab, {href: "#manager/classpath", i18nlabel: "manager.classpath"}) + ), + show_this + ) + ); + }, +}); + +mydmam.routes.push("manager", "manager/:tab", manager.Header, [{name: "instances", verb: "allsummaries"}]); + +manager.HeaderTab = React.createClass({displayName: "HeaderTab", + onClick: function(e) { + //e.preventDefault(); + //this.props.onActiveChange(this.props.pos); + $(React.findDOMNode(this.refs.tab)).blur(); + }, + render: function(){ + var li_class = classNames({ + "active": this.props.href == location.hash + }); + + return (React.createElement("li", {className: li_class}, + React.createElement("a", {href: this.props.href}, i18n(this.props.i18nlabel)) + )); + }, +}); + +})(window.mydmam.async.manager); +// Generated by hd3gtv.mydmam.web.JSProcessor for the module internal +// Source hash: 462cc3db8bb812d211afdd0b3bf8c43e diff --git a/public/javascripts/_transformed/mydmam.async.manager.Summaries.js b/public/javascripts/_transformed/mydmam.async.manager.Summaries.js new file mode 100644 index 00000000..afb00812 --- /dev/null +++ b/public/javascripts/_transformed/mydmam.async.manager.Summaries.js @@ -0,0 +1,121 @@ +/** This file is automatically generated! Do not edit. */ (function(manager) { /* + * This file is part of MyDMAM. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * Copyright (C) hdsdi3g for hd3g.tv 2015 + * +*/ + +manager.Summaries = React.createClass({displayName: "Summaries", + getInitialState: function() { + return { + list: {}, + interval: null, + }; + }, + componentWillMount: function() { + this.refresh(); + }, + refresh: function() { + mydmam.async.request("instances", "allsummaries", null, function(list) { + this.setState({list: list}); + }.bind(this)); + }, + componentDidMount: function(){ + this.setState({interval: setInterval(this.refresh, 10000)}); + }, + componentWillUnmount: function() { + if (this.state.interval) { + clearInterval(this.state.interval); + } + }, + render: function() { + var items = []; + for (var instance_ref in this.state.list) { + items.push(React.createElement(manager.InstanceSummary, {key: instance_ref, instance: this.state.list[instance_ref]})); + } + return ( + React.createElement("table", {className: "table table-bordered table-striped table-condensed"}, + React.createElement("thead", null, + React.createElement("tr", null, + React.createElement("th", null, i18n("manager.instance.host")), + React.createElement("th", null, i18n("manager.instance.manager")), + React.createElement("th", null, i18n("manager.instance.version")), + React.createElement("th", null, i18n("manager.instance.uptime")), + React.createElement("th", null, i18n("manager.instance.jvm")), + React.createElement("th", null, i18n("manager.instance.addr")), + React.createElement("th", null, i18n("manager.instance.os")), + React.createElement("th", null, i18n("manager.instance.user")) + ) + ), + React.createElement("tbody", null, + items + ) + ) + ); + }, +}); + +manager.InstanceSummary = React.createClass({displayName: "InstanceSummary", + render: function() { + + var addr = []; + for (var pos in this.props.instance.host_addresses) { + addr.push(React.createElement("span", {key: pos}, "• ", this.props.instance.host_addresses[pos], React.createElement("br", null))); + } + + var arch = null; + if (this.props.instance.os_arch != "x86_64") { + arch = this.props.instance.os_arch; + } + + return (React.createElement("tr", null, + React.createElement("td", null, this.props.instance.host_name, React.createElement("br", null), + React.createElement("small", {className: "muted"}, "PID ", this.props.instance.pid) + ), + React.createElement("td", null, + this.props.instance.instance_name, React.createElement("br", null), + this.props.instance.app_name + ), + React.createElement("td", null, + this.props.instance.app_version + ), + React.createElement("td", null, + React.createElement(mydmam.async.pathindex.reactSinceDate, {i18nlabel: "manager.instance.uptime", date: this.props.instance.starttime}) + ), + React.createElement("td", null, + this.props.instance.java_version, React.createElement("br", null), + React.createElement("small", {className: "muted"}, + this.props.instance.java_vendor + ) + ), + React.createElement("td", null, addr), + React.createElement("td", null, + React.createElement("small", null, + this.props.instance.os_name, React.createElement("br", null), + this.props.instance.os_version, " ", arch + ) + ), + React.createElement("td", null, + React.createElement("small", null, + this.props.instance.user_name, " • ", this.props.instance.user_language, "_", this.props.instance.user_country, React.createElement("br", null), + this.props.instance.user_timezone + ) + ) + )); + }, +}); + + +})(window.mydmam.async.manager); +// Generated by hd3gtv.mydmam.web.JSProcessor for the module internal +// Source hash: f44bdfceabaef81a1ee73aa07a6fac32 diff --git a/public/javascripts/_transformed/mydmam.async.manager.view.js b/public/javascripts/_transformed/mydmam.async.manager.view.js deleted file mode 100644 index 7f748b27..00000000 --- a/public/javascripts/_transformed/mydmam.async.manager.view.js +++ /dev/null @@ -1,41 +0,0 @@ -/** This file is automatically generated! Do not edit. */ (function(manager) { /* - * This file is part of MyDMAM. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * Copyright (C) hdsdi3g for hd3g.tv 2015 - * -*/ - -manager.View = React.createClass({displayName: "View", - getInitialState: function() { - return { - }; - }, - componentWillMount: function() { - }, - componentDidMount: function(){ - }, - componentWillUnmount: function() { - }, - render: function(){ - return ( - React.createElement(mydmam.async.PageHeaderTitle, {title: i18n("manager.instances"), fluid: "true"} - ) - ); - }, -}); - -//mydmam.routes.push("broker-Jobs", "broker", manager.View, [{name: "broker", verb: "list"}]); - -})(window.mydmam.async.manager); -// Generated by hd3gtv.mydmam.web.JSProcessor for the module internal -// Source hash: b248de7ac9631f5a554a5a9c3bfd4efb