1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
|
BUGS
====
1. Optimizing labeling (of both axes)
a) For y, we should specify number of digits after point, depending on
height (in non-limited mode looks OK).
b) For x, more complicated. Try to round intervals, etc.
2. Support for Local Time. Major obstacle is synchronization between php (jpgraph)
and browsers. Just using timezone offset doesn't allow us to find out
DST changes and etc.
In Mozilla and Safari, however, there is tricky way of obtaining time-zone.
var now = new Date();
now.toString();
will return the lexcial name of time-zone (however, the names could differ
between php and JS?). It is possible to extract this time zone info and
pass to php. From, other side Opera and IE7 returns just numerical
representation of offset GMT+, without real name. And there is no any
warranty on toString() format change...
May be it is should be solved with horizontal labeling. We just pass from
JS few time values and fixing places to set them?
4. Scrolling over experiment
5. Go to help, open popup, go back to graph. No resizing. Fix that. Update on
open?
7. Synchronize menu with sidebar functionality (+Aggregation,?)
8. Depsite width is 100% the Item Selector is not resized to fill all available
space (mozilla, safari).
9. ZEUS Reader: add option to ignore timestamps
a) Remove also from mask numbers
b) correct amount of items
c) What to do if loggroup is combination of two queries, each having timestamps?
d) Ignore on the graph only?
10. Single value graphs - draw 3 lines: min - max - mean, Multigraph - show
single graph popup window if clicked.
12. Y-axis labels are not fitting.
14. Omit search options (if not implemented)
BUGS, Reported but not detected
====
Version 0.0.9 (LEGEND)
=============
1. LEGEND.
a) Information about clicked location
b) Add "Show Only", "Remove" buttons.
2. The LEGEND is not always shown (ÏÔÝÅÌËÉ×ÁÅÔÓÑ)
3. The LEGEND precision problem with subsecond graphics.
5. Help
Version 0.0.10 (SEARCH)
=============
1. Search (multiple words are anded)
a) Specified date (current data source)
b) Item Names, Group Names, ...
c) Tagging windows
d) ???
e) Certain coditions
- Define complex items (id, type, spec)
types are: 'by id', 'name and', 'name or', 'name first'
'by id' - srv__db__name, item_pos
'name and' - search item name if multiple found, defined (further)
conditions should met for all of them.
'name or' - coditions should met for any of them.
'name first' - just first found is checked against conditions, if
multiple found, the error reported to admin.
- Define coditions
name, codition
complex item within range (>,<,=,...,between)
- Found all intervals where conditions are met.
- Howto treat multiple groups? ADEI wide items and per-group items?
Version 0.0.11
--------------
a) Perform resampling.
b) Multimask draw. Actually, we just found a maximal available interval and
group by group pushing the data inside.
Version 0.0.12 (Handling graph ends)
=============
1. With "optimize_time_axes=false", ADEI ×ÙÒÁ×ÎÉ×ÁÅÔ ÒÁÚÍÅÒ ÏËÎÁ ÐÏ ÂÏÌØÛÏÊ
ÒÅÚËÅ ÎÁ ÇÒÁÆÉËÅ '|'. ôÁËÉÍ ÏÂÒÁÚÏÍ ÎÁ ËÏÎÃÁÈ ÍÏÖÅÔ ÂÙÔØ ÏÔÏÂÒÁÖÅÎÏ ÍÅÎØÛÅ
ÄÁÎÎÙÈ É ÂÕÄÅÔ ÐÕÓÔÁÔÁ. ëÒÏÍÅ ÔÏÇÏ, ÓÅÊÞÁÓ × ÒÅÖÉÍÁÈ ËÜÛÉÒÏ×ÁÎÉÑ ÐÏÓÌÅÄÎÉÊ
ÏÔÒÅÚÏË ÎÅ ÏÔÏÂÒÁÖÁÅÔÓÑ [ ÐÏÞÅÍÕ ËÜÛ ÎÅ ÏÔÄÄÁÅÔ ÐÏÓÌÅÄÎÀÀ ÔÏÞËÕ ÉÚ ÎÅÎÕÌÅ×ÙÈ
ËÜÛÅÊ ].
÷ Á×ÔÏÍÁÔÉÞÅÓËÏÍ ÒÅÖÉÍÅ ÔÏÖÅ ÐÒÏÂÌÅÍÙ, Ô.Ë. ÎÅÔÕ × ÕÚÌÏ×ÏÊ ÔÏÞËÅ É
ÐÏÜÔÏÍÕ ÏÐÔÉÍÉÚÉÒÕÅÔÓÑ ???
2. Remove LIMIT from SQL requests in DATAInterval
3. Enable Flexible mode for intervals in DRAW (this could damage edges, so it
should be done together with 1)
4. DBReader improvements:
a) Per table columns support
b) Resampling read from db (i.e. not more than 10Hz)
Version 0.0.13
=============
1. Specify the current element (number) in graph, not group? Or in other way
indicate what we are showing without openning sidebar.
2. Clean screen after error
3. Comment debugging printf's: draw, cache
4. "Help" module with current version and keys descriptions [xml+xslt]
Version 0.1 (MASK/Experiment Editor)
=============
1. Edit Masks / Experiments (XForms)
Gr1 ------------- -------------
Gr2 | v v v v v v | name from to
... |
2. Each mask should allow item specific options:
+ Display on the second (right) scale
+ Logarithmic
+ ...
3. Include Save Mask, Save Time Window buttons
4. We need to update SOURCE and MENU if new mask/experiment is added?
5. SELECT chooses the last from the list (Custom in the MASK/Experiment menus)
if there are no specified value.
Version 0.2 (Subcaches)
===========
1. Support for Subcaches (if density is above threshold use apporpiate
subcache). Join current table and subcache to automatically sort.
2. Show somethere information about used CACHE and its configuration
3. CACHE updating daemon and check renewals
VERSION 0.3 (Download/Export)
===========
1. Download Page
Instead of direct download, - download files in special folder and
afterwards, allow users to download them, delete, etc. Report status
"still donwloading".
2. EXPORT. Implement data uniforming
3. Excel doesn't accept more than 65536 rows? What to do? Multiple sheets?
VERSION 0.4 (Navigation Bar)
===========
1. Navigation Bar. Again use cropper but with fixed width and always visible
prefix: source, selector_config
1.1 As a main "navigator" provide point density (red - green?), with special
color highlight the places where are distance between points exceeding
specified threshold.
VERSION 0.5 (Real-time Display)
===========
1. Real-time display of the last 100-200 records [separate window]
VERSION 0.6 (Side-menu, Users)
===========
1. Redesign side menu (popups)
a) Optionaly open over graph (skip, just b?)
b) Single popup. And just select current mode (see google maps?)
2. Users loggons / Multiple options / ...
Version 0.7 (Fixups)
===========
1. What will hapen when clicking during long redraw (many items).
2. Check Firefox / IE memory consumption. Memory leaks?
3. Save opened page in history
4. READER and CACHE data intervals mistmatch. What to do (use CACHE intevals
if notification turned off)? Month/Day/Hour intervals within READER data
but out of the CACHE data? The accuracy is droped, since we calculating
amount of points for bigger window.
5. Limit dhtmlHistory size (optionally disable: All/Gecko/None)
6. Reimplement CACHEInterval using CACHE0 'id' instead of 'time'+'ns'
7. After an error we should go back in history. Otherwise it'll be corrupted.
VERSION 0.8
===========
- Autogenerate experiments by thresholding some of the channels (set with
sql statements?)
VERSION 0.9
===========
- Image caching? Separate scales?
- Cache few default zoom levels and several screens in all directions?
- On end-crop start pereparing image?
- Permanent server performing requets?
- Table
adei draw json version (to prevent new/missing json options), from-to,
json options to return, image_file
VERSION 0.10
============
- On certain window sizes (arround month, year, day) propose fast switching
to certain Month, day... May 2007, June 2007, ..., Jan 2008 or Jun 31, May 1
Probably not too much, just arround currently selected date.
ZEUS Related
============
1. Start Experiment / Stop Experiment to ZEUS web control
2. Alarms / SysLog Pages (modules)
3. ZEUS MSSQL Backup
Future Versions - Architectural Questions
===============
1. Use "nanoseconds since" instead current quite strange system with
number-string timing. Or?
2. Graph precision calulating. \/\/______\/\. Using longest interval? But it
will damage other cases (points).
3. Joint visualization of multiple LOGGROUPs. How?
a) Virtual Groups joining several physical ones?
b) ...?
Future Versions - Beter Usability
==============
1. Currenly double-click zoom is only working within selection. However, if we
are doing horizontal or vertical zooms, there are more areas selected.
Should we make them double-clickable as well? Or not?
2. At the moment on the browser window resize the graphic is not autoupdated,
we probably should force update.
3. The following case: We made a selection and opened one of the popups. The
forced graph update have canceled selection. However, the selected values
are still present window configuration dialog.
Should we cancel them? Or could user to use them? Or should we draw
selection after update?
4. Position Apply Button within 'Source' popup always in the bottom of the
popup (if initial size (defined by open-button size) is bigger than
actual content size, than the Apply Button will be positioned just after
content).
5. Do more on graph navigation.
a) Speed of zooming / mooving (with plus/minus keys?)
b) Arrows for mooving, Backspace go back in history
c) Some mouse action for going back in history
d) Drag window for moving.
6. Open sidebar with single click. All popups at once
Future Versions - Interface
===============
1. Rewrite JS calendar
a) Straight forward way of selecting time (not update date every time
afterwards)
b) Allow multiple windows (title)
c) Selection GMT/Local time (?)
d) Open correct month/year page, not current one
e) Date(toString/Parse) functions are behaving differently on different
browsers (mozilla for example not adding timezone information, but works
in the user time zone). It is completely Okey until only that functions
are used. Therefore, the timepicker should be changed to use this
functions for the date printout.
2. Near borders of graph remove the control from the croper, change pictogram
to 'hands' and allow moving source_window currently on display.
3. Move window with keyboard keys
4. Introduce graph options (Logarithmic). Move login to somethere.
5. If we had selcted an area of graph and afterwards in controls have altered
the window properties. At the moment the selection is canceled. It would
be nice to check if new values are within the currently displayed window
and, if so, adjust selection instead.
8.At the moment we are reseting the mask/experiment/window properties after
LogGroup have been changed. We should try to use current
a) window/interval if they are inside the range.
b) Preserve "all" mask (and named masks as well if they exists for both
groups)
9. Do not execute update while we are changing configuration.
10. Optimize cssSetProperty by caching found classes.
11. Statusbar improvements
a) Provide more information on statusbar
b) Possibility to remove statusbar from the screen (small closer?)
12. Extra options in aggregator
+ logarithmic scale (?)
+ force better/worse precision (?)
13. Use "Katrin", "TOSKA" pictures as menu opener instead of nasty button
arround.
Future Versions - Backend
===============
1. Filter data, ignore zeroes? Etc.
2. READER. Exchange remote data source with local backup.
3. LOGGROUP joiner.
4. GRAPH: Reusing existing files (at the moment we don't store enough
information to do that (xmin,xmax,ymin,ymax,etc.)
5. APPFilter.
a) Add support for global and per-block header/footer (with options parsing)
b) Block separators (messages sent between two blocks) [ if 'groupmode=false']
6. Support for 'omit_raw_cache' option (using READER instead of raw cache table)
Intended to reduce caching table size if connection to data source is reliable
and it is not overloaded
Future Version - Support Tools
==============
1. ROOT
a) Provide subsecond precision.
Very Future Versions
====================
1. SELECTION.
a) Show statistics (if single-item-graph)
b) Show correlation (if two-items-graph)
2. CONFIGURATION (Data sources/groups/experiments/etc.)
a) Load big XML configuration on startup and use it to generate all menus.
Expected benfits:
1. Stability: Prevents errors during SOURCE updates
2. Easy programming: The asynchronousity is eleminated
b) At least load all SOURCE menus (single update, I mean) in one chunk
3. ERROR Handling. Standartize error handling in JS scripts
a) Throw from async parts???? And call adeiError in all others???
b) Use "translate" calls everythere.
4. GRAPH. Multiple data aggregation modes. Currently we are using MIN-MAX,
but we could provide at least MEAN mode easily.
a) Think about providing MEDIAN?
b) MEAN could be over items, or over length (considering that the old
value is valid until next one).
5. Develop streamable TAR archives, for in-place streaming multiple groups. In
this case the user will receive the data will we preparing next portion.
a) TAR. In the block begining [0,size] data_block, used_size
b) DIME?
6. At the moment while calculating the data gaps for grouped (aggregated) data
we are assuming what the data is uniformely distributed over interval.
This is not precise enough (if something is really going wrong, it likely
what all missing data is concentrated in one place and, threfore, the real
gap is considerably bigger then estimated one).
Unfortunately, the SQL syntax of MySQL server is not allowing us to
calculate distance between two sequent rows. Therefore, we need to
implement stored function for that purpose and, then, implement
CACHE_PRECISE_GAPS support in the DATAInterval.
To correct the 'missing' values stored in the database (which are also not
precise enough, value <= real_value < 3*value) we could make another
iteration over the data and correct approximated values.
10. Add Item to the graph.
11. Y-axes precise arithmetic if needed (and other rescalling options)
|