Skip to content

Commit b2b930c

Browse files
IvchetoIvcheto
Ivcheto
authored and
Ivcheto
committed
New project Server load monitoring application in JavaScript
1 parent 90797dc commit b2b930c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+32029
-0
lines changed

ServerLoad/Scripts/MindFusion.Charting.d.ts

+10,645
Large diffs are not rendered by default.

ServerLoad/Scripts/MindFusion.Charting.js

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ServerLoad/Scripts/MindFusion.Common.js

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ServerLoad/Scripts/MindFusion.Diagramming.js

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ServerLoad/Scripts/MindFusion.Gauges.js

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ServerLoad/Scripts/charts.js

+355
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,355 @@
1+
var lineChart = null;
2+
3+
4+
define(["require", "exports", 'MindFusion.Common', 'Scripts/MindFusion.Charting', 'MindFusion.Gauges'], function (require, exports, MindFusion_Common_1, m, g) {
5+
"use strict";
6+
7+
//map some namespaces
8+
var d = MindFusion_Common_1.Drawing;
9+
var Charting = m.MindFusion.Charting;
10+
var Controls = m.MindFusion.Charting.Controls;
11+
var Collections = m.MindFusion.Charting.Collections;
12+
var Drawing = m.MindFusion.Charting.Drawing;
13+
var Gauges = m.MindFusion.Charting.Gauges;
14+
var OvalScale = g.OvalScale;
15+
var TickShape = g.TickShape;
16+
var Length = g.Length;
17+
var LengthType = g.LengthType;
18+
var LabelRotation = g.LabelRotation;
19+
var PointerShape = g.PointerShape;
20+
21+
22+
//gauge
23+
var userCounter = g.OvalGauge.create($('#userCounter')[0], false);
24+
//use custom painting of the background and of the pointer
25+
userCounter.addEventListener(g.Events.prepaintBackground, onGaugerepaintBackground.bind(this));
26+
userCounter.addEventListener(g.Events.prepaintPointer, onPrepaintPointer.bind(this));
27+
28+
// userCounter
29+
// the scale
30+
var scale = new g.OvalScale(userCounter);
31+
scale.setMinValue(0);
32+
scale.setMaxValue(40);
33+
scale.setStartAngle(120);
34+
scale.setEndAngle(420);
35+
scale.setFill('Transparent');
36+
scale.setStroke('Transparent');
37+
38+
//initialize the major settings
39+
var majorSettings = scale.majorTickSettings;
40+
majorSettings.setTickShape(TickShape.Ellipse);
41+
majorSettings.setTickWidth(new Length(10, LengthType.Relative));
42+
majorSettings.setTickHeight(new Length(2, LengthType.Relative));
43+
majorSettings.setFontSize(new Length(9, LengthType.Relative));
44+
majorSettings.setNumberPrecision(0);
45+
majorSettings.setFill('White');
46+
majorSettings.setStroke('Transparent');
47+
majorSettings.setLabelForeground('White');
48+
majorSettings.setLabelAlignment(Alignment.InnerCenter);
49+
majorSettings.setLabelRotation(LabelRotation.Auto);
50+
majorSettings.setTickAlignment(Alignment.TrueCenter);
51+
majorSettings.setLabelOffset(new Length(12, LengthType.Relative));
52+
majorSettings.setStep(5);
53+
var interval = new g.CustomInterval();
54+
interval.setMinValue(35);
55+
interval.setFill('Red');
56+
majorSettings.addCustomInterval(interval);
57+
58+
//initialize the middle settings
59+
var middleSettings = scale.middleTickSettings;
60+
middleSettings.setShowLabels(false);
61+
middleSettings.setTickShape(TickShape.Ellipse);
62+
middleSettings.setTickWidth(new Length(6, LengthType.Relative));
63+
middleSettings.setTickHeight(new Length(3, LengthType.Relative));
64+
middleSettings.setFontSize(new Length(12, LengthType.Relative));
65+
middleSettings.setFill('White');
66+
middleSettings.setStroke('Transparent');
67+
middleSettings.setLabelForeground('rgb(50, 50, 50)');
68+
middleSettings.setTickAlignment(Alignment.TrueCenter);
69+
middleSettings.setCount(5);
70+
middleSettings.addCustomInterval(interval);
71+
72+
//initalize the minor settings
73+
var minorSettings = scale.minorTickSettings;
74+
minorSettings.setShowLabels(false);
75+
minorSettings.setShowTicks(false);
76+
77+
//add a range in gradient colors
78+
var range = new g.Range();
79+
range.setMinValue(0);
80+
range.setMaxValue(40);
81+
range.setFill(g.Utils.createLinearGradient(320, [1, '#ce0000', 0.8, '#ce0000', 0.7, '#FFA500', 0.6, '#FFD700', 0.5, '#008000', 0, '#008000']));
82+
range.setStroke('Transparent');
83+
range.setStartWidth(new Length(0, LengthType.Relative));
84+
range.setEndWidth(new Length(8, LengthType.Relative));
85+
range.setAlignment(Alignment.TrueCenter);
86+
scale.addRange(range);
87+
88+
//customize the gauge pointer
89+
var pointer = new g.Pointer();
90+
pointer.setFill({ "type": "LinearGradientBrush", "color1": "#CCCCCC", "color2": "#666666", "angle": 225 });
91+
pointer.setStroke("#333333");
92+
pointer.setPointerHeight(new Length(20, LengthType.Relative));
93+
pointer.setPointerWidth(new Length(100, LengthType.Relative));
94+
pointer.setShape(PointerShape.Needle);
95+
scale.addPointer(pointer);
96+
//add some initial value
97+
pointer.setValue(26);
98+
99+
//paint the background in gradient
100+
function onGaugerepaintBackground(sender, args) {
101+
args.setCancelDefaultPainting(true);
102+
var context = args.getContext();
103+
var element = args.getElement();
104+
var size = sender.getSize();
105+
var ellipse = new g.Ellipse();
106+
ellipse.setFill('gray');
107+
ellipse.setStroke('transparent');
108+
args.paintVisualElement(ellipse, size);
109+
var ellipse = new g.Ellipse();
110+
ellipse.setFill(g.Utils.createLinearGradient(300, [0, '#808080', 0.2, '#808080', 0.8, '#909090', 1, '#909090']));
111+
ellipse.setStroke('transparent');
112+
ellipse.setMargin(new g.Thickness(0.015));
113+
args.paintVisualElement(ellipse, size);
114+
}
115+
;
116+
//draw the pointer
117+
function onPrepaintPointer(sender, args) {
118+
args.setCancelDefaultPainting(true);
119+
var context = args.getContext();
120+
var element = args.getElement();
121+
var size = element.getRenderSize();
122+
var psize = new MindFusion.Drawing.Size(0.2 * size.width, size.height);
123+
context.save();
124+
context.transform.apply(context, element.transform.matrix());
125+
context.beginPath();
126+
context.arc(psize.width / 2, psize.height / 2, psize.height / 2, 0, 2 * Math.PI, false);
127+
var fill = element.getFill();
128+
context.fillStyle = g.Utils.getBrush(context, fill, new MindFusion.Drawing.Rect(0, 0, size.width, size.height), false);
129+
context.fill();
130+
context.strokeStyle = '#333333';
131+
context.stroke();
132+
context.beginPath();
133+
context.moveTo(0, 0.425 * size.height);
134+
context.lineTo(0, 0.575 * size.height);
135+
context.lineTo(0.95 * size.width, 0.575 * size.height);
136+
context.lineTo(size.width, 0.5 * size.height);
137+
context.lineTo(0.95 * size.width, 0.425 * size.height);
138+
context.fillStyle = 'white';
139+
context.fill();
140+
context.stroke();
141+
context.restore();
142+
}
143+
;
144+
//end of gauge
145+
146+
//create the line chart
147+
var lineChartEl = document.getElementById('lineChart');
148+
lineChartEl.width = lineChartEl.offsetParent.clientWidth;
149+
lineChartEl.height = lineChartEl.offsetParent.clientHeight;
150+
lineChart = new Controls.LineChart(lineChartEl);
151+
lineChart.showHightlight = false;
152+
lineChart.areaOpacity = 0.5;
153+
lineChart.showLegend = true;
154+
lineChart.theme.legendBackground = new Drawing.Brush("#f0f0f0");
155+
lineChart.legendTitle = "";
156+
lineChart.theme.legendBorderStroke = new Drawing.Brush("#cecece");
157+
158+
var d = new Date(); // for now
159+
//offset by 30 secs for the first 30 data values
160+
d.setSeconds(d.getSeconds() - 30);
161+
162+
// create sample data series
163+
var values1 = new Collections.List();
164+
var values2 = new Collections.List();
165+
var values3 = new Collections.List();
166+
var values4 = new Collections.List();
167+
var values5 = new Collections.List();
168+
var values6 = new Collections.List();
169+
var values7 = new Collections.List();
170+
var values8 = new Collections.List();
171+
var values9 = new Collections.List
172+
var values10 = new Collections.List();
173+
174+
var xValues = new Collections.List();
175+
var xLabels = new Collections.List();
176+
177+
//the colors for the brushes
178+
var brushes = new Collections.List();
179+
180+
var rgbColors = new Collections.List();
181+
rgbColors.add(new Array(102, 154, 204));
182+
rgbColors.add(new Array(0, 52, 102));
183+
rgbColors.add(new Array(156, 170, 198));
184+
rgbColors.add(new Array(102, 102, 102));
185+
rgbColors.add(new Array(163, 198, 134));
186+
rgbColors.add(new Array(90, 116, 68));
187+
rgbColors.add(new Array(233, 202, 145));
188+
rgbColors.add(new Array(234, 104, 79));
189+
rgbColors.add(new Array(206, 0, 0));
190+
rgbColors.add(new Array(245, 222, 208));
191+
192+
//initialize x-values and labels, generate sample data for the series
193+
for (var i = 0; i < 30; i++) {
194+
xValues.add(i);
195+
setXLabels(false);
196+
generateData();
197+
}
198+
199+
//create brushes for the chart
200+
var thicknesses = new Collections.List();
201+
for (var i = 0; i < 10; i++)
202+
{
203+
var a = rgbColors.item(i);
204+
brushes.add(new Drawing.Brush(new Drawing.Color.fromArgb(a[0], a[1], a[2])));
205+
if (i == 5 || i == 8)
206+
thicknesses.add(3.0);
207+
else
208+
thicknesses.add(0.15);
209+
210+
}
211+
212+
213+
lineChart.xAxis.labels = xLabels;
214+
lineChart.showXCoordinates = false;
215+
216+
var angle = 1;
217+
218+
//the series for the chart
219+
var series = new Collections.ObservableCollection(new Array(
220+
new Charting.Series2D(xValues, values1, xLabels),
221+
new Charting.Series2D(xValues, values2, null),
222+
new Charting.Series2D(xValues, values3, null),
223+
new Charting.Series2D(xValues, values4, null),
224+
new Charting.Series2D(xValues, values5, null),
225+
new Charting.Series2D(xValues, values6, null),
226+
new Charting.Series2D(xValues, values7, null),
227+
new Charting.Series2D(xValues, values8, null),
228+
new Charting.Series2D(xValues, values9, null),
229+
new Charting.Series2D(xValues, values10, null)));
230+
231+
//series titles are important - we identify the series with them
232+
for (var i = 0; i < 4; i++)
233+
series.item(i).title = "Client" + i;
234+
235+
for (var i = 0; i < 3; i++)
236+
series.item(i + 4).title = "Network" + i;
237+
238+
for (var i = 0; i < 3; i++)
239+
series.item(i + 7).title = "Data" + i;
240+
241+
//tell the chart that the labels for the X-axis come from the first series.
242+
series.item(0).supportedLabels = m.MindFusion.Charting.LabelKinds.XAxisLabel;
243+
244+
lineChart.series = series;
245+
246+
//customize the axis
247+
lineChart.xAxis.interval = 1;
248+
lineChart.xAxis.title = "Time";
249+
lineChart.yAxis.interval = 10;
250+
lineChart.yAxis.title = "Users";
251+
252+
//add a new column to the chart grid - for the Y2-axis
253+
lineChart.chartPanel.columns.add(new m.MindFusion.Charting.Components.GridColumn());
254+
255+
//create a vertical stack panel for the second Y-axis
256+
var y2Stack = new m.MindFusion.Charting.Components.StackPanel();
257+
y2Stack.orientation = m.MindFusion.Charting.Components.Orientation.Vertical;
258+
y2Stack.gridRow = 0;
259+
//add the stack panel to the last grid column
260+
y2Stack.gridColumn = lineChart.chartPanel.columns.count() - 1;
261+
262+
lineChart.chartPanel.children.add(y2Stack);
263+
//create the second Y-axis
264+
var secondYAxis = new Charting.YAxisRenderer(lineChart.yAxis);
265+
secondYAxis.plotLeftSide = false;
266+
lineChart.yAxisRenderers.add(secondYAxis);
267+
y2Stack.children.add(secondYAxis);
268+
269+
//customize the grid
270+
lineChart.gridType = Charting.GridType.Crossed;
271+
lineChart.backColor = new Drawing.Color.fromArgb(230, 230, 230);
272+
lineChart.theme.gridColor1 = Drawing.Color.fromArgb(1, 255, 255, 255);
273+
lineChart.theme.gridColor2 = Drawing.Color.fromArgb(1, 255, 255, 255);
274+
lineChart.theme.gridLineColor = Drawing.Color.fromArgb(0.5, 240, 240, 240);
275+
276+
// assign one brush per series
277+
lineChart.plot.seriesStyle = new Charting.PerSeriesStyle(brushes, brushes, thicknesses);
278+
lineChart.plot.pinGrid = false;
279+
lineChart.draw();
280+
281+
//start the timer
282+
setInterval(setTime, 1000);
283+
284+
//generate sample data - remove the first values and add more values
285+
function setTime() {
286+
287+
values1.removeAt(0);
288+
values2.removeAt(0);
289+
values3.removeAt(0);
290+
values4.removeAt(0);
291+
values5.removeAt(0);
292+
values6.removeAt(0);
293+
values7.removeAt(0);
294+
values8.removeAt(0);
295+
values9.removeAt(0);
296+
values10.removeAt(0);
297+
setXLabels(true);
298+
299+
300+
generateData();
301+
302+
//sum all new values, find the average and update the guge pointer value
303+
var sum = 0;
304+
305+
for (var i = 0; i < lineChart.series.count() ; i++) {
306+
sum += series.item(i).yData.item(29);
307+
}
308+
309+
var pointer = userCounter.scales[0].pointers[0];
310+
pointer.setValue(sum/10);
311+
312+
//repaint the chart
313+
lineChart.draw();
314+
}
315+
316+
//generate sample data
317+
function generateData()
318+
{
319+
values1.add(Math.floor(Math.random() * 90));
320+
values2.add(Math.floor(Math.random() * 100));
321+
values3.add(Math.floor(Math.random() * 50));
322+
values4.add(Math.floor(Math.random() * 15));
323+
values5.add(Math.floor(Math.random() * 55));
324+
values6.add(Math.floor(Math.random() * 60));
325+
values7.add(Math.floor(Math.random() * 13));
326+
values8.add(Math.floor(Math.random() * 85));
327+
values9.add(Math.floor(Math.random() * 20));
328+
values10.add(Math.floor(Math.random() * 10));
329+
330+
331+
}
332+
333+
/* add and update the xLabels. Each 3rd labels is the current time,
334+
the others are empty strings */
335+
function setXLabels(removeFirst)
336+
{
337+
if (d.getSeconds() % 3 == 0)
338+
{
339+
//clear the first three values
340+
if (removeFirst) {
341+
xLabels.removeAt(0);
342+
xLabels.removeAt(0);
343+
xLabels.removeAt(0);
344+
}
345+
346+
//add a label and two empty strings
347+
xLabels.add(d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds());
348+
xLabels.add("");
349+
xLabels.add("");
350+
}
351+
352+
d.setSeconds(d.getSeconds() + 1);
353+
354+
}
355+
});

0 commit comments

Comments
 (0)