github.com/bhojpur/cache@v0.0.4/templates/ego.go (about)

     1  package templates
     2  
     3  // Copyright (c) 2018 Bhojpur Consulting Private Limited, India. All rights reserved.
     4  
     5  // Permission is hereby granted, free of charge, to any person obtaining a copy
     6  // of this software and associated documentation files (the "Software"), to deal
     7  // in the Software without restriction, including without limitation the rights
     8  // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     9  // copies of the Software, and to permit persons to whom the Software is
    10  // furnished to do so, subject to the following conditions:
    11  
    12  // The above copyright notice and this permission notice shall be included in
    13  // all copies or substantial portions of the Software.
    14  
    15  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    16  // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    17  // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    18  // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    19  // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    20  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    21  // THE SOFTWARE.
    22  
    23  import (
    24  	"fmt"
    25  	"io"
    26  	"net/http"
    27  	"path/filepath"
    28  	"strings"
    29  	"unsafe"
    30  
    31  	memcache "github.com/bhojpur/cache/pkg/memory"
    32  )
    33  
    34  //line error.ego:1
    35  func Error(w io.Writer, err error) error {
    36  //line error.ego:2
    37  	if _, err := fmt.Fprintf(w, "\n\n"); err != nil {
    38  		return err
    39  	}
    40  //line error.ego:3
    41  	if _, err := fmt.Fprintf(w, "<!DOCTYPE html>\n"); err != nil {
    42  		return err
    43  	}
    44  //line error.ego:4
    45  	if _, err := fmt.Fprintf(w, "<html lang=\"en\">\n  "); err != nil {
    46  		return err
    47  	}
    48  //line error.ego:5
    49  	if _, err := fmt.Fprintf(w, "<head>\n    "); err != nil {
    50  		return err
    51  	}
    52  //line error.ego:6
    53  	if _, err := fmt.Fprintf(w, "<meta charset=\"utf-8\">\n    "); err != nil {
    54  		return err
    55  	}
    56  //line error.ego:7
    57  	if _, err := fmt.Fprintf(w, "<title>Bhojpur Cache - Introspection Dashboard"); err != nil {
    58  		return err
    59  	}
    60  //line error.ego:7
    61  	if _, err := fmt.Fprintf(w, "</title>\n  "); err != nil {
    62  		return err
    63  	}
    64  //line error.ego:8
    65  	if _, err := fmt.Fprintf(w, "</head>\n\n  "); err != nil {
    66  		return err
    67  	}
    68  //line error.ego:10
    69  	if _, err := fmt.Fprintf(w, "<body class=\"error\">\n    "); err != nil {
    70  		return err
    71  	}
    72  //line error.ego:11
    73  	if _, err := fmt.Fprintf(w, "<div class=\"container\">\n      "); err != nil {
    74  		return err
    75  	}
    76  //line error.ego:12
    77  	if _, err := fmt.Fprintf(w, "<div class=\"header\">\n        "); err != nil {
    78  		return err
    79  	}
    80  //line error.ego:13
    81  	if _, err := fmt.Fprintf(w, "<h3 class=\"text-muted\">Error"); err != nil {
    82  		return err
    83  	}
    84  //line error.ego:13
    85  	if _, err := fmt.Fprintf(w, "</h3>\n      "); err != nil {
    86  		return err
    87  	}
    88  //line error.ego:14
    89  	if _, err := fmt.Fprintf(w, "</div>\n\n      An error has occurred: "); err != nil {
    90  		return err
    91  	}
    92  //line error.ego:16
    93  	if _, err := fmt.Fprintf(w, "%v", err); err != nil {
    94  		return err
    95  	}
    96  //line error.ego:17
    97  	if _, err := fmt.Fprintf(w, "\n    "); err != nil {
    98  		return err
    99  	}
   100  //line error.ego:17
   101  	if _, err := fmt.Fprintf(w, "</div> "); err != nil {
   102  		return err
   103  	}
   104  //line error.ego:17
   105  	if _, err := fmt.Fprintf(w, "<!-- /container -->\n  "); err != nil {
   106  		return err
   107  	}
   108  //line error.ego:18
   109  	if _, err := fmt.Fprintf(w, "</body>\n"); err != nil {
   110  		return err
   111  	}
   112  //line error.ego:19
   113  	if _, err := fmt.Fprintf(w, "</html>\n"); err != nil {
   114  		return err
   115  	}
   116  	return nil
   117  }
   118  
   119  //line head.ego:1
   120  func head(w io.Writer, tx *memcache.Tx) error {
   121  //line head.ego:2
   122  	if _, err := fmt.Fprintf(w, "\n\n"); err != nil {
   123  		return err
   124  	}
   125  //line head.ego:4
   126  	if _, err := fmt.Fprintf(w, "\n"); err != nil {
   127  		return err
   128  	}
   129  //line head.ego:5
   130  	if _, err := fmt.Fprintf(w, "\n\n"); err != nil {
   131  		return err
   132  	}
   133  //line head.ego:6
   134  	if _, err := fmt.Fprintf(w, "<head>\n  "); err != nil {
   135  		return err
   136  	}
   137  //line head.ego:7
   138  	if _, err := fmt.Fprintf(w, "<meta charset=\"utf-8\">\n  "); err != nil {
   139  		return err
   140  	}
   141  //line head.ego:8
   142  	if _, err := fmt.Fprintf(w, "<title>Bhojpur Cache - "); err != nil {
   143  		return err
   144  	}
   145  //line head.ego:8
   146  	if _, err := fmt.Fprintf(w, "%v", filepath.Base(tx.DB().Path())); err != nil {
   147  		return err
   148  	}
   149  //line head.ego:8
   150  	if _, err := fmt.Fprintf(w, "</title>\n\n  "); err != nil {
   151  		return err
   152  	}
   153  //line head.ego:10
   154  	if _, err := fmt.Fprintf(w, "<style>\n    table {\n      border-collapse:collapse;\n    }\n    \n    table, th, td {\n      border: 1px solid black;\n    }\n\n    th, td { \n      min-width: 100px;\n      padding: 2px 5px;\n    }\n  "); err != nil {
   155  		return err
   156  	}
   157  //line head.ego:23
   158  	if _, err := fmt.Fprintf(w, "</style>\n"); err != nil {
   159  		return err
   160  	}
   161  //line head.ego:24
   162  	if _, err := fmt.Fprintf(w, "</head>\n"); err != nil {
   163  		return err
   164  	}
   165  	return nil
   166  }
   167  
   168  //line index.ego:1
   169  func Index(w io.Writer) error {
   170  //line index.ego:2
   171  	if _, err := fmt.Fprintf(w, "\n\n"); err != nil {
   172  		return err
   173  	}
   174  //line index.ego:3
   175  	if _, err := fmt.Fprintf(w, "<!DOCTYPE html>\n"); err != nil {
   176  		return err
   177  	}
   178  //line index.ego:4
   179  	if _, err := fmt.Fprintf(w, "<html lang=\"en\">\n  "); err != nil {
   180  		return err
   181  	}
   182  //line index.ego:5
   183  	if _, err := fmt.Fprintf(w, "<head>\n    "); err != nil {
   184  		return err
   185  	}
   186  //line index.ego:6
   187  	if _, err := fmt.Fprintf(w, "<meta http-equiv=\"refresh\" content=\"0; url=page\">\n  "); err != nil {
   188  		return err
   189  	}
   190  //line index.ego:7
   191  	if _, err := fmt.Fprintf(w, "</head>\n\n  "); err != nil {
   192  		return err
   193  	}
   194  //line index.ego:9
   195  
   196  
   197  	if _, err := fmt.Fprintf(w, "<body>redirecting..."); err != nil {
   198  		return err
   199  	}
   200  //line index.ego:9
   201  	if _, err := fmt.Fprintf(w, "</body>\n"); err != nil {
   202  		return err
   203  	}
   204  //line index.ego:10
   205  	if _, err := fmt.Fprintf(w, "</html>\n"); err != nil {
   206  		return err
   207  	}
   208  	return nil
   209  }
   210  
   211  //line nav.ego:1
   212  func nav(w io.Writer, tx *memcache.Tx) error {
   213  //line nav.ego:2
   214  	if _, err := fmt.Fprintf(w, "\n\n"); err != nil {
   215  		return err
   216  	}
   217  //line nav.ego:4
   218  	if _, err := fmt.Fprintf(w, "\n"); err != nil {
   219  		return err
   220  	}
   221  //line nav.ego:5
   222  	if _, err := fmt.Fprintf(w, "\n\n"); err != nil {
   223  		return err
   224  	}
   225  //line nav.ego:6
   226  	if _, err := fmt.Fprintf(w, "<h1>"); err != nil {
   227  		return err
   228  	}
   229  //line nav.ego:6
   230  	if _, err := fmt.Fprintf(w, "%v", filepath.Base(tx.DB().Path())); err != nil {
   231  		return err
   232  	}
   233  //line nav.ego:6
   234  	if _, err := fmt.Fprintf(w, "</h1>\n"); err != nil {
   235  		return err
   236  	}
   237  	return nil
   238  }
   239  
   240  //line page.ego:1
   241  func Page(w io.Writer, r *http.Request, tx *memcache.Tx, indexes []int, directID int, showUsage bool) error {
   242  //line page.ego:2
   243  	if _, err := fmt.Fprintf(w, "\n\n"); err != nil {
   244  		return err
   245  	}
   246  //line page.ego:4
   247  	if _, err := fmt.Fprintf(w, "\n"); err != nil {
   248  		return err
   249  	}
   250  //line page.ego:5
   251  	if _, err := fmt.Fprintf(w, "\n"); err != nil {
   252  		return err
   253  	}
   254  //line page.ego:6
   255  	if _, err := fmt.Fprintf(w, "\n"); err != nil {
   256  		return err
   257  	}
   258  //line page.ego:7
   259  	if _, err := fmt.Fprintf(w, "\n\n"); err != nil {
   260  		return err
   261  	}
   262  //line page.ego:9
   263  	p, ids, err := find(tx, directID, indexes)
   264  	if err != nil {
   265  		return err
   266  	}
   267  
   268  	// Generate page stats.
   269  	pageSize := tx.DB().Info().PageSize
   270  	stats := p.stats(pageSize)
   271  
   272  	// Generate histogram of all nested page usage.
   273  	var histogram map[int]int
   274  	if showUsage {
   275  		histogram = usage(tx, p.id)
   276  	}
   277  
   278  //line page.ego:25
   279  	if _, err := fmt.Fprintf(w, "\n\n"); err != nil {
   280  		return err
   281  	}
   282  //line page.ego:26
   283  	if _, err := fmt.Fprintf(w, "<!DOCTYPE html>\n"); err != nil {
   284  		return err
   285  	}
   286  //line page.ego:27
   287  	if _, err := fmt.Fprintf(w, "<html lang=\"en\">\n  "); err != nil {
   288  		return err
   289  	}
   290  //line page.ego:28
   291  	head(w, tx)
   292  //line page.ego:29
   293  	if _, err := fmt.Fprintf(w, "\n\n  "); err != nil {
   294  		return err
   295  	}
   296  //line page.ego:30
   297  	if _, err := fmt.Fprintf(w, "<body>\n    "); err != nil {
   298  		return err
   299  	}
   300  //line page.ego:31
   301  	nav(w, tx)
   302  //line page.ego:32
   303  	if _, err := fmt.Fprintf(w, "\n\n    "); err != nil {
   304  		return err
   305  	}
   306  //line page.ego:33
   307  	if _, err := fmt.Fprintf(w, "<h2>\n      "); err != nil {
   308  		return err
   309  	}
   310  //line page.ego:34
   311  	for i, id := range ids {
   312  //line page.ego:35
   313  		if _, err := fmt.Fprintf(w, "\n        "); err != nil {
   314  			return err
   315  		}
   316  //line page.ego:35
   317  		if i > 0 {
   318  //line page.ego:35
   319  			if _, err := fmt.Fprintf(w, "&raquo;"); err != nil {
   320  				return err
   321  			}
   322  //line page.ego:35
   323  		}
   324  //line page.ego:36
   325  		if _, err := fmt.Fprintf(w, "\n        "); err != nil {
   326  			return err
   327  		}
   328  //line page.ego:36
   329  		if _, err := fmt.Fprintf(w, "<a href=\""); err != nil {
   330  			return err
   331  		}
   332  //line page.ego:36
   333  		if _, err := fmt.Fprintf(w, "%v", pagelink(indexes[:i+1])); err != nil {
   334  			return err
   335  		}
   336  //line page.ego:36
   337  		if _, err := fmt.Fprintf(w, "\">#"); err != nil {
   338  			return err
   339  		}
   340  //line page.ego:36
   341  		if _, err := fmt.Fprintf(w, "%v", id); err != nil {
   342  			return err
   343  		}
   344  //line page.ego:36
   345  		if _, err := fmt.Fprintf(w, "</a>\n      "); err != nil {
   346  			return err
   347  		}
   348  //line page.ego:37
   349  	}
   350  //line page.ego:38
   351  	if _, err := fmt.Fprintf(w, "\n    "); err != nil {
   352  		return err
   353  	}
   354  //line page.ego:38
   355  	if _, err := fmt.Fprintf(w, "</h2>\n\n    "); err != nil {
   356  		return err
   357  	}
   358  //line page.ego:40
   359  	if _, err := fmt.Fprintf(w, "<h3>Bhojpur Cache - Page Information"); err != nil {
   360  		return err
   361  	}
   362  //line page.ego:40
   363  	if _, err := fmt.Fprintf(w, "</h3>\n    "); err != nil {
   364  		return err
   365  	}
   366  //line page.ego:41
   367  	if _, err := fmt.Fprintf(w, "<p>\n      "); err != nil {
   368  		return err
   369  	}
   370  //line page.ego:42
   371  	if _, err := fmt.Fprintf(w, "<strong>ID:"); err != nil {
   372  		return err
   373  	}
   374  //line page.ego:42
   375  	if _, err := fmt.Fprintf(w, "</strong> "); err != nil {
   376  		return err
   377  	}
   378  //line page.ego:42
   379  	if _, err := fmt.Fprintf(w, "%v", comma(int(p.id))); err != nil {
   380  		return err
   381  	}
   382  //line page.ego:42
   383  	if _, err := fmt.Fprintf(w, "<br/>\n      "); err != nil {
   384  		return err
   385  	}
   386  //line page.ego:43
   387  	if _, err := fmt.Fprintf(w, "<strong>Type:"); err != nil {
   388  		return err
   389  	}
   390  //line page.ego:43
   391  	if _, err := fmt.Fprintf(w, "</strong> "); err != nil {
   392  		return err
   393  	}
   394  //line page.ego:43
   395  	if _, err := fmt.Fprintf(w, "%v", fmt.Sprintf("%s (%x)", p.typ(), p.flags)); err != nil {
   396  		return err
   397  	}
   398  //line page.ego:43
   399  	if _, err := fmt.Fprintf(w, "<br/>\n      "); err != nil {
   400  		return err
   401  	}
   402  //line page.ego:44
   403  	if _, err := fmt.Fprintf(w, "<strong>Overflow:"); err != nil {
   404  		return err
   405  	}
   406  //line page.ego:44
   407  	if _, err := fmt.Fprintf(w, "</strong> "); err != nil {
   408  		return err
   409  	}
   410  //line page.ego:44
   411  	if _, err := fmt.Fprintf(w, "%v", p.overflow); err != nil {
   412  		return err
   413  	}
   414  //line page.ego:44
   415  	if _, err := fmt.Fprintf(w, "<br/>"); err != nil {
   416  		return err
   417  	}
   418  //line page.ego:44
   419  	if _, err := fmt.Fprintf(w, "<br/>\n\n      "); err != nil {
   420  		return err
   421  	}
   422  //line page.ego:46
   423  	if _, err := fmt.Fprintf(w, "<strong>Alloc:"); err != nil {
   424  		return err
   425  	}
   426  //line page.ego:46
   427  	if _, err := fmt.Fprintf(w, "</strong> "); err != nil {
   428  		return err
   429  	}
   430  //line page.ego:46
   431  	if _, err := fmt.Fprintf(w, "%v", comma(stats.alloc)); err != nil {
   432  		return err
   433  	}
   434  //line page.ego:46
   435  	if _, err := fmt.Fprintf(w, "<br/>\n      "); err != nil {
   436  		return err
   437  	}
   438  //line page.ego:47
   439  	if _, err := fmt.Fprintf(w, "<strong>In Use:"); err != nil {
   440  		return err
   441  	}
   442  //line page.ego:47
   443  	if _, err := fmt.Fprintf(w, "</strong> "); err != nil {
   444  		return err
   445  	}
   446  //line page.ego:47
   447  	if _, err := fmt.Fprintf(w, "%v", comma(stats.inuse)); err != nil {
   448  		return err
   449  	}
   450  //line page.ego:47
   451  	if _, err := fmt.Fprintf(w, "<br/>\n      "); err != nil {
   452  		return err
   453  	}
   454  //line page.ego:48
   455  	if _, err := fmt.Fprintf(w, "<strong>Utilization:"); err != nil {
   456  		return err
   457  	}
   458  //line page.ego:48
   459  	if _, err := fmt.Fprintf(w, "</strong> "); err != nil {
   460  		return err
   461  	}
   462  //line page.ego:48
   463  	if _, err := fmt.Fprintf(w, "%v", fmt.Sprintf("%.2f%%", stats.utilization*100)); err != nil {
   464  		return err
   465  	}
   466  //line page.ego:48
   467  	if _, err := fmt.Fprintf(w, "<br/>\n    "); err != nil {
   468  		return err
   469  	}
   470  //line page.ego:49
   471  	if _, err := fmt.Fprintf(w, "</p>\n\n    "); err != nil {
   472  		return err
   473  	}
   474  //line page.ego:51
   475  	if (p.flags & branchPageFlag) != 0 {
   476  //line page.ego:52
   477  		if _, err := fmt.Fprintf(w, "\n      "); err != nil {
   478  			return err
   479  		}
   480  //line page.ego:52
   481  		if _, err := fmt.Fprintf(w, "<h3>Branch Elements ("); err != nil {
   482  			return err
   483  		}
   484  //line page.ego:52
   485  		if _, err := fmt.Fprintf(w, "%v", p.count); err != nil {
   486  			return err
   487  		}
   488  //line page.ego:52
   489  		if _, err := fmt.Fprintf(w, ")"); err != nil {
   490  			return err
   491  		}
   492  //line page.ego:52
   493  		if _, err := fmt.Fprintf(w, "</h3>\n      "); err != nil {
   494  			return err
   495  		}
   496  //line page.ego:53
   497  		if _, err := fmt.Fprintf(w, "<table>\n        "); err != nil {
   498  			return err
   499  		}
   500  //line page.ego:54
   501  		if _, err := fmt.Fprintf(w, "<thead>\n          "); err != nil {
   502  			return err
   503  		}
   504  //line page.ego:55
   505  		if _, err := fmt.Fprintf(w, "<tr>\n            "); err != nil {
   506  			return err
   507  		}
   508  //line page.ego:56
   509  		if _, err := fmt.Fprintf(w, "<th align=\"left\">Key"); err != nil {
   510  			return err
   511  		}
   512  //line page.ego:56
   513  		if _, err := fmt.Fprintf(w, "</th>\n            "); err != nil {
   514  			return err
   515  		}
   516  //line page.ego:57
   517  		if _, err := fmt.Fprintf(w, "<th align=\"left\">Page ID"); err != nil {
   518  			return err
   519  		}
   520  //line page.ego:57
   521  		if _, err := fmt.Fprintf(w, "</th>\n            "); err != nil {
   522  			return err
   523  		}
   524  //line page.ego:58
   525  		if _, err := fmt.Fprintf(w, "<th align=\"left\">Size (k)"); err != nil {
   526  			return err
   527  		}
   528  //line page.ego:58
   529  		if _, err := fmt.Fprintf(w, "</th>\n            "); err != nil {
   530  			return err
   531  		}
   532  //line page.ego:59
   533  		if _, err := fmt.Fprintf(w, "<th align=\"center\">%%Util"); err != nil {
   534  			return err
   535  		}
   536  //line page.ego:59
   537  		if _, err := fmt.Fprintf(w, "</th>\n          "); err != nil {
   538  			return err
   539  		}
   540  //line page.ego:60
   541  		if _, err := fmt.Fprintf(w, "</tr>\n        "); err != nil {
   542  			return err
   543  		}
   544  //line page.ego:61
   545  		if _, err := fmt.Fprintf(w, "</thead>\n        "); err != nil {
   546  			return err
   547  		}
   548  //line page.ego:62
   549  		if _, err := fmt.Fprintf(w, "<tbody>\n          "); err != nil {
   550  			return err
   551  		}
   552  //line page.ego:63
   553  		for i := uint16(0); i < p.count; i++ {
   554  //line page.ego:64
   555  			if _, err := fmt.Fprintf(w, "\n            "); err != nil {
   556  				return err
   557  			}
   558  //line page.ego:64
   559  			e := p.branchPageElement(i)
   560  //line page.ego:65
   561  			if _, err := fmt.Fprintf(w, "\n            "); err != nil {
   562  				return err
   563  			}
   564  //line page.ego:65
   565  			subpage := pageAt(tx, e.pgid)
   566  //line page.ego:66
   567  			if _, err := fmt.Fprintf(w, "\n            "); err != nil {
   568  				return err
   569  			}
   570  //line page.ego:66
   571  			substats := subpage.stats(pageSize)
   572  //line page.ego:67
   573  			if _, err := fmt.Fprintf(w, "\n            "); err != nil {
   574  				return err
   575  			}
   576  //line page.ego:67
   577  			if _, err := fmt.Fprintf(w, "<tr>\n              "); err != nil {
   578  				return err
   579  			}
   580  //line page.ego:68
   581  			if _, err := fmt.Fprintf(w, "<td>"); err != nil {
   582  				return err
   583  			}
   584  //line page.ego:68
   585  			if _, err := fmt.Fprintf(w, "%v", trunc(tostr(e.key()), 40)); err != nil {
   586  				return err
   587  			}
   588  //line page.ego:68
   589  			if _, err := fmt.Fprintf(w, "</td>\n              "); err != nil {
   590  				return err
   591  			}
   592  //line page.ego:69
   593  			if _, err := fmt.Fprintf(w, "<td>"); err != nil {
   594  				return err
   595  			}
   596  //line page.ego:69
   597  			if _, err := fmt.Fprintf(w, "<a href=\""); err != nil {
   598  				return err
   599  			}
   600  //line page.ego:69
   601  			if _, err := fmt.Fprintf(w, "%v", subpagelink(indexes, int(i))); err != nil {
   602  				return err
   603  			}
   604  //line page.ego:69
   605  			if _, err := fmt.Fprintf(w, "\">"); err != nil {
   606  				return err
   607  			}
   608  //line page.ego:69
   609  			if _, err := fmt.Fprintf(w, "%v", e.pgid); err != nil {
   610  				return err
   611  			}
   612  //line page.ego:69
   613  			if _, err := fmt.Fprintf(w, "</a>"); err != nil {
   614  				return err
   615  			}
   616  //line page.ego:69
   617  			if _, err := fmt.Fprintf(w, "</td>\n              "); err != nil {
   618  				return err
   619  			}
   620  //line page.ego:70
   621  			if _, err := fmt.Fprintf(w, "<td>"); err != nil {
   622  				return err
   623  			}
   624  //line page.ego:70
   625  			if _, err := fmt.Fprintf(w, "%v", len(e.key())); err != nil {
   626  				return err
   627  			}
   628  //line page.ego:70
   629  			if _, err := fmt.Fprintf(w, "</td>\n              "); err != nil {
   630  				return err
   631  			}
   632  //line page.ego:71
   633  			if _, err := fmt.Fprintf(w, "<td align=\"right\">"); err != nil {
   634  				return err
   635  			}
   636  //line page.ego:71
   637  			if _, err := fmt.Fprintf(w, "%v", fmt.Sprintf("%.2f%%", substats.utilization*100)); err != nil {
   638  				return err
   639  			}
   640  //line page.ego:71
   641  			if _, err := fmt.Fprintf(w, "</td>\n            "); err != nil {
   642  				return err
   643  			}
   644  //line page.ego:72
   645  			if _, err := fmt.Fprintf(w, "</tr>\n          "); err != nil {
   646  				return err
   647  			}
   648  //line page.ego:73
   649  		}
   650  //line page.ego:74
   651  		if _, err := fmt.Fprintf(w, "\n        "); err != nil {
   652  			return err
   653  		}
   654  //line page.ego:74
   655  		if _, err := fmt.Fprintf(w, "</tbody>\n      "); err != nil {
   656  			return err
   657  		}
   658  //line page.ego:75
   659  		if _, err := fmt.Fprintf(w, "</table>\n    \n    "); err != nil {
   660  			return err
   661  		}
   662  //line page.ego:77
   663  	} else if (p.flags & leafPageFlag) != 0 {
   664  //line page.ego:78
   665  		if _, err := fmt.Fprintf(w, "\n      "); err != nil {
   666  			return err
   667  		}
   668  //line page.ego:78
   669  		if _, err := fmt.Fprintf(w, "<h3>Leaf Elements ("); err != nil {
   670  			return err
   671  		}
   672  //line page.ego:78
   673  		if _, err := fmt.Fprintf(w, "%v", p.count); err != nil {
   674  			return err
   675  		}
   676  //line page.ego:78
   677  		if _, err := fmt.Fprintf(w, ")"); err != nil {
   678  			return err
   679  		}
   680  //line page.ego:78
   681  		if _, err := fmt.Fprintf(w, "</h3>\n      "); err != nil {
   682  			return err
   683  		}
   684  //line page.ego:79
   685  		if _, err := fmt.Fprintf(w, "<table>\n        "); err != nil {
   686  			return err
   687  		}
   688  //line page.ego:80
   689  		if _, err := fmt.Fprintf(w, "<thead>\n          "); err != nil {
   690  			return err
   691  		}
   692  //line page.ego:81
   693  		if _, err := fmt.Fprintf(w, "<tr>\n            "); err != nil {
   694  			return err
   695  		}
   696  //line page.ego:82
   697  		if _, err := fmt.Fprintf(w, "<th align=\"left\">Key"); err != nil {
   698  			return err
   699  		}
   700  //line page.ego:82
   701  		if _, err := fmt.Fprintf(w, "</th>\n            "); err != nil {
   702  			return err
   703  		}
   704  //line page.ego:83
   705  		if _, err := fmt.Fprintf(w, "<th align=\"left\">Value"); err != nil {
   706  			return err
   707  		}
   708  //line page.ego:83
   709  		if _, err := fmt.Fprintf(w, "</th>\n            "); err != nil {
   710  			return err
   711  		}
   712  //line page.ego:84
   713  		if _, err := fmt.Fprintf(w, "<th align=\"left\">Size (k/v)"); err != nil {
   714  			return err
   715  		}
   716  //line page.ego:84
   717  		if _, err := fmt.Fprintf(w, "</th>\n            "); err != nil {
   718  			return err
   719  		}
   720  //line page.ego:85
   721  		if _, err := fmt.Fprintf(w, "<th align=\"center\">%%Util"); err != nil {
   722  			return err
   723  		}
   724  //line page.ego:85
   725  		if _, err := fmt.Fprintf(w, "</th>\n          "); err != nil {
   726  			return err
   727  		}
   728  //line page.ego:86
   729  		if _, err := fmt.Fprintf(w, "</tr>\n        "); err != nil {
   730  			return err
   731  		}
   732  //line page.ego:87
   733  		if _, err := fmt.Fprintf(w, "</thead>\n        "); err != nil {
   734  			return err
   735  		}
   736  //line page.ego:88
   737  		if _, err := fmt.Fprintf(w, "<tbody>\n          "); err != nil {
   738  			return err
   739  		}
   740  //line page.ego:89
   741  		for i := uint16(0); i < p.count; i++ {
   742  //line page.ego:90
   743  			if _, err := fmt.Fprintf(w, "\n            "); err != nil {
   744  				return err
   745  			}
   746  //line page.ego:90
   747  			e := p.leafPageElement(i)
   748  //line page.ego:91
   749  			if _, err := fmt.Fprintf(w, "\n            "); err != nil {
   750  				return err
   751  			}
   752  //line page.ego:91
   753  			if (e.flags & bucketLeafFlag) != 0 {
   754  //line page.ego:92
   755  				if _, err := fmt.Fprintf(w, "\n              "); err != nil {
   756  					return err
   757  				}
   758  //line page.ego:92
   759  				b := ((*bucket)(unsafe.Pointer(&e.value()[0])))
   760  //line page.ego:93
   761  				if _, err := fmt.Fprintf(w, "\n              "); err != nil {
   762  					return err
   763  				}
   764  //line page.ego:94
   765  				util := "-"
   766  				if b.root != 0 {
   767  					substats := pageAt(tx, b.root).stats(pageSize)
   768  					util = fmt.Sprintf("%.2f%%", substats.utilization*100)
   769  				}
   770  
   771  //line page.ego:101
   772  				if _, err := fmt.Fprintf(w, "\n              "); err != nil {
   773  					return err
   774  				}
   775  //line page.ego:101
   776  				if _, err := fmt.Fprintf(w, "<tr>\n                "); err != nil {
   777  					return err
   778  				}
   779  //line page.ego:102
   780  				if _, err := fmt.Fprintf(w, "<td>"); err != nil {
   781  					return err
   782  				}
   783  //line page.ego:102
   784  				if _, err := fmt.Fprintf(w, "<strong>"); err != nil {
   785  					return err
   786  				}
   787  //line page.ego:102
   788  				if _, err := fmt.Fprintf(w, "%v", trunc(tostr(e.key()), 40)); err != nil {
   789  					return err
   790  				}
   791  //line page.ego:102
   792  				if _, err := fmt.Fprintf(w, "</strong>"); err != nil {
   793  					return err
   794  				}
   795  //line page.ego:102
   796  				if _, err := fmt.Fprintf(w, "</td>\n                "); err != nil {
   797  					return err
   798  				}
   799  //line page.ego:103
   800  				if _, err := fmt.Fprintf(w, "<td>\n                  &lt;bucket(root="); err != nil {
   801  					return err
   802  				}
   803  //line page.ego:104
   804  				if b.root != 0 {
   805  //line page.ego:104
   806  					if _, err := fmt.Fprintf(w, "<a href=\""); err != nil {
   807  						return err
   808  					}
   809  //line page.ego:104
   810  					if _, err := fmt.Fprintf(w, "%v", subpagelink(indexes, int(i))); err != nil {
   811  						return err
   812  					}
   813  //line page.ego:104
   814  					if _, err := fmt.Fprintf(w, "\">"); err != nil {
   815  						return err
   816  					}
   817  //line page.ego:104
   818  				}
   819  //line page.ego:104
   820  				if _, err := fmt.Fprintf(w, "%v", b.root); err != nil {
   821  					return err
   822  				}
   823  //line page.ego:104
   824  				if b.root != 0 {
   825  //line page.ego:104
   826  					if _, err := fmt.Fprintf(w, "</a>"); err != nil {
   827  						return err
   828  					}
   829  //line page.ego:104
   830  				}
   831  //line page.ego:104
   832  				if _, err := fmt.Fprintf(w, "; seq="); err != nil {
   833  					return err
   834  				}
   835  //line page.ego:104
   836  				if _, err := fmt.Fprintf(w, "%v", b.sequence); err != nil {
   837  					return err
   838  				}
   839  //line page.ego:104
   840  				if _, err := fmt.Fprintf(w, "&gt;\n                "); err != nil {
   841  					return err
   842  				}
   843  //line page.ego:105
   844  				if _, err := fmt.Fprintf(w, "</td>\n                "); err != nil {
   845  					return err
   846  				}
   847  //line page.ego:106
   848  				if _, err := fmt.Fprintf(w, "<td>"); err != nil {
   849  					return err
   850  				}
   851  //line page.ego:106
   852  				if _, err := fmt.Fprintf(w, "%v", len(e.key())); err != nil {
   853  					return err
   854  				}
   855  //line page.ego:106
   856  				if _, err := fmt.Fprintf(w, " / "); err != nil {
   857  					return err
   858  				}
   859  //line page.ego:106
   860  				if _, err := fmt.Fprintf(w, "%v", len(e.value())); err != nil {
   861  					return err
   862  				}
   863  //line page.ego:106
   864  				if _, err := fmt.Fprintf(w, "</td>\n                "); err != nil {
   865  					return err
   866  				}
   867  //line page.ego:107
   868  				if _, err := fmt.Fprintf(w, "<td align=\"right\">"); err != nil {
   869  					return err
   870  				}
   871  //line page.ego:107
   872  				if _, err := fmt.Fprintf(w, "%v", util); err != nil {
   873  					return err
   874  				}
   875  //line page.ego:107
   876  				if _, err := fmt.Fprintf(w, "</td>\n              "); err != nil {
   877  					return err
   878  				}
   879  //line page.ego:108
   880  				if _, err := fmt.Fprintf(w, "</tr>\n            "); err != nil {
   881  					return err
   882  				}
   883  //line page.ego:109
   884  			} else {
   885  //line page.ego:110
   886  				if _, err := fmt.Fprintf(w, "\n              "); err != nil {
   887  					return err
   888  				}
   889  //line page.ego:110
   890  				if _, err := fmt.Fprintf(w, "<tr>\n                "); err != nil {
   891  					return err
   892  				}
   893  //line page.ego:111
   894  				if _, err := fmt.Fprintf(w, "<td>"); err != nil {
   895  					return err
   896  				}
   897  //line page.ego:111
   898  				if _, err := fmt.Fprintf(w, "%v", trunc(tostr(e.key()), 40)); err != nil {
   899  					return err
   900  				}
   901  //line page.ego:111
   902  				if _, err := fmt.Fprintf(w, "</td>\n                "); err != nil {
   903  					return err
   904  				}
   905  //line page.ego:112
   906  				if _, err := fmt.Fprintf(w, "<td>"); err != nil {
   907  					return err
   908  				}
   909  //line page.ego:112
   910  				if _, err := fmt.Fprintf(w, "%v", trunc(tostr(e.value()), 40)); err != nil {
   911  					return err
   912  				}
   913  //line page.ego:112
   914  				if _, err := fmt.Fprintf(w, "</td>\n                "); err != nil {
   915  					return err
   916  				}
   917  //line page.ego:113
   918  				if _, err := fmt.Fprintf(w, "<td>"); err != nil {
   919  					return err
   920  				}
   921  //line page.ego:113
   922  				if _, err := fmt.Fprintf(w, "%v", len(e.key())); err != nil {
   923  					return err
   924  				}
   925  //line page.ego:113
   926  				if _, err := fmt.Fprintf(w, " / "); err != nil {
   927  					return err
   928  				}
   929  //line page.ego:113
   930  				if _, err := fmt.Fprintf(w, "%v", len(e.value())); err != nil {
   931  					return err
   932  				}
   933  //line page.ego:113
   934  				if _, err := fmt.Fprintf(w, "</td>\n                "); err != nil {
   935  					return err
   936  				}
   937  //line page.ego:114
   938  				if _, err := fmt.Fprintf(w, "<td>&nbsp;"); err != nil {
   939  					return err
   940  				}
   941  //line page.ego:114
   942  				if _, err := fmt.Fprintf(w, "</td>\n              "); err != nil {
   943  					return err
   944  				}
   945  //line page.ego:115
   946  				if _, err := fmt.Fprintf(w, "</tr>\n            "); err != nil {
   947  					return err
   948  				}
   949  //line page.ego:116
   950  			}
   951  //line page.ego:117
   952  			if _, err := fmt.Fprintf(w, "\n          "); err != nil {
   953  				return err
   954  			}
   955  //line page.ego:117
   956  		}
   957  //line page.ego:118
   958  		if _, err := fmt.Fprintf(w, "\n        "); err != nil {
   959  			return err
   960  		}
   961  //line page.ego:118
   962  		if _, err := fmt.Fprintf(w, "</tbody>\n      "); err != nil {
   963  			return err
   964  		}
   965  //line page.ego:119
   966  		if _, err := fmt.Fprintf(w, "</table>\n    "); err != nil {
   967  			return err
   968  		}
   969  //line page.ego:120
   970  	}
   971  //line page.ego:121
   972  	if _, err := fmt.Fprintf(w, "\n\n    "); err != nil {
   973  		return err
   974  	}
   975  //line page.ego:122
   976  	if showUsage {
   977  //line page.ego:123
   978  		if _, err := fmt.Fprintf(w, "\n      "); err != nil {
   979  			return err
   980  		}
   981  //line page.ego:124
   982  		mins, maxs, values := bucketize(histogram)
   983  		vmax, maxlen := 0, 20
   984  		for _, v := range values {
   985  			if v > vmax {
   986  				vmax = v
   987  			}
   988  		}
   989  
   990  //line page.ego:133
   991  		if _, err := fmt.Fprintf(w, "\n\n      "); err != nil {
   992  			return err
   993  		}
   994  //line page.ego:134
   995  		if _, err := fmt.Fprintf(w, "<h3>Bhojpur Cache - Page Usage Histogram"); err != nil {
   996  			return err
   997  		}
   998  //line page.ego:134
   999  		if _, err := fmt.Fprintf(w, "</h3>\n      "); err != nil {
  1000  			return err
  1001  		}
  1002  //line page.ego:135
  1003  		if _, err := fmt.Fprintf(w, "<table>\n        "); err != nil {
  1004  			return err
  1005  		}
  1006  //line page.ego:136
  1007  		if _, err := fmt.Fprintf(w, "<thead>\n          "); err != nil {
  1008  			return err
  1009  		}
  1010  //line page.ego:137
  1011  		if _, err := fmt.Fprintf(w, "<tr>\n            "); err != nil {
  1012  			return err
  1013  		}
  1014  //line page.ego:138
  1015  		if _, err := fmt.Fprintf(w, "<th align=\"left\">Usage (bytes)"); err != nil {
  1016  			return err
  1017  		}
  1018  //line page.ego:138
  1019  		if _, err := fmt.Fprintf(w, "</th>\n            "); err != nil {
  1020  			return err
  1021  		}
  1022  //line page.ego:139
  1023  		if _, err := fmt.Fprintf(w, "<th align=\"left\">Count"); err != nil {
  1024  			return err
  1025  		}
  1026  //line page.ego:139
  1027  		if _, err := fmt.Fprintf(w, "</th>\n            "); err != nil {
  1028  			return err
  1029  		}
  1030  //line page.ego:140
  1031  		if _, err := fmt.Fprintf(w, "<th>&nbsp;"); err != nil {
  1032  			return err
  1033  		}
  1034  //line page.ego:140
  1035  		if _, err := fmt.Fprintf(w, "</th>\n          "); err != nil {
  1036  			return err
  1037  		}
  1038  //line page.ego:141
  1039  		if _, err := fmt.Fprintf(w, "</tr>\n        "); err != nil {
  1040  			return err
  1041  		}
  1042  //line page.ego:142
  1043  		if _, err := fmt.Fprintf(w, "</thead>\n        "); err != nil {
  1044  			return err
  1045  		}
  1046  //line page.ego:143
  1047  		if _, err := fmt.Fprintf(w, "<tbody>\n          "); err != nil {
  1048  			return err
  1049  		}
  1050  //line page.ego:144
  1051  		for i := 0; i < len(values); i++ {
  1052  //line page.ego:145
  1053  			if _, err := fmt.Fprintf(w, "\n            "); err != nil {
  1054  				return err
  1055  			}
  1056  //line page.ego:145
  1057  			if _, err := fmt.Fprintf(w, "<tr>\n              "); err != nil {
  1058  				return err
  1059  			}
  1060  //line page.ego:146
  1061  			if _, err := fmt.Fprintf(w, "<td>"); err != nil {
  1062  				return err
  1063  			}
  1064  //line page.ego:146
  1065  			if _, err := fmt.Fprintf(w, "%v", mins[i]); err != nil {
  1066  				return err
  1067  			}
  1068  //line page.ego:146
  1069  			if _, err := fmt.Fprintf(w, " - "); err != nil {
  1070  				return err
  1071  			}
  1072  //line page.ego:146
  1073  			if _, err := fmt.Fprintf(w, "%v", maxs[i]); err != nil {
  1074  				return err
  1075  			}
  1076  //line page.ego:146
  1077  			if _, err := fmt.Fprintf(w, "</th>\n              "); err != nil {
  1078  				return err
  1079  			}
  1080  //line page.ego:147
  1081  			if _, err := fmt.Fprintf(w, "<td>"); err != nil {
  1082  				return err
  1083  			}
  1084  //line page.ego:147
  1085  			if _, err := fmt.Fprintf(w, "%v", values[i]); err != nil {
  1086  				return err
  1087  			}
  1088  //line page.ego:147
  1089  			if _, err := fmt.Fprintf(w, "</th>\n              "); err != nil {
  1090  				return err
  1091  			}
  1092  //line page.ego:148
  1093  			if _, err := fmt.Fprintf(w, "<td>"); err != nil {
  1094  				return err
  1095  			}
  1096  //line page.ego:148
  1097  			if _, err := fmt.Fprintf(w, "%v", strings.Repeat("█", int((float64(values[i])/float64(vmax))*float64(maxlen)))); err != nil {
  1098  				return err
  1099  			}
  1100  //line page.ego:148
  1101  			if _, err := fmt.Fprintf(w, "</td>\n            "); err != nil {
  1102  				return err
  1103  			}
  1104  //line page.ego:149
  1105  			if _, err := fmt.Fprintf(w, "</tr>\n          "); err != nil {
  1106  				return err
  1107  			}
  1108  //line page.ego:150
  1109  		}
  1110  //line page.ego:151
  1111  		if _, err := fmt.Fprintf(w, "\n        "); err != nil {
  1112  			return err
  1113  		}
  1114  //line page.ego:151
  1115  		if _, err := fmt.Fprintf(w, "</tbody>\n      "); err != nil {
  1116  			return err
  1117  		}
  1118  //line page.ego:152
  1119  		if _, err := fmt.Fprintf(w, "</table>\n    "); err != nil {
  1120  			return err
  1121  		}
  1122  //line page.ego:153
  1123  	} else {
  1124  //line page.ego:154
  1125  		if _, err := fmt.Fprintf(w, "\n      "); err != nil {
  1126  			return err
  1127  		}
  1128  //line page.ego:155
  1129  		u, q := r.URL, r.URL.Query()
  1130  		q.Set("usage", "true")
  1131  		u.RawQuery = q.Encode()
  1132  
  1133  //line page.ego:160
  1134  		if _, err := fmt.Fprintf(w, "\n\n      "); err != nil {
  1135  			return err
  1136  		}
  1137  //line page.ego:161
  1138  		if _, err := fmt.Fprintf(w, "<p>"); err != nil {
  1139  			return err
  1140  		}
  1141  //line page.ego:161
  1142  		if _, err := fmt.Fprintf(w, "<a href=\""); err != nil {
  1143  			return err
  1144  		}
  1145  //line page.ego:161
  1146  		if _, err := fmt.Fprintf(w, "%v", u.String()); err != nil {
  1147  			return err
  1148  		}
  1149  //line page.ego:161
  1150  		if _, err := fmt.Fprintf(w, "\">Show Page Usage"); err != nil {
  1151  			return err
  1152  		}
  1153  //line page.ego:161
  1154  		if _, err := fmt.Fprintf(w, "</a>"); err != nil {
  1155  			return err
  1156  		}
  1157  //line page.ego:161
  1158  		if _, err := fmt.Fprintf(w, "</p>\n    "); err != nil {
  1159  			return err
  1160  		}
  1161  //line page.ego:162
  1162  	}
  1163  //line page.ego:163
  1164  	if _, err := fmt.Fprintf(w, "\n\n    "); err != nil {
  1165  		return err
  1166  	}
  1167  //line page.ego:164
  1168  	if _, err := fmt.Fprintf(w, "<br/>"); err != nil {
  1169  		return err
  1170  	}
  1171  //line page.ego:164
  1172  	if _, err := fmt.Fprintf(w, "<br/>\n    "); err != nil {
  1173  		return err
  1174  	}
  1175  //line page.ego:165
  1176  	if _, err := fmt.Fprintf(w, "<form action=\"page\" method=\"GET\">\n      Go to page: "); err != nil {
  1177  		return err
  1178  	}
  1179  //line page.ego:166
  1180  	if _, err := fmt.Fprintf(w, "<input type=\"text\" name=\"id\"/>\n      "); err != nil {
  1181  		return err
  1182  	}
  1183  //line page.ego:167
  1184  	if _, err := fmt.Fprintf(w, "<button type=\"submit\">Go"); err != nil {
  1185  		return err
  1186  	}
  1187  //line page.ego:167
  1188  	if _, err := fmt.Fprintf(w, "</button>\n    "); err != nil {
  1189  		return err
  1190  	}
  1191  //line page.ego:168
  1192  	if _, err := fmt.Fprintf(w, "</form>\n  "); err != nil {
  1193  		return err
  1194  	}
  1195  //line page.ego:169
  1196  	if _, err := fmt.Fprintf(w, "<hr size=\"1px\"><center>Copyright &copy; 2018 by <a href=\"https://www.bhojpur-consulting.com\">Bhojpur Consulting Private Limited</a>, India. All rights reserved.</center></body>\n"); err != nil {
  1197  		return err
  1198  	}
  1199  //line page.ego:170
  1200  	if _, err := fmt.Fprintf(w, "</html>\n"); err != nil {
  1201  		return err
  1202  	}
  1203  	return nil
  1204  }