artdaq_node_server  v1_01_00
ConfigurationEditor.js
1 var defaultColor = "";
2 var defaultShadow = "";
3 var brs = {};
4 var configNeedsRestart = false;
5 
6 function getUrlParameter(sParam) {
7  var sPageUrl = window.location.search.substring(1);
8  var sUrlVariables = sPageUrl.split("&");
9  for (var i = 0; i < sUrlVariables.length; i++) {
10  var sParameterName = sUrlVariables[i].split("=");
11  if (sParameterName[0].search(sParam) > 0) {
12  return sParameterName[1];
13  }
14  }
15 }
16 
17 function checkExpertMode() {
18  if ($("#expertMode").is(":checked")) {
19  $(".expert").show();
20  } else {
21  $(".expert").hide();
22  }
23 }
24 
25 var addBR = function (id, br) {
26  brs[id] = br;
27  $.get("/artdaq-configuration/BoardReader.html", function (data) {
28  var datatemp = data.replace(/%id%/g, id);
29  $("#brs").append(datatemp).collapsibleset('refresh').trigger('create');
30  $("#deletebr" + id).click(function () {
31  $("#brcfg" + id).remove();
32  $("#brs").collapsibleset('refresh');
33  });
34  $.get("/artdaq-configuration/GeneratorTypes", function (data) {
35  $("#brcfg" + id + " #type").html(data).trigger('create').selectmenu('refresh');
36  checkExpertMode();
37  $("#brcfg" + id + " #type").change(function () {
38  var selected = $("#brcfg" + id).find(':selected').val();
39  $.get("/artdaq-configuration/" + selected, function (typedata) {
40  $("#brcfg" + id + " #typeConfig").html(typedata);
41  $("#brcfg" + id + " #typeConfig #config").trigger('create').collapsible();
42 
43  for (var key in brs[id].typeConfig) {
44  $("#" + key, "#brcfg" + id + " #typeConfig").val(brs[id].typeConfig[key]);
45  if ($(":radio[name=" + key + "]", "#brcfg" + id + " #typeConfig").is(":radio")) {
46  //var radioButton = $(":radio[value=" + brs[id].typeConfig[key] + "]","#brcfg" + id + " #typeConfig");
47  $(":radio[value=" + brs[id].typeConfig[key] + "]", "#brcfg" + id + " #typeConfig").prop("checked", true).checkboxradio('refresh');
48  }
49  }
50  checkExpertMode();
51  });
52  });
53 
54  if (brs[id] == null) {
55  $("#brcfg" + id + " #type").val("Default").trigger('change');
56  } else {
57  if ($("#brcfg" + id + " #type option[value='" + brs[id].type + "_simulator.html']").length > 0) {
58  $("#brcfg" + id + " #type").val(brs[id].type + "_simulator.html").trigger('change');
59  } else if ($("#brcfg" + id + " #type option[value='" + brs[id].type + "_receiver.html']").length > 0) {
60  $("#brcfg" + id + " #type").val(brs[id].type + "_receiver.html").trigger('change');
61  } else if ($("#brcfg" + id + " #type option[value='" + brs[id].type + "_reader.html']").length > 0) {
62  $("#brcfg" + id + " #type").val(brs[id].type + "_reader.html").trigger('change');
63  } else {
64  $("#brcfg" + id + " #type").val("Default").trigger('change');
65  }
66  }
67  });
68 
69  if (br != null) {
70  $("#brcfg" + id + " #enabled").prop('checked', br.enabled).checkboxradio('refresh');
71  $("#brcfg" + id + " #name").val(br.name);
72  $("#brcfg" + id + " #hostname").val(br.hostname);
73  }
74  });
75 };
76 var lastbrid = 0;
77 
78 var saveConfiguration = function () {
79  var output = {};
80  output.expertMode = $("#expertMode").is(":checked");
81  output.configName = $("#configName").val();
82  output.artdaqDir = $("#artdaqDir").val();
83  output.dataDir = $("#artdaqDataDir").val();
84  output.logDir = $("#artdaqLogDir").val();
85  output.setupScript = $("#artdaqSetupScript").val();
86  output.needsRestart = configNeedsRestart;
87  output.dataLogger = {};
88  output.dataLogger.enabled = $("#dlEnabled").is(":checked");
89  output.dataLogger.fileMode = $("input:radio[name=fileLimit]:checked").val();
90  output.dataLogger.fileValue = $("#limitValue").val();
91  output.dataLogger.runMode = $("input:radio[name=runLimit]:checked").val();
92  output.dataLogger.runValue = $("#runLimitValue").val();
93  output.dataLogger.hostname = $("#aggHostname").val();
94  output.dataLogger.name = $("#dlName").val();
95  output.onlineMonitor = {};
96  output.onlineMonitor.hostname = $("#aggHostname").val();
97  output.onlineMonitor.enabled = $("#omEnabled").is(":checked");
98  output.onlineMonitor.viewerEnabled = $("#omvEnabled").is(":checked");
99  output.onlineMonitor.name = $("#omName").val();
100  output.eventBuilders = {};
101  output.eventBuilders.basename = $("#evbName").val();
102  output.eventBuilders.count = $("#evbCount").val();
103  output.eventBuilders.compress = $("#evbCompress").is(":checked");
104  output.eventBuilders.hostnames = $("#evbHostnames").val().split(",");
105  output.boardReaders = [];
106  $("#brs").children().each(function (index, element) {
107  var br = {};
108  var selected = $(this).find(':selected');
109  br.type = selected.text();
110  br.hostname = $("#hostname", this).val();
111  br.name = $("#name", this).val();
112  br.enabled = $("#enabled", this).is(":checked");
113  br.typeConfig = {};
114  $("#typeConfig input:radio", this).each(function (innerIndex, innerElement) {
115  if ($(innerElement).is(":checked")) {
116  br.typeConfig[innerElement.name] = $(innerElement).val();
117  }
118  });
119  $("#typeConfig input", this).each(function (innerIndex, innerElement) {
120  if ($(innerElement).is(":checkbox")) {
121  br.typeConfig[innerElement.id] = $(innerElement).is(":checked");
122  } else if (!$(innerElement).is(":radio")) {
123  br.typeConfig[innerElement.id] = $(innerElement).val();
124  }
125  });
126  output.boardReaders.push(br);
127  });
128  return output;
129 };
130 
131 var loadConfiguration = function (config) {
132  lastbrid = 0;
133  $("#brs").html("");
134 
135  $("#expertMode").prop('checked', config.expertMode);
136  $("#configName").val(config.configName);
137  $("#artdaqDir").val(config.artdaqDir);
138  $("#artdaqDataDir").val(config.dataDir);
139  $("#artdaqLogDir").val(config.logDir);
140  $("#artdaqSetupScript").val(config.setupScript);
141  $("#dlEnabled").prop('checked', config.dataLogger.enabled);
142  $("#dlName").val(config.dataLogger.name);
143  $("#aggHostname").val(config.dataLogger.hostname);
144  $("input:radio[name=fileLimit]:checked").prop('checked', false);
145  $("#fileLimit" + config.dataLogger.fileMode).prop('checked', true);
146  $("#limitValue").val(config.dataLogger.fileValue);
147  $("input:radio[name=runLimit]:checked").prop('checked', false);
148  $("#runLimit" + config.dataLogger.runMode).prop('checked', true);
149  $("#runLimitValue").val(config.dataLogger.runValue);
150  $("#omEnabled").prop('checked', config.onlineMonitor.enabled);
151  $("#omvEnabled").prop('checked', config.onlineMonitor.viewerEnabled);
152  $("#omName").val(config.onlineMonitor.name);
153  $("#evbName").val(config.eventBuilders.basename);
154  $("#evbCount").val(config.eventBuilders.count);
155  $("#evbCompress").prop('checked', config.eventBuilders.compress);
156  if (typeof (config.eventBuilders.hostnames) == "string") {
157  $("#evbHostnames").val(config.eventBuilders.hostnames);
158  } else {
159  $("#evbHostnames").val(config.eventBuilders.hostnames.join());
160 
161  }
162 
163  if (config.boardReaders.name != null) {
164  ++lastbrid;
165  addBR(lastbrid, config.boardReaders);
166  } else {
167  for (var index in config.boardReaders) {
168  var br = config.boardReaders[index];
169  ++lastbrid;
170  addBR(lastbrid, br);
171  }
172  }
173  $("input:radio").checkboxradio('refresh');
174  $("input:checkbox").checkboxradio('refresh');
175  checkExpertMode();
176 };
177 var updateHeader = function (error, text) {
178  if (error) {
179  $("#header").css("background-color", "red").css("text-shadow", "#E55 0px 1px 0px");
180  $("#info").text(text);
181  } else {
182  $("#header").css("background-color", defaultColor).css("text-shadow", defaultShadow);
183  $("#info").text(text);
184  }
185 };
186 var loadConfigs = function () {
187  AjaxGet("/artdaq-configuration/NamedConfigs", function (data) {
188  $("#configs").html(data.join("")).trigger('create').selectmenu('refresh');
189  var config = getUrlParameter("configs");
190  if (config !== undefined) {
191  $("#configs").val(config);
192  }
193  $("#loadConfigButton").trigger('click');
194  });
195 };
196 $(document).ready(function () {
197  defaultColor = $("#header").css("background-color");
198  defaultShadow = $("#header").css("text-shadow");
199  var changedText = "Please define a Configuration Name and click \"Save Configuration\" to save your pending changes. Loading a configuration, navigating away from this page, or closing this page will discard your changes.";
200 
201  $("#expertMode").click(function () {
202  checkExpertMode();
203  });
204  checkExpertMode();
205 
206  $(".triggersModified").change(function () {
207  updateHeader(true, changedText);
208  });
209 
210  $(".triggersModified").click(function () {
211  updateHeader(true, changedText);
212  });
213 
214  $(".triggersRestart").click(function () {
215  configNeedsRestart = true;
216  updateHeader(true, changedText + "\nYou will have to re-start any ARTDAQ partitions using this configuration to apply these changes.");
217  });
218 
219  $("#addbr").click(function () {
220  ++lastbrid;
221  addBR(lastbrid);
222  });
223 
224  $("#loadConfigButton").click(function () {
225  configNeedsRestart = false;
226  updateHeader(false, "");
227  var selected = $("#configs").find(':selected').val();
228  AjaxPost("/artdaq-configuration/LoadNamedConfig", { configFile: selected }, function (config) {
229  loadConfiguration(config);
230  });
231  });
232  loadConfigs();
233 
234  $("#saveConfig").click(function () {
235  var config = saveConfiguration();
236  AjaxPost("/artdaq-configuration/saveConfig", { config: JSON.stringify(config) }, function (res) {
237  if (res !== null && res.Success) {
238  updateHeader(false, "Configuration Saved.");
239  } else {
240  updateHeader(true, "Failed to save configuration!");
241  }
242 
243  loadConfigs();
244  });
245  });
246 });