From: Vásáry Dániel Date: Sun, 3 Dec 2017 10:51:59 +0000 (+0000) Subject: git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube... X-Git-Url: http://git.useribm.hu/?a=commitdiff_plain;h=b0a008c3f38964638866426a22167984d8ce16d3;p=mediacube.git git-tfs-id: [tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C30784 --- diff --git a/client/Maestro/Installer/installforge-installer-project.ifp b/client/Maestro/Installer/installforge-installer-project.ifp index 5f680af8..9ab745e6 100644 Binary files a/client/Maestro/Installer/installforge-installer-project.ifp and b/client/Maestro/Installer/installforge-installer-project.ifp differ diff --git a/client/Maestro/MaestroForm.cs b/client/Maestro/MaestroForm.cs index c9971247..1f718fe5 100644 --- a/client/Maestro/MaestroForm.cs +++ b/client/Maestro/MaestroForm.cs @@ -124,7 +124,6 @@ namespace Maestro { } private void MaestroForm_FormClosing(object sender, FormClosingEventArgs e) { - //if (ModifierKeys.HasFlag() if (TrayApplicationContext.GlobalConfig.MinimizeToTray) Visible = false; else diff --git a/client/Maestro/Properties/AssemblyInfo.cs b/client/Maestro/Properties/AssemblyInfo.cs index 9ecd567a..ecb854a2 100644 --- a/client/Maestro/Properties/AssemblyInfo.cs +++ b/client/Maestro/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2.0.6.0")] -[assembly: AssemblyFileVersion("2.0.6.0")] +[assembly: AssemblyVersion("2.0.6.1")] +[assembly: AssemblyFileVersion("2.0.6.1")] diff --git a/client/Maestro/Splash.Designer.cs b/client/Maestro/Splash.Designer.cs index f4ab6bc6..30268876 100644 --- a/client/Maestro/Splash.Designer.cs +++ b/client/Maestro/Splash.Designer.cs @@ -41,10 +41,12 @@ // picWorld // this.picWorld.BackColor = System.Drawing.Color.Transparent; + this.picWorld.Dock = System.Windows.Forms.DockStyle.Fill; this.picWorld.Image = ((System.Drawing.Image)(resources.GetObject("picWorld.Image"))); - this.picWorld.Location = new System.Drawing.Point(16, 0); + this.picWorld.Location = new System.Drawing.Point(0, 0); + this.picWorld.Margin = new System.Windows.Forms.Padding(0); this.picWorld.Name = "picWorld"; - this.picWorld.Size = new System.Drawing.Size(320, 349); + this.picWorld.Size = new System.Drawing.Size(350, 361); this.picWorld.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; this.picWorld.TabIndex = 0; this.picWorld.TabStop = false; diff --git a/client/PlanAIRClient/TrafficIDSelector.cs b/client/PlanAIRClient/TrafficIDSelector.cs index c4dddde7..3776caaa 100644 --- a/client/PlanAIRClient/TrafficIDSelector.cs +++ b/client/PlanAIRClient/TrafficIDSelector.cs @@ -9,6 +9,7 @@ using MaestroShared.Configuration; using MaestroShared.Target; using MaestroShared.Targets; using System.IO; +using System.Text.RegularExpressions; namespace TrafficClient { public delegate void OnSelectedIDChanged(string ID, int variantID, string text); @@ -50,7 +51,6 @@ namespace TrafficClient { return; ClearSelection(); Cursor.Current = Cursors.WaitCursor; - string searchText = txtFilter.Text; DateTime? scheduledDate = null; if (this.dtScheduled.Checked) scheduledDate = this.dtScheduled.Value.Date; @@ -59,13 +59,14 @@ namespace TrafficClient { dgTraffic.Columns.Clear(); if (rbMaterial.Checked) { dgTraffic.Columns.AddRange(GetMaterialColumns()); + string searchText = Regex.Replace(txtFilter.Text, "[^0-9]", ""); items = trafficAPI.GetMaterials(searchText, chkProblematic.Checked, scheduledDate, scheduledDate); } else if (rbAD.Checked) { dgTraffic.Columns.AddRange(GetADColumns()); - items = trafficAPI.GetADs(searchText, chkProblematic.Checked, scheduledDate, scheduledDate); + items = trafficAPI.GetADs(txtFilter.Text, chkProblematic.Checked, scheduledDate, scheduledDate); } else if (rbPromo.Checked) { dgTraffic.Columns.AddRange(GetPromoColumns()); - items = trafficAPI.GetPromos(searchText, chkProblematic.Checked, scheduledDate, scheduledDate); + items = trafficAPI.GetPromos(txtFilter.Text, chkProblematic.Checked, scheduledDate, scheduledDate); } if (items == null || items.Count == 0) @@ -102,7 +103,7 @@ namespace TrafficClient { if (e.RowIndex < 0 || e.ColumnIndex != 0) return; DataGridView gridView = sender as DataGridView; - if (gridView == null) + if (gridView == null || dgTraffic.SelectedRows.Count == 0) return; OnSelectionChanged(dgTraffic.SelectedRows[0]); } @@ -140,6 +141,9 @@ namespace TrafficClient { } private void OnDataGridKeyDown(object sender, KeyEventArgs e) { + if (dgTraffic.SelectedRows.Count == 0) + return; + if (e.KeyCode == Keys.Space && dgTraffic.CurrentCell.ColumnIndex != 0) OnSelectionChanged(dgTraffic.SelectedRows[0]); if (e.KeyCode == Keys.F5) @@ -177,11 +181,12 @@ namespace TrafficClient { private void SelectResult() { List result = trafficAPIBindingSource.DataSource as List; - OnSelectionChanged(dgTraffic.Rows[0]); - if (result == null || result.Count == 0) + if (result == null || result.Count == 0) { MsgBox.Info("Nincs találat."); - else + } else { + OnSelectionChanged(dgTraffic.Rows[0]); result[0].Selected = true; + } } public void LookupByMaterialID(string id) { diff --git a/server/-configuration/scheduledjobs.json b/server/-configuration/scheduledjobs.json index 2c972df5..875e874f 100644 --- a/server/-configuration/scheduledjobs.json +++ b/server/-configuration/scheduledjobs.json @@ -90,10 +90,10 @@ ] }, { - "active": false, + "active": true, "name" : "OCTOPUS adatok teljes szinkronizálása", "template": "sync-octopus.xml", - "executeimmediate": false, + "executeimmediate": true, "cronexpression": "0/30 * * * * ?", "parameters": [ {"name": "forceFull", "value": true, "type": "java.lang.Boolean"} diff --git a/server/user.jobengine.osgi.commons/src/user/commons/octopus/OctopusDataMiner.java b/server/user.jobengine.osgi.commons/src/user/commons/octopus/OctopusDataMiner.java index fd67d382..72d1d27b 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/octopus/OctopusDataMiner.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/octopus/OctopusDataMiner.java @@ -16,10 +16,8 @@ import org.jboss.resteasy.client.jaxrs.BasicAuthentication; import org.jboss.resteasy.client.jaxrs.ResteasyClient; import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder; import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget; -import org.jboss.resteasy.spi.ResteasyDeployment; import org.joda.time.DateTime; -import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; import com.ibm.nosql.json.JSONUtil; import com.ibm.nosql.json.api.BasicDBList; import com.ibm.nosql.json.api.BasicDBObject; @@ -88,7 +86,8 @@ public class OctopusDataMiner implements Runnable { apiUser = System.getProperty("jobengine.octopus.api.user"); apiPwd = System.getProperty("jobengine.octopus.api.password"); - ResteasyClient client = new ResteasyClientBuilder().register(JacksonJsonProvider.class).build(); + // ResteasyClient client = new ResteasyClientBuilder().register(JacksonJsonProvider.class).build(); + ResteasyClient client = new ResteasyClientBuilder().build(); webTarget = client.target(apiAddress).register(new BasicAuthentication(apiUser, apiPwd)); } @@ -243,39 +242,40 @@ public class OctopusDataMiner implements Runnable { logger.info("Fetch rundowns"); - // ResteasyWebTarget target = webTarget.path(RUNDOWN); - // Builder result = target.request().header(OCTOPUS_DEVICE_ID, apiUser).header(OCTOPUS_DEVICE_NAME, apiPwd); - // Response r = result.get(); - // String x = r.readEntity(String.class); - // return; - BasicDBList rundowns = queryRundowns(); - logger.info("Fetch rundown story references"); - storyRundowns = buildRundownReferences(rundowns); - logger.info("Fetch story folders"); - BasicDBList storyFolders = queryStoryFolders(); - logger.info("Fetch folder story references"); - storyStoryFolders = buildFolderReferences(storyFolders); - - if (rundowns == null || rundowns.size() == 0) { - progressEvent.setProgress(50); - fireProgressEvent(progressEvent); - } else { - logger.info("Process rundowns"); - storeRundowns(rundowns, null); - } - - if (storyFolders == null || storyFolders.size() == 0) { - progressEvent.setProgress(100); - fireProgressEvent(progressEvent); - } else { - logger.info("Process story folders"); - storeStoryFolders(storyFolders, null); - } - setLastUpdateTime(new Date()); - logger.info("Activate"); - db.getCollection(RUNDOWN_COLLECTION).rename(IOctopusAPI.RUNDOWN_COLLECTION, true); - db.getCollection(FOLDER_COLLECTION).rename(IOctopusAPI.FOLDER_COLLECTION, true); - db.getCollection(STORY_COLLECTION).rename(IOctopusAPI.STORY_COLLECTION, true); + ResteasyWebTarget target = webTarget.path(RUNDOWN); + Builder result = target.request().header(OCTOPUS_DEVICE_ID, apiUser).header(OCTOPUS_DEVICE_NAME, apiPwd); + Response r = result.get(); + String x = r.readEntity(String.class); + logger.info(x); + return; + // BasicDBList rundowns = queryRundowns(); + // logger.info("Fetch rundown story references"); + // storyRundowns = buildRundownReferences(rundowns); + // logger.info("Fetch story folders"); + // BasicDBList storyFolders = queryStoryFolders(); + // logger.info("Fetch folder story references"); + // storyStoryFolders = buildFolderReferences(storyFolders); + // + // if (rundowns == null || rundowns.size() == 0) { + // progressEvent.setProgress(50); + // fireProgressEvent(progressEvent); + // } else { + // logger.info("Process rundowns"); + // storeRundowns(rundowns, null); + // } + // + // if (storyFolders == null || storyFolders.size() == 0) { + // progressEvent.setProgress(100); + // fireProgressEvent(progressEvent); + // } else { + // logger.info("Process story folders"); + // storeStoryFolders(storyFolders, null); + // } + // setLastUpdateTime(new Date()); + // logger.info("Activate"); + // db.getCollection(RUNDOWN_COLLECTION).rename(IOctopusAPI.RUNDOWN_COLLECTION, true); + // db.getCollection(FOLDER_COLLECTION).rename(IOctopusAPI.FOLDER_COLLECTION, true); + // db.getCollection(STORY_COLLECTION).rename(IOctopusAPI.STORY_COLLECTION, true); } catch (Exception e) { logger.catching(e); @@ -427,13 +427,14 @@ public class OctopusDataMiner implements Runnable { } private Builder query(String path, String fields) { - logger.info("Class loader {}", getClass().getClassLoader()); - try { - ResteasyDeployment deployment = new ResteasyDeployment(); - deployment.start(); - } catch (Exception e) { - logger.catching(e); - } + //logger.info("Class loader {}", getClass().getClassLoader()); + // try { + // //TODO kell e? + // ResteasyDeployment deployment = new ResteasyDeployment(); + // deployment.start(); + // } catch (Exception e) { + // logger.catching(e); + // } ResteasyWebTarget target = webTarget.path(path).queryParam(FIELDS, fields); Builder result = target.request().header(OCTOPUS_DEVICE_ID, apiUser).header(OCTOPUS_DEVICE_NAME, apiPwd); return result; diff --git a/server/user.jobengine.osgi.server/pages/index.zul b/server/user.jobengine.osgi.server/pages/index.zul index 4cdc84cb..b19de165 100644 --- a/server/user.jobengine.osgi.server/pages/index.zul +++ b/server/user.jobengine.osgi.server/pages/index.zul @@ -57,7 +57,7 @@ - +
diff --git a/server/user.jobengine.osgi.server/pages/joblist.zul b/server/user.jobengine.osgi.server/pages/joblist.zul index e635a992..9c5f39fe 100644 --- a/server/user.jobengine.osgi.server/pages/joblist.zul +++ b/server/user.jobengine.osgi.server/pages/joblist.zul @@ -39,7 +39,7 @@ onSelect="@command('selectJob')" style="border: none; background: #e3e3e3 !important;" oddRowSclass="listbox-odd-style" sclass="listbox-normal-style" > - + diff --git a/server/user.jobengine.osgi.server/pages/statistics.zul b/server/user.jobengine.osgi.server/pages/statistics.zul index 9aab1df5..253ccb34 100644 --- a/server/user.jobengine.osgi.server/pages/statistics.zul +++ b/server/user.jobengine.osgi.server/pages/statistics.zul @@ -43,8 +43,8 @@ var obj = eval("(" + value.name + ')'); return String .format( - 'Befejezve . {0}
Azonosító . {1}
Forrás . {2}
Cél . {3}
Cimke . {5}
Sikeres . {6}', + 'Befejezve . {0}
Azonosító . {1}
Forrás . {2}
Cél . {3}
Cimke . {5}
Sikeres . {6}
Felhasználó . {7}', obj.Finished, obj.HouseId, obj.Source, obj.Destination, - "red", obj.Tag, obj.Successful); + obj.Tag, obj.Tag, obj.Successful, obj.UserName); } diff --git a/server/user.jobengine.osgi.server/pages/statistics2.zul b/server/user.jobengine.osgi.server/pages/statistics2.zul index 75b67fe5..3220569b 100644 --- a/server/user.jobengine.osgi.server/pages/statistics2.zul +++ b/server/user.jobengine.osgi.server/pages/statistics2.zul @@ -9,7 +9,7 @@
- +
diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/server/scheduler/SchedulerService.java b/server/user.jobengine.osgi.server/src/user/jobengine/server/scheduler/SchedulerService.java index f8005d39..cd4722f0 100644 --- a/server/user.jobengine.osgi.server/src/user/jobengine/server/scheduler/SchedulerService.java +++ b/server/user.jobengine.osgi.server/src/user/jobengine/server/scheduler/SchedulerService.java @@ -62,9 +62,12 @@ public class SchedulerService { public ScheduledJob createScheduledJob(BasicDBObject jobJSON) { ScheduledJob sj = new ScheduledJob(); - sj.setJobId(String.valueOf(++schedulerJobId)); - sj.setJobName(jobJSON.getString("name")); - sj.setTemplateName(jobJSON.getString("template")); + // sj.setJobId(String.valueOf(++schedulerJobId)); + String name = jobJSON.getString("name"); + String template = jobJSON.getString("template"); + sj.setJobId(String.format("%s.%s", template, name)); + sj.setJobName(name); + sj.setTemplateName(template); sj.setCronExpressions(jobJSON.getString("cronexpression")); sj.setExecuteOnStartup(jobJSON.getBoolean("executeimmediate")); sj.setActive(jobJSON.getBoolean("active")); @@ -228,6 +231,7 @@ public class SchedulerService { } private void scheduleImmediate(String jobID) { + Trigger trigger = TriggerBuilder.newTrigger().forJob(jobID).startNow().build(); try { scheduler.scheduleJob(trigger); diff --git a/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/StatisticsComposer.java b/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/StatisticsComposer.java index 10ec8fac..80d493ca 100644 --- a/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/StatisticsComposer.java +++ b/server/user.jobengine.osgi.server/src/user/jobengine/zk/model/StatisticsComposer.java @@ -38,15 +38,15 @@ import user.jobengine.server.JobEngine; public class StatisticsComposer extends SelectorComposer { private static final Logger logger = LogManager.getLogger(); private static final int XCOUNT = 60 * 24; - private IItemManager itemManager = null; private static Map colors = new HashMap<>(); - static { colors.put("INGEST", new Color("red")); - colors.put("ARCHIVE", new Color("green")); - colors.put("TRANSCODE", new Color("blue")); + colors.put("Betöltés", new Color("green")); + colors.put("Adáskész", new Color("blue")); } + private IItemManager itemManager = null; + @Wire private Datebox chartDateSelector; @@ -57,73 +57,48 @@ public class StatisticsComposer extends SelectorComposer { this.itemManager = JobEngine.getStaticItemManager(); } - @Listen("onChange = #chartDateSelector") - public void changeDate() { - //ha elhgynánk a gombot - } - - @Override - public void doAfterCompose(Window comp) throws Exception { - super.doAfterCompose(comp); - chartDateSelector.setValue(new Date()); - showChart(); + private void addPoint(Series series, int x, int y, String data, Color color) { + Point p = new Point(x, y); + p.setName(data); + if (color != null) + p.getMarker().setFillColor(color); + series.addPoint(p); } - @Listen("onClick = #btnShowChart") - public void showChart() { - clearChart(); - configureChart(); - setupXAxis(); - List actions = itemManager.getWorkflowActions(chartDateSelector.getValue()); - if (actions == null || actions.size() == 0) { - setupYAxis(0); + private void addPoint(Series series, WorkflowAction action, int y) { + if (action.getFinished() == null) return; - } - - // logger.info("Item count {}", actions.size()); - int distinctCount = fillData(actions); - setupYAxis(distinctCount); - - int height = 100 + distinctCount * 20; - - // logger.info("Height {}", height); - chart.setHeight(height); + Calendar cal = Calendar.getInstance(); + cal.setTime(new Date(action.getFinished().getTime())); + int x = cal.get(Calendar.HOUR_OF_DAY) * 60 + cal.get(Calendar.MINUTE); + Color color = colors.get(action.getTag()); + BasicDBObject data = new BasicDBObject(); + data.put("Finished", action.getFinished().toString()); + data.put("HouseId", action.getHouseId()); + data.put("Touched", action.getTouched()); + data.put("Started", action.getStarted()); + data.put("Source", action.getSource()); + data.put("Destination", action.getDestination()); + data.put("Tag", color == null ? "lightgray" : color.toString()); + data.put("Successful", action.isSuccessful()); + data.put("UserName", action.getUserName()); + addPoint(series, x, y, data.toString(), color); } - private void setupYAxis(int distinctCount) { - YAxis yAxis = chart.getYAxis(); - yAxis.setTitle("Anyagok"); - yAxis.setMin(0); - yAxis.setMax(distinctCount); - yAxis.setTickInterval(1); - if (distinctCount == 0) { - yAxis.setGridLineWidth(0); - } else { - yAxis.setGridLineWidth(1); - //Solid, ShortDash, ShortDot, ShortDashDot, ShortDashDotDot, Dot , Dash, LongDash, DashDot, LongDashDot, and LongDashDotDot - yAxis.setGridLineDashStyle("LongDashDot"); - yAxis.setGridLineColor(new Color("lightgray")); - } - - yAxis.getLabels().addExtraAttr("formatter", - new JavaScriptValue("function () { return statisticsYValue(this.value, this.chart.series); }")); + @Listen("onChange = #chartDateSelector") + public void changeDate() { + //ha elhgynánk a gombot } - private void setupXAxis() { - XAxis xAxis = chart.getXAxis(); - xAxis.setTickInterval(20); - xAxis.setMin(0); - xAxis.setMax(XCOUNT); - AxisLabels xLabels = xAxis.getLabels(); - xLabels.setRotation(-45); - xAxis.getLabels().addExtraAttr("formatter", - new JavaScriptValue("function () { return statisticsXValue(this.value); }")); + private void clearChart() { + int size = chart.getSeriesSize(); + for (int i = 0; i < size; i++) + chart.getSeries(i).setData(new ArrayList()); } private void configureChart() { - chart.setTitle("Híranyagok élettörténete"); - chart.setSubtitle(CalendarUtils.toDateWithDayString(CalendarUtils.createCalendar(chartDateSelector.getValue()), - new Locale("hu"))); + chart.setTitle("Anyagok élettörténete"); + chart.setSubtitle(CalendarUtils.toDateWithDayString(CalendarUtils.createCalendar(chartDateSelector.getValue()), new Locale("hu"))); chart.getLegend().setEnabled(false); chart.setWidth(2048); SplinePlotOptions options = chart.getPlotOptions().getSpline(); @@ -149,16 +124,18 @@ public class StatisticsComposer extends SelectorComposer { tooltip.setFormat(""); tooltip.setPointFormat(""); tooltip.setUseHTML(true); + tooltip.setBorderWidth(0); //tooltip.setFormat(format); tooltip.addExtraAttr("formatter", new JavaScriptValue("function () { return statistics(this.point); }")); } - private void clearChart() { - int size = chart.getSeriesSize(); - for (int i = 0; i < size; i++) - chart.getSeries(i).setData(new ArrayList()); + @Override + public void doAfterCompose(Window comp) throws Exception { + super.doAfterCompose(comp); + chartDateSelector.setValue(new Date()); + showChart(); } private int fillData(List actions) { @@ -182,31 +159,53 @@ public class StatisticsComposer extends SelectorComposer { return result; } - private void addPoint(Series series, WorkflowAction action, int y) { - if (action.getFinished() == null) - return; - Calendar cal = Calendar.getInstance(); - cal.setTime(new Date(action.getFinished().getTime())); - int x = cal.get(Calendar.HOUR_OF_DAY) * 60 + cal.get(Calendar.MINUTE); - Color color = colors.get(action.getTag()); - BasicDBObject data = new BasicDBObject(); - data.put("Finished", action.getFinished().toString()); - data.put("HouseId", action.getHouseId()); - data.put("Touched", action.getTouched()); - data.put("Started", action.getStarted()); - data.put("Source", action.getSource()); - data.put("Destination", action.getDestination()); - data.put("Tag", action.getTag()); - data.put("Successful", action.isSuccessful()); - addPoint(series, x, y, data.toString(), color); + private void setupXAxis() { + XAxis xAxis = chart.getXAxis(); + xAxis.setTickInterval(20); + xAxis.setMin(0); + xAxis.setMax(XCOUNT); + AxisLabels xLabels = xAxis.getLabels(); + xLabels.setRotation(-45); + xAxis.getLabels().addExtraAttr("formatter", new JavaScriptValue("function () { return statisticsXValue(this.value); }")); } - private void addPoint(Series series, int x, int y, String data, Color color) { - Point p = new Point(x, y); - p.setName(data); - if (color != null) - p.getMarker().setFillColor(color); - series.addPoint(p); + private void setupYAxis(int distinctCount) { + YAxis yAxis = chart.getYAxis(); + yAxis.setTitle("Anyagok"); + yAxis.setMin(0); + yAxis.setMax(distinctCount); + yAxis.setTickInterval(1); + if (distinctCount == 0) { + yAxis.setGridLineWidth(0); + } else { + yAxis.setGridLineWidth(1); + //Solid, ShortDash, ShortDot, ShortDashDot, ShortDashDotDot, Dot , Dash, LongDash, DashDot, LongDashDot, and LongDashDotDot + yAxis.setGridLineDashStyle("LongDashDot"); + yAxis.setGridLineColor(new Color("lightgray")); + } + + yAxis.getLabels().addExtraAttr("formatter", new JavaScriptValue("function () { return statisticsYValue(this.value, this.chart.series); }")); + } + + @Listen("onClick = #btnShowChart") + public void showChart() { + clearChart(); + configureChart(); + setupXAxis(); + List actions = itemManager.getWorkflowActions(chartDateSelector.getValue()); + if (actions == null || actions.size() == 0) { + setupYAxis(0); + return; + } + + // logger.info("Item count {}", actions.size()); + int distinctCount = fillData(actions); + setupYAxis(distinctCount); + + int height = 100 + distinctCount * 20; + + // logger.info("Height {}", height); + chart.setHeight(height); } } \ No newline at end of file