Changeset da482c37


Ignore:
Timestamp:
Feb 26, 2012 5:34:22 PM (8 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
6ee9b79
Parents:
fc33432
Message:

new single graph page

Location:
apps/routerconsole
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java

    rfc33432 rda482c37  
    2121    private int _refreshDelaySeconds;
    2222    private boolean _persistent;
     23    private String _stat;
     24    private int _end;
    2325
    2426    private static final String PROP_X = "routerconsole.graphX";
     
    3335    static final int MAX_X = 2048;
    3436    static final int MAX_Y = 1024;
     37    private static final int MIN_X = 200;
     38    private static final int MIN_Y = 60;
     39    private static final int MIN_C = 20;
     40    private static final int MAX_C = SummaryListener.MAX_ROWS;
    3541    private static final int MIN_REFRESH = 15;
    3642   
     
    6571
    6672    public void setPeriodCount(String str) {
    67         try { _periodCount = Integer.parseInt(str); } catch (NumberFormatException nfe) {}
    68     }
    69 
    70     public void setShowEvents(boolean b) { _showEvents = b; }
     73        setC(str);
     74    }
     75
     76    /** @since 0.9 */
     77    public void setE(String str) {
     78        try {
     79            _end = Math.max(0, Integer.parseInt(str));
     80        } catch (NumberFormatException nfe) {}
     81    }
     82
     83    /** @since 0.9 shorter parameter */
     84    public void setC(String str) {
     85        try {
     86            _periodCount = Math.max(MIN_C, Math.min(Integer.parseInt(str), MAX_C));
     87        } catch (NumberFormatException nfe) {}
     88    }
     89
     90    public void setShowEvents(String b) { _showEvents = !"false".equals(b); }
    7191
    7292    public void setHeight(String str) {
    73         try { _height = Math.min(Integer.parseInt(str), MAX_Y); } catch (NumberFormatException nfe) {}
     93        setH(str);
     94    }
     95
     96    /** @since 0.9 shorter parameter */
     97    public void setH(String str) {
     98        try {
     99            _height = Math.max(MIN_Y, Math.min(Integer.parseInt(str), MAX_Y));
     100        } catch (NumberFormatException nfe) {}
    74101    }
    75102
    76103    public void setWidth(String str) {
    77         try { _width = Math.min(Integer.parseInt(str), MAX_X); } catch (NumberFormatException nfe) {}
     104        setW(str);
     105    }
     106
     107    /** @since 0.9 shorter parameter */
     108    public void setW(String str) {
     109        try {
     110            _width = Math.max(MIN_X, Math.min(Integer.parseInt(str), MAX_X));
     111        } catch (NumberFormatException nfe) {}
    78112    }
    79113
     
    90124    /** @since 0.8.7 */
    91125    public void setPersistent(String foo) { _persistent = true; }
     126
     127    /**
     128     *  For single stat page
     129     *  @since 0.9
     130     */
     131    public void setStat(String stat) {
     132        _stat = stat;
     133    }
    92134   
    93135    public String getImages() {
     
    110152
    111153            if (hasTx && hasRx && !_showEvents) {
    112                 _out.write("<a href=\"viewstat.jsp?stat=bw.combined"
     154                _out.write("<a href=\"viewstat?stat=bw.combined"
    113155                           + "&amp;periodCount=" + (3 * _periodCount )
    114156                           + "&amp;width=" + (3 * _width)
    115157                           + "&amp;height=" + (3 * _height)
    116                            + "\" target=\"_blank\">");
     158                           + "\">");
    117159                String title = _("Combined bandwidth graph");
    118160                _out.write("<img class=\"statimage\""
     
    129171                // e.g. "statname for 60m"
    130172                String title = _("{0} for {1}", r.getRateStat().getName(), DataHelper.formatDuration2(_periodCount * r.getPeriod()));
    131                 _out.write("<a href=\"viewstat.jsp?stat="
     173                _out.write("<a href=\"graph?stat="
    132174                           + r.getRateStat().getName()
    133                            + "&amp;showEvents=" + _showEvents
    134                            + "&amp;period=" + r.getPeriod()
    135                            + "&amp;periodCount=" + (3 * _periodCount)
    136                            + "&amp;width=" + (3 * _width)
    137                            + "&amp;height=" + (3 * _height)
    138                            + "\" target=\"_blank\">");
     175                           + '.' + r.getPeriod()
     176                           + "&amp;c=" + (3 * _periodCount)
     177                           + "&amp;w=" + (3 * _width)
     178                           + "&amp;h=" + (3 * _height)
     179                           + (_showEvents ? "&amp;showEvents=1" : "")
     180                           + "\">");
    139181                _out.write("<img class=\"statimage\" border=\"0\""
    140182                           + " src=\"viewstat.jsp?stat="
     
    155197        }
    156198        return "";
     199    }
     200
     201    /**
     202     *  For single stat page
     203     *  @since 0.9
     204     */
     205    public String getSingleStat() {
     206        try {
     207            if (StatSummarizer.isDisabled())
     208                return "";
     209            if (_stat == null) {
     210                _out.write("No stat");
     211                return "";
     212            }
     213            List<Rate> rates = StatSummarizer.instance().parseSpecs(_stat);
     214            if (rates.size() != 1) {
     215                _out.write("Graphs not enabled for " + _stat);
     216                return "";
     217            }
     218            Rate r = rates.get(0);
     219            _out.write("<h3>");
     220            _out.write(_("{0} for {1}", r.getRateStat().getName(), DataHelper.formatDuration2(_periodCount * r.getPeriod())));
     221            if (_end > 0)
     222                _out.write(' ' + _("ending {0} ago", DataHelper.formatDuration2(_end * r.getPeriod())));
     223
     224            _out.write("</h3><p><img class=\"statimage\" border=\"0\""
     225                       + " src=\"viewstat.jsp?stat="
     226                       + r.getRateStat().getName()
     227                       + "&amp;showEvents=" + _showEvents
     228                       + "&amp;period=" + r.getPeriod()
     229                       + "&amp;periodCount=" + _periodCount
     230                       + "&amp;end=" + _end
     231                       + "&amp;width=" + _width
     232                       + "&amp;height=" + _height
     233                       + "\"></p><p>\n");
     234
     235            if (_width < MAX_X && _height < MAX_Y) {
     236                _out.write(link(_stat, _showEvents, _periodCount, _end, _width * 3 / 2, _height * 3 / 2));
     237                _out.write(_("Larger"));
     238                _out.write("</a> - ");
     239            }
     240
     241            if (_width > MIN_X && _height > MIN_Y) {
     242                _out.write(link(_stat, _showEvents, _periodCount, _end, _width * 2 / 3, _height * 2 / 3));
     243                _out.write(_("Smaller"));
     244                _out.write("</a> - ");
     245            }
     246
     247            if (_height < MAX_Y) {
     248                _out.write(link(_stat, _showEvents, _periodCount, _end, _width, _height * 3 / 2));
     249                _out.write(_("Taller"));
     250                _out.write("</a> - ");
     251            }
     252
     253            if (_height > MIN_Y) {
     254                _out.write(link(_stat, _showEvents, _periodCount, _end, _width, _height * 2 / 3));
     255                _out.write(_("Shorter"));
     256                _out.write("</a> - ");
     257            }
     258
     259            if (_width < MAX_X) {
     260                _out.write(link(_stat, _showEvents, _periodCount, _end, _width * 3 / 2, _height));
     261                _out.write(_("Wider"));
     262                _out.write("</a> - ");
     263            }
     264
     265            if (_width > MIN_X) {
     266                _out.write(link(_stat, _showEvents, _periodCount, _end, _width * 2 / 3, _height));
     267                _out.write(_("Narrower"));
     268                _out.write("</a>");
     269            }
     270
     271            _out.write("<br>");
     272            if (_periodCount < MAX_C) {
     273                _out.write(link(_stat, _showEvents, _periodCount * 2, _end, _width, _height));
     274                _out.write(_("Larger interval"));
     275                _out.write("</a> - ");
     276            }
     277
     278            if (_periodCount > MIN_C) {
     279                _out.write(link(_stat, _showEvents, _periodCount / 2, _end, _width, _height));
     280                _out.write(_("Smaller interval"));
     281                _out.write("</a>");
     282            }
     283
     284            _out.write("<br>");
     285            if (_periodCount < MAX_C) {
     286                _out.write(link(_stat, _showEvents, _periodCount, _end + _periodCount, _width, _height));
     287                _out.write(_("Previous interval"));
     288                _out.write("</a>");
     289            }
     290
     291            if (_end > 0) {
     292                int end = _end - _periodCount;
     293                if (end <= 0)
     294                    end = 0;
     295                if (_periodCount < MAX_C)
     296                    _out.write(" - ");
     297                _out.write(link(_stat, _showEvents, _periodCount, end, _width, _height));
     298                _out.write(_("Next interval"));
     299                _out.write("</a> ");
     300            }
     301
     302            _out.write("<br>");
     303            _out.write(link(_stat, !_showEvents, _periodCount, _end, _width, _height));
     304            _out.write(_showEvents ? _("Plot averages") : _("plot events"));
     305            _out.write("</a>");
     306
     307            _out.write("</p><p><i>" + _("All times are UTC.") + "</i></p>\n");
     308        } catch (IOException ioe) {
     309            ioe.printStackTrace();
     310        }
     311        return "";
     312    }
     313
     314    /** @since 0.9 */
     315    private static String link(String stat, boolean showEvents,
     316                               int periodCount, int end,
     317                               int width, int height) {
     318        return
     319               "<a href=\"graph?stat="
     320               + stat
     321               + "&amp;c=" + periodCount
     322               + "&amp;w=" + width
     323               + "&amp;h=" + height
     324               + (end > 0 ? "&amp;e=" + end : "")
     325               + (showEvents ? "&amp;showEvents=1" : "")
     326               + "\">";
    157327    }
    158328
  • apps/routerconsole/java/src/net/i2p/router/web/StatSummarizer.java

    rfc33432 rda482c37  
    173173    public boolean renderPng(Rate rate, OutputStream out) throws IOException {
    174174        return renderPng(rate, out, GraphHelper.DEFAULT_X, GraphHelper.DEFAULT_Y,
    175                          false, false, false, false, -1, true);
     175                         false, false, false, false, -1, 0, true);
    176176    }
    177177
     
    180180     *  For the two-data bandwidth graph see renderRatePng().
    181181     *  Synchronized to conserve memory.
     182     *
     183     *  @param end number of periods before now
    182184     *  @return success
    183185     */
    184186    public boolean renderPng(Rate rate, OutputStream out, int width, int height, boolean hideLegend,
    185187                                          boolean hideGrid, boolean hideTitle, boolean showEvents, int periodCount,
    186                                           boolean showCredit) throws IOException {
     188                                          int end, boolean showCredit) throws IOException {
    187189        try {
    188190            try {
     
    190192            } catch (InterruptedException ie) {}
    191193            return locked_renderPng(rate, out, width, height, hideLegend, hideGrid, hideTitle, showEvents,
    192                                     periodCount, showCredit);
     194                                    periodCount, end, showCredit);
    193195        } finally {
    194196            _sem.release();
     
    196198    }
    197199
     200    /**
     201     *  @param end number of periods before now
     202     */
    198203    private boolean locked_renderPng(Rate rate, OutputStream out, int width, int height, boolean hideLegend,
    199204                                          boolean hideGrid, boolean hideTitle, boolean showEvents, int periodCount,
    200                                           boolean showCredit) throws IOException {
     205                                          int end, boolean showCredit) throws IOException {
    201206        if (width > GraphHelper.MAX_X)
    202207            width = GraphHelper.MAX_X;
     
    207212        else if (height <= 0)
    208213            height = GraphHelper.DEFAULT_Y;
     214        if (end < 0)
     215            end = 0;
    209216        for (SummaryListener lsnr : _listeners) {
    210217            if (lsnr.getRate().equals(rate)) {
    211                 lsnr.renderPng(out, width, height, hideLegend, hideGrid, hideTitle, showEvents, periodCount, showCredit);
     218                lsnr.renderPng(out, width, height, hideLegend, hideGrid, hideTitle, showEvents, periodCount, end, showCredit);
    212219                return true;
    213220            }
     
    369376     * @return list of Rate objects
    370377     */
    371     private List<Rate> parseSpecs(String specs) {
     378    List<Rate> parseSpecs(String specs) {
    372379        StringTokenizer tok = new StringTokenizer(specs, ",");
    373380        List<Rate> rv = new ArrayList();
  • apps/routerconsole/java/src/net/i2p/router/web/SummaryListener.java

    rfc33432 rda482c37  
    5656    static final int PERIODS = 60 * 24;  // 1440
    5757    private static final int MIN_ROWS = PERIODS;
    58     private static final int MAX_ROWS = 91 * MIN_ROWS;
     58    static final int MAX_ROWS = 91 * MIN_ROWS;
    5959    private static final long THREE_MONTHS = 91l * 24 * 60 * 60 * 1000;
    6060   
     
    192192    }
    193193
    194     public void renderPng(OutputStream out, int width, int height, boolean hideLegend, boolean hideGrid, boolean hideTitle, boolean showEvents, int periodCount, boolean showCredit) throws IOException {
     194    /**
     195     *  @param end number of periods before now
     196     */
     197    public void renderPng(OutputStream out, int width, int height, boolean hideLegend, boolean hideGrid,
     198                          boolean hideTitle, boolean showEvents, int periodCount,
     199                          int end, boolean showCredit) throws IOException {
    195200        if (_renderer == null || _db == null)
    196201            throw new IOException("No RRD, check logs for previous errors");
    197         _renderer.render(out, width, height, hideLegend, hideGrid, hideTitle, showEvents, periodCount, showCredit);
     202        _renderer.render(out, width, height, hideLegend, hideGrid, hideTitle, showEvents, periodCount, end, showCredit);
    198203    }
    199204
  • apps/routerconsole/java/src/net/i2p/router/web/SummaryRenderer.java

    rfc33432 rda482c37  
    8282
    8383    public void render(OutputStream out) throws IOException { render(out, GraphHelper.DEFAULT_X, GraphHelper.DEFAULT_Y,
    84                                                                      false, false, false, false, -1, false); }
    85 
    86     public void render(OutputStream out, int width, int height, boolean hideLegend, boolean hideGrid, boolean hideTitle, boolean showEvents, int periodCount, boolean showCredit) throws IOException {
     84                                                                     false, false, false, false, -1, 0, false); }
     85
     86    /**
     87     *  @param endp number of periods before now
     88     */
     89    public void render(OutputStream out, int width, int height, boolean hideLegend, boolean hideGrid,
     90                       boolean hideTitle, boolean showEvents, int periodCount,
     91                       int endp, boolean showCredit) throws IOException {
    8792        long end = _listener.now() - 75*1000;
     93        long period = _listener.getRate().getPeriod();
     94        if (endp > 0)
     95            end -= period * endp;
    8896        if (periodCount <= 0 || periodCount > _listener.getRows())
    8997            periodCount = _listener.getRows();
    90         long start = end - _listener.getRate().getPeriod()*periodCount;
     98        long start = end - (period * periodCount);
    9199        //long begin = System.currentTimeMillis();
    92100        try {
     
    104112                // we want the formatting and translation of formatDuration2(), except not zh, and not the &nbsp;
    105113                if (IS_WIN && "zh".equals(Messages.getLanguage(_context)))
    106                     p = DataHelper.formatDuration(_listener.getRate().getPeriod());
     114                    p = DataHelper.formatDuration(period);
    107115                else
    108                     p = DataHelper.formatDuration2(_listener.getRate().getPeriod()).replace("&nbsp;", " ");
     116                    p = DataHelper.formatDuration2(period).replace("&nbsp;", " ");
    109117                if (showEvents)
    110118                    title = name + ' ' + _("events in {0}", p);
  • apps/routerconsole/jsp/graphs.jsp

    rfc33432 rda482c37  
    77<%=intl.title("graphs")%>
    88 <jsp:useBean class="net.i2p.router.web.GraphHelper" id="graphHelper" scope="request" />
    9  <% graphHelper.storeMethod(request.getMethod()); %>
    109 <jsp:setProperty name="graphHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
    1110<% /* GraphHelper sets the defaults in setContextId, so setting the properties must be after the context */ %>
  • apps/routerconsole/jsp/viewstat.jsp

    rfc33432 rda482c37  
    4848        int height = -1;
    4949        int periodCount = -1;
     50        int end = 0;
    5051        String str = request.getParameter("width");
    5152        if (str != null) try { width = Integer.parseInt(str); } catch (NumberFormatException nfe) {}
     
    5455        str = request.getParameter("periodCount");
    5556        if (str != null) try { periodCount = Integer.parseInt(str); } catch (NumberFormatException nfe) {}
     57        str = request.getParameter("end");
     58        if (str != null) try { end = Integer.parseInt(str); } catch (NumberFormatException nfe) {}
    5659        boolean hideLegend = Boolean.valueOf(""+request.getParameter("hideLegend")).booleanValue();
    5760        boolean hideGrid = Boolean.valueOf(""+request.getParameter("hideGrid")).booleanValue();
     
    6467            rendered = net.i2p.router.web.StatSummarizer.instance().renderRatePng(cout, width, height, hideLegend, hideGrid, hideTitle, showEvents, periodCount, showCredit);
    6568        else
    66             rendered = net.i2p.router.web.StatSummarizer.instance().renderPng(rate, cout, width, height, hideLegend, hideGrid, hideTitle, showEvents, periodCount, showCredit);
     69            rendered = net.i2p.router.web.StatSummarizer.instance().renderPng(rate, cout, width, height, hideLegend, hideGrid, hideTitle, showEvents, periodCount, end, showCredit);
    6770      }
    6871      if (rendered)
Note: See TracChangeset for help on using the changeset viewer.