| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
Closes #110
|
|
|
|
| |
Closes #111
|
|
|
|
| |
Closes #109
|
| |
|
|
|
|
| |
During conversion from PHP, this function was apparently missed.
|
|
|
|
|
|
|
| |
Fixed various typos in references to variables.
Also throw an exception if a variable is not found in GPRINT for
debugging purposes and move some variable declarations.
|
|
|
|
|
|
|
|
| |
Comment out more code that existed solely for IE10 and older. This
prevents breaking the "Break on exceptions" functionality of the
Chromium developer tools for no gain.
This also removes the final jshint warnings from this file.
|
|
|
|
|
|
| |
Instead of using a flag for determining whether a value is set or not,
set values that will never match and test for the validity of the
results instead of checking the flags.
|
|
|
|
|
|
|
|
| |
The RRD file has finer details for more recent data points. When looking
for a match for a graph past the last update ("the future"), a RRA would
be picked which has a step size of 1. As we know that no data points are
available, optimise this and return earlier with the full range set to
NaN.
|
|
|
|
|
|
|
|
|
|
|
|
| |
`RRDRRAInfo.pdp_cnt` does not exist. A reference to the pdp_cnt member
in a struct exists, this is available via the `getPdpPerRow()` method,
so use that. (actually, `getMinStep() * getPdpPerRow()` can be
simplified further, see below).
While at it, replace the combination
`RRDRRAInfo.getPdpPerRow() * RRAInfo.pdp_step` by `RRDRRAInfo.getStep()`
since this is the same thing. As `RRDHeader.pdp_step` is copied into
`RRDRRAInfo`, this can also be substituted.
|
|
|
|
| |
Closes #106
|
|
|
|
|
|
| |
or plugin json
Closes #104
|
|
|
|
| |
Closes #105
|
|
|
|
| |
Closes #101
|
| |
|
| |
|
| |
|
|\ |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Use case: I would like to bypass PHP for serving the RRD files and allow
the webserver (nginx) to compress it to reduce load on the Raspberry Pi.
I could go through all kinds of URL rewriting, but it is much easier to
set `$CONFIG['rrd_url'] = 'rrd/{file}';` instead and add a corresponding
location + alias directive to the nginx configuration.
This depends on https://github.com/manuelluis/jsrrdgraph/pull/17 to
avoid breaking on '='.
|
| |
| |
| |
| |
| |
| | |
This fixes parsing of URLs such as 'rrd.php?path=some%3Ffile.rrd', and
if people really insist, paths such as 'C:\bar.rrd' (must be written as
'C\:\\bar.rrd', add additional escapes for Javascript strings if needed).
|
|/
|
|
|
|
| |
Documents requirements, installation instructions (obsoleting
doc/INSTALL) and performance hints. Added a nginx server configuration
example that optimises for performance.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Best viewed with `git diff -w`.
Since CGP-sync.js and CGP-async.js are almost equal except for one
function call, merge them into a single function. While at it, reformat
CGP.js to expose a single namespace (`CGP`) which exports the symbol
`drawAll`.
Remove `alert()` and add a `console.error()` call instead. This is less
intrustive to users (who will notice a broken graph anyway) and be more
helpful for developers (who can examine the call trace in the Developer
Console.
Add `"use strict"` and use the standard four spaces as indent. Process
the script through `js-beautify` which re-indented the code and added
some spaces between operators. Replace double by single quotes for
consistency. Rename `catch(e)` to `catch(ex)` to supress a jshint
warning about IE8.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Profiling was done using Firebug in Firefox 31 on Linux x86_64. Test was
performed as follows:
- rrd generated using collectd with default rrdtool settings.
- CPU utilization was visualized with 8 lines (idle, nice, etc.).
- The data has gaps between 20% and 40% and 55% and 85% (were no data
was collected).
- The measured performance was from advancing the data 40% to the right
(there are no gaps before that).
The total running time is 18859.094ms (old), 5151.822ms (new). In the
below profiles, common functions with similar running times and call
counts were omitted. Columns in the profile table: function, call count,
time spent in the function, average time spent per call in *total*
(including other functions called by the function) and percentage of the
total running time. The RrdGraph.data_calc function was not called much,
but seems to be heavy enough to include in the trace.
Profile for old implementation:
- getEndianByteAt 246959 12200.42ms 0.063ms 64.69%
- getDoubleAt 30306 3183.393ms 0.612ms 16.88%
- RRDRRA.getEl 30306 1177.33ms 0.665ms 6.24%
- RRDRRA.calc_idx 30306 449.201ms 0.015ms 2.38%
- (RrdDataFile.build 47 431.986ms total=21189.434ms 2.29%)
- getByteAt 254290 327.369ms 0.013ms 1.74%
- (2 functions omitted)
- getCStringAt 752 103.308ms 0.271ms 0.55%
- RrdRpn.calc 5504 98.55ms 0.018ms 0.52%
- (1 function omitted)
- (RrdGraph.data_calc 1 75.417ms total=174.535ms 0.4%)
- getLongAt 1128 65.796ms 0.212ms 0.35%
Profile for new implementation:
- RRDRRA.getEl 32280 1202.446ms 0.065ms 23.34%
- RrdRpn.calc 43968 848.693ms 0.019ms 16.47%
(probably includes the getByteAt call which is not visible in trace)
- (RrdGraph.data calc 2 616.648ms total=1466.432ms 11.97%)
- getDoubleAt 32280 460.894ms 0.014ms 8.95%
- (RrdDataFile.build 48 438.1ms total=2719.07ms 8.5%)
- (RRDRRA.calc_idx 32280 436.375ms total=436.375ms 8.47%)
- (10 functions omitted)
- getLongAt 1152 16.273ms 0.014ms 0.32%
- (2 functions omitted)
- getCStringAt 768 13.651ms 0.018ms 0.26%
A second test was performed on a graph with no visible data points. I
dragged it to the left to get in the future with only NaN values. Then
the profile started. It turns out that the byte readings are not
dominating here, 99% of the time was spent in RrdRpn.calc and
RrdGraph.data_calc:
- (old) RrdRpn.calc 3.14k 58493s 0.019ms
- (new) RrdRpn.calc 3.10k 56912s 0.018ms
- RrdGraph.data_calc (n=2) took about 46 seconds for both.
- getByteAt (n=12096): 0.014ms (old), invisible/inlined (new)
- getEndianByteAt (n=4608): 0.040ms (old only)
- getCStringAt (n=768): 0.285ms (old), 0.018ms (new)
- getLongAt (n=1152): 0.233ms (old), 0.014ms (new)
|
|
|
|
|
|
|
|
|
|
|
|
| |
Rename switch_endian to littleEndian to be more explicit (the meaning
is now inversed too). Make getEndianByteAt private since it is an
implementation detail.
Drop getStringAt as this is not used in this library. Move getCharAt
above getCStringAt since they are more related.
Move the methods definition for the current implementation to a new
function.
|
|
|
|
|
| |
These parameters are not used in this library. Should it ever be
necessary to process a slice of data, then the caller should do so.
|
|
|
|
|
| |
Use conditional compilation for the antique browsers that provide
VBScript support.
|
|
|
|
|
|
|
|
|
|
|
| |
commit 2a74a333ff143499b465234f0395a4aad7bdaa78 ("Upgrade to
javascriptrrd ver 1.1.1") converted getByteAt calls to a getEndianByteAt
call, but this also introduced a branch operation. Since endianess is
dependent on the file, we can move the switch_endian check outside the
function.
Performance improved from 0.148ms (n=336k) to .039ms (n=384k) which
translates to about 30 seconds!
|
|
|
|
|
|
|
|
|
|
|
| |
Added jshint comment on top, added "use strict". Added missing
semi-colons, converted to '===' (after validation).
Added comment for `typeof strData == "unknown"`. Break one long line
over two lines.
There are no other changes except for whitespace and line ending
changes. Check with `git diff -w`.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Many fall in the category missing semicolon, but there are legitimate
bugs (like throwing an error with an undefined variable, using
isInfinite instead of !isFinite or fabs instead of Math.abs).
At some places, I moved the variable declarations to avoid duplicate
definition warnings.
Redundant breaks have been removed (after return / throw).
Global variables were implicitly defined in RrdDataFile (which caught my
attention) and Base64, these have been made local.
Also fixed some whitespace errors. Yay, the consistency. Not all (style)
issues are fixed.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
Also fix some typos and white-space issues. Reported at
https://github.com/pommi/CGP/issues/88
|
|
|
|
| |
Closes #92
|
| |
|
|
|
|
| |
Closes #89
|
|
|
| |
Fix a link when no class selected.
|
| |
|
|
|
|
|
|
|
| |
detail.php
In detail.php $_GET['x'] and $_GET['y'] are overridden. filter_input
takes the original values. This results in NULL values.
|
| |
|
|
|
|
|
|
|
|
|
| |
Report 400 Bad Request on query errors instead of reporting 200 OK
(which can be cached).
Add some additional validation for the 'x' and 'y' parameters, to catch
underflow (test with `x=-10` for example). Also fix a typo in the error
message and include more details (the actual error).
|
|
|
|
|
|
|
|
|
| |
`[\w\W]` matches EVERYTHING. Validation failed. Also remove `\d` as that
`\w` is a superset of it.
Also check that the host parameter is actually non-empty, otherwise
`collectd_plugins` will happily return results as the directory
`$CONFIG['datadir'] . '/' . ''` trivially exists...
|
|
|
|
|
| |
If a datadir would contain characters with a special meaning in regex
(e.g. `/tmp/logs (new)`), then the function would blow up.
|
|
|
|
| |
... for instance, when using an overly large "s" parameter.
|