/adei/ui

To get this branch, use:
bzr branch http://darksoft.org/webbzr/adei/ui
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)