From 8f9c5e1b8b36153e38b03ee8ece100f3e0b97b26 Mon Sep 17 00:00:00 2001 From: Cherrot Luo Date: Fri, 5 Sep 2014 19:34:27 +0800 Subject: [PATCH 01/13] Add debug switch to disable slow queries such as `keys`. add GET param `from` and `to` to determin range. and many many enhancement.... --- css/index.css | 7 ++- export.php | 6 +- flush.php | 6 +- includes/config.sample.inc.php | 3 +- index.php | 2 +- view.php | 107 +++++++++++++++++++-------------- 6 files changed, 78 insertions(+), 53 deletions(-) diff --git a/css/index.css b/css/index.css index 6fa6dda..01f1ab2 100644 --- a/css/index.css +++ b/css/index.css @@ -3,12 +3,15 @@ position: absolute; top: 0; bottom: 0; left: 0; -width: 24em; +width: 30em; height: 100%; padding-left: 1em; border-right: 1px solid #000; overflow: hidden; } +#filter_input_form { +width: 24em; +} #sidebar a, #sidebar a:visited { color: #000; @@ -108,7 +111,7 @@ display: inline; #frame { position: fixed; top: 0; -left: 25em; +left: 32em; right: 0; bottom: 0; padding-left: 1em; diff --git a/export.php b/export.php index 69c15c4..351c7da 100644 --- a/export.php +++ b/export.php @@ -7,7 +7,7 @@ // Export to redis-cli commands function export_redis($key) { - global $redis; + global $redis, $server; $type = $redis->type($key); @@ -123,7 +123,7 @@ function export_json($key) { if (isset($_GET['key'])) { echo json_encode(export_json($_GET['key'])); } else { // All keys - $keys = $redis->keys('*'); + $keys = $server['debug'] == true ? $redis->keys('*') : array(); $vals = array(); foreach ($keys as $key) { @@ -140,7 +140,7 @@ function export_json($key) { if (isset($_GET['key'])) { export_redis($_GET['key']); } else { // All keys - $keys = $redis->keys('*'); + $keys = $server['debug'] == true ? $redis->keys('*') : array(); foreach ($keys as $key) { export_redis($key); diff --git a/flush.php b/flush.php index 4e74489..427d5b0 100644 --- a/flush.php +++ b/flush.php @@ -8,6 +8,10 @@ require_once 'includes/common.inc.php'; +if ($server['debug'] == true) { + $redis->flushdb(); +else { + die ("Forbidden operation!"); +} -$redis->flushdb(); diff --git a/includes/config.sample.inc.php b/includes/config.sample.inc.php index 4fc63d7..a175137 100644 --- a/includes/config.sample.inc.php +++ b/includes/config.sample.inc.php @@ -8,7 +8,8 @@ 'host' => '127.0.0.1', 'port' => 6379, 'filter' => '*', - + //Slow queries such as `keys` are allowed only in debug mode. If you are operate an online redis, please set it to false. + 'debug' => true, // Optional Redis authentication. //'auth' => 'redispasswordhere' // Warning: The password is sent in plain-text to the Redis server. ), diff --git a/index.php b/index.php index b768ecb..657bc98 100644 --- a/index.php +++ b/index.php @@ -4,7 +4,7 @@ if($redis) { - $keys = $redis->keys($server['filter']); + $keys = $server['debug'] == true ? $redis->keys($server['filter']) : array(); sort($keys); diff --git a/view.php b/view.php index 8d86371..1c9f62c 100644 --- a/view.php +++ b/view.php @@ -18,23 +18,33 @@ die; } +$key = $_GET['key']; - -$type = $redis->type($_GET['key']); -$exists = $redis->exists($_GET['key']); +$type = $redis->type($key); +$exists = $redis->exists($key); $count_elements_page = isset($config['count_elements_page']) ? $config['count_elements_page'] : false; -$page_num_request = isset($_GET['page']) ? (int)$_GET['page'] : 1; -$page_num_request = $page_num_request === 0 ? 1 : $page_num_request; - +$page_num_request = isset($_GET['page']) && $_GET['page'] > 0 ? (int)$_GET['page'] : 1; + +//parameters `from` and `to` have higher priority than `page` +$susors = array('index', 'timestamp', 'datetime'); +$cursorType = isset ($_GET['cursor']) && in_array($_GET['cursor'], $cursors) ? $_GET['cursor'] : 'index'; +if (isset ($_GET['from'])) { + $start = $_GET['from']; + $end = isset ($_GET['to']) ? $_GET['to'] : $count_elements_page -1; + $page_num_request = $start / $count_elements_page +1; +} else { + $start = ($page_num_request-1) * $count_elements_page; + $end = $start + $count_elements_page -1; +} ?> -

+

- [R] - [X] - [E] + [R] + [X] + [E]

ttl($_GET['key']); +$ttl = $redis->ttl($key); try { - $encoding = $redis->object('encoding', $_GET['key']); + $encoding = $redis->object('encoding', $key); } catch (Exception $e) { $encoding = null; } switch ($type) { - case 'string': - $value = $redis->get($_GET['key']); +case 'string': + $value = $redis->get($key); $size = strlen($value); break; - case 'hash': - $values = $redis->hGetAll($_GET['key']); +case 'hash': + $values = $redis->hGetAll($key); $size = count($values); break; case 'list': - $size = $redis->lLen($_GET['key']); + $size = $redis->lLen($key); + $values = $redis->lRange($key, $start, $end); break; case 'set': - $values = $redis->sMembers($_GET['key']); + $values = $redis->sMembers($key); $size = count($values); break; case 'zset': - $values = $redis->zRange($_GET['key'], 0, -1); - $size = count($values); + $values = $redis->zRange($key, $start, $end, 'WITHSCORES'); + $size = $redis->zCard($key); break; } - -if (isset($values) && ($count_elements_page !== false)) { - $values = array_slice($values, $count_elements_page * ($page_num_request - 1), $count_elements_page,true); -} + ?> @@ -134,13 +142,19 @@ // String -if ($type == 'string') { ?> +if ($type == 'string') { + $value_unsrlzd = @unserialize($value); + if ($value_unsrlzd != null) { // unserialize success! + $value_export = var_export($value_unsrlzd, true); + $value = $value_export; + } +?>
- [E] + [E]
- [X] + [X]
@@ -154,7 +168,13 @@ - $value) { ?> + $value) { + $value_unsrlzd = @unserialize($value); + if ($value_unsrlzd != null) { // unserialize success! + $value_export = var_export($value_unsrlzd, true); + $value = $value_export; + } +?> > $count_elements_page)) { - $start = 0; - $end = $size; - } else { - $start = $count_elements_page * ($page_num_request - 1); - $end = min($start + $count_elements_page, $size); - } - - for ($i = $start; $i < $end; ++$i) { - $value = $redis->lIndex($_GET['key'], $i); +foreach ($values as $i => $value) { ?> > @@ -221,13 +232,19 @@
Key
Value
 
 
[E]
@@ -172,21 +192,12 @@
Index
Value
 
 
- [E] + [E]
- [X] + [X]
-zScore($_GET['key'], $value); - $display_value = $redis->exists($value) ? ''.nl2br(format_html($value, $server['charset'])).'' : nl2br(format_html($value, $server['charset'])); +exists($value) ? ''.nl2br(format_html($value, $server['charset'])).'' : nl2br(format_html($value, $server['charset'])); ?> > From a539e9a15fd71f11b9d34e01548e0a80ad87575b Mon Sep 17 00:00:00 2001 From: Cherrot Luo Date: Fri, 5 Sep 2014 20:50:47 +0800 Subject: [PATCH 02/13] Add support for zRangeByScore --- view.php | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/view.php b/view.php index 1c9f62c..995b8f3 100644 --- a/view.php +++ b/view.php @@ -27,12 +27,18 @@ $page_num_request = isset($_GET['page']) && $_GET['page'] > 0 ? (int)$_GET['page'] : 1; //parameters `from` and `to` have higher priority than `page` -$susors = array('index', 'timestamp', 'datetime'); +// +$cursors = array('index', 'score', 'datetime'); $cursorType = isset ($_GET['cursor']) && in_array($_GET['cursor'], $cursors) ? $_GET['cursor'] : 'index'; if (isset ($_GET['from'])) { - $start = $_GET['from']; - $end = isset ($_GET['to']) ? $_GET['to'] : $count_elements_page -1; - $page_num_request = $start / $count_elements_page +1; + if ($cursorType == 'datetime') { + $start = strtotime($_GET['from']); + $end = isset ($_GET['to']) ? strtotime($_GET['to']) : '+inf'; + $page_num_request = $start / $count_elements_page +1; + } else { + $start = $_GET['from']; + $end = isset ($_GET['to']) ? $_GET['to'] : $count_elements_page -1; + } } else { $start = ($page_num_request-1) * $count_elements_page; $end = $start + $count_elements_page -1; @@ -92,8 +98,14 @@ break; case 'zset': - $values = $redis->zRange($key, $start, $end, 'WITHSCORES'); - $size = $redis->zCard($key); + if ($cursorType == 'index') { + $values = $redis->zRange($key, $start, $end, 'WITHSCORES'); + } else { + $values = $redis->zRangeByScore($key, $start, $end, + array('WITHSCORES' =>true,'LIMIT'=>array(0, $count_elements_page)) + ); + } + $size = $redis->zCard($key); break; } @@ -103,7 +115,7 @@ - + @@ -176,9 +188,9 @@ } ?> > @@ -216,9 +228,9 @@ $display_value = $redis->exists($value) ? ''.nl2br(format_html($value, $server['charset'])).'' : nl2br(format_html($value, $server['charset'])); ?> > @@ -254,7 +266,7 @@
Score
Value
 
 
- [E] - [X] + [E] + [X]
Type:
TTL:
[E]
TTL:
[E]
Encoding:
- [E] + [E]
- [X] + [X]
- [E] + [E]
- [X] + [X]

- Add another value + Add another value

Date: Fri, 5 Sep 2014 22:01:48 +0800 Subject: [PATCH 03/13] update css --- css/index.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/css/index.css b/css/index.css index 01f1ab2..00ed86c 100644 --- a/css/index.css +++ b/css/index.css @@ -3,7 +3,7 @@ position: absolute; top: 0; bottom: 0; left: 0; -width: 30em; +width: 24em; height: 100%; padding-left: 1em; border-right: 1px solid #000; @@ -111,7 +111,7 @@ display: inline; #frame { position: fixed; top: 0; -left: 32em; +left: 25em; right: 0; bottom: 0; padding-left: 1em; From f6aa7e25d3fc52bce86307ea339dea45af4d3efc Mon Sep 17 00:00:00 2001 From: Cherrot Luo Date: Fri, 5 Sep 2014 22:31:46 +0800 Subject: [PATCH 04/13] add return count --- view.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/view.php b/view.php index 995b8f3..71970d3 100644 --- a/view.php +++ b/view.php @@ -90,6 +90,7 @@ case 'list': $size = $redis->lLen($key); $values = $redis->lRange($key, $start, $end); + $count = count($values); break; case 'set': @@ -98,6 +99,7 @@ break; case 'zset': + $size = $redis->zCard($key); if ($cursorType == 'index') { $values = $redis->zRange($key, $start, $end, 'WITHSCORES'); } else { @@ -105,7 +107,7 @@ array('WITHSCORES' =>true,'LIMIT'=>array(0, $count_elements_page)) ); } - $size = $redis->zCard($key); + $count = count($values); break; } @@ -122,6 +124,9 @@
Size:
+ +
Returns:
+ From 4b9b621371aa34dda032844536f16b31cd11cf5b Mon Sep 17 00:00:00 2001 From: "U-CHERROT-WIN7\\Administrator" Date: Sat, 6 Sep 2014 02:35:50 +0800 Subject: [PATCH 05/13] zRange withscore's returning format updated in higher PRedis version --- view.php | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/view.php b/view.php index 995b8f3..fbd4cd6 100644 --- a/view.php +++ b/view.php @@ -90,6 +90,7 @@ case 'list': $size = $redis->lLen($key); $values = $redis->lRange($key, $start, $end); + $count = count($values); break; case 'set': @@ -98,6 +99,7 @@ break; case 'zset': + $size = $redis->zCard($key); if ($cursorType == 'index') { $values = $redis->zRange($key, $start, $end, 'WITHSCORES'); } else { @@ -105,7 +107,7 @@ array('WITHSCORES' =>true,'LIMIT'=>array(0, $count_elements_page)) ); } - $size = $redis->zCard($key); + $count = count($values); break; } @@ -122,6 +124,9 @@
Size:
+ +
Returns:
+ @@ -148,7 +153,7 @@ } -if (isset($pagination)) { +if (isset($pagination) && strlen($pagination) < 2048) { echo $pagination; } @@ -244,13 +249,10 @@ - $score) { $value_unsrlzd = @unserialize($value); if ($value_unsrlzd != null){ // unserialize success! - $value_export = var_export($value_unsrlzd, true); - } else { - $value_export = $value; + $value = var_export($value_unsrlzd, true); } $display_value = $redis->exists($value) ? ''.nl2br(format_html($value, $server['charset'])).'' : nl2br(format_html($value, $server['charset'])); ?> From ce1a365321d8a3b3d3c538d1dcfb431298ae60c8 Mon Sep 17 00:00:00 2001 From: Cherrot Luo Date: Sun, 7 Sep 2014 17:20:17 +0800 Subject: [PATCH 06/13] fix bugs in filter --- index.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/index.php b/index.php index 657bc98..15fa10b 100644 --- a/index.php +++ b/index.php @@ -4,7 +4,9 @@ if($redis) { - $keys = $server['debug'] == true ? $redis->keys($server['filter']) : array(); + $keys = $server['debug'] == true + ? $redis->keys($server['filter']) + : array(substr($server['filter'], 0, -1)); sort($keys); @@ -17,7 +19,9 @@ continue; } - $key = explode($server['seperator'], $key); + $key = $server['debug'] == true + ? explode($server['seperator'], $key) + : array($key); // $d will be a reference to the current namespace. $d = &$namespaces; From 58be978fe2c81af96bc22452e98c704b0799595c Mon Sep 17 00:00:00 2001 From: Cherrot Luo Date: Tue, 9 Sep 2014 10:55:43 +0800 Subject: [PATCH 07/13] update --- index.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/index.php b/index.php index 15fa10b..9f6e4a1 100644 --- a/index.php +++ b/index.php @@ -6,7 +6,8 @@ $keys = $server['debug'] == true ? $redis->keys($server['filter']) - : array(substr($server['filter'], 0, -1)); + //: array(substr($server['filter'], 0, -1)); + : array(); sort($keys); From 60f160e406739eda485c20ccd7123d0d6d8a6abf Mon Sep 17 00:00:00 2001 From: Cherrot Luo Date: Tue, 9 Sep 2014 16:57:12 +0800 Subject: [PATCH 08/13] fix bug in filter and view --- index.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/index.php b/index.php index 9f6e4a1..28b85ab 100644 --- a/index.php +++ b/index.php @@ -4,10 +4,13 @@ if($redis) { - $keys = $server['debug'] == true - ? $redis->keys($server['filter']) - //: array(substr($server['filter'], 0, -1)); - : array(); + if ($server['debug'] == true) { + $keys = $redis->keys($server['filter']); + } else { + $keys = strlen($server['filter']) > 1 + ? array(substr($server['filter'], 0, -1)) + : array(); + } sort($keys); From 575f7352eae25d52d1eaf1a0fe7bba170df346cd Mon Sep 17 00:00:00 2001 From: Cherrot Luo Date: Tue, 9 Sep 2014 17:42:43 +0800 Subject: [PATCH 09/13] remove urlencode, I do not think it useful --- index.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.php b/index.php index 28b85ab..6c0ce8e 100644 --- a/index.php +++ b/index.php @@ -91,7 +91,7 @@ function print_namespace($item, $name, $fullkey, $islast) { ?> > - () + ()
  •  () - [X] + [X]
      Date: Tue, 9 Sep 2014 18:36:41 +0800 Subject: [PATCH 10/13] remove all urlencode --- delete.php | 2 +- edit.php | 2 +- rename.php | 2 +- ttl.php | 2 +- view.php | 34 +++++++++++++++++----------------- 5 files changed, 21 insertions(+), 21 deletions(-) diff --git a/delete.php b/delete.php index ec7e20e..66798f7 100644 --- a/delete.php +++ b/delete.php @@ -46,7 +46,7 @@ } - die('?view&s='.$server['id'].'&key='.urlencode($_GET['key'])); + die('?view&s='.$server['id'].'&key='.$_GET['key']); } diff --git a/edit.php b/edit.php index 357a368..9ecd5cf 100644 --- a/edit.php +++ b/edit.php @@ -88,7 +88,7 @@ ?> expire($_POST['key'], $_POST['ttl']); } - header('Location: view.php?key='.urlencode($_POST['key'])); + header('Location: view.php?key='.$_POST['key']); die; } diff --git a/view.php b/view.php index fbd4cd6..78b85bf 100644 --- a/view.php +++ b/view.php @@ -48,9 +48,9 @@ ?>

      - [R] - [X] - [E] + [R] + [X] + [E]

  • - + @@ -169,9 +169,9 @@
    Score
    Value
     
     
    Type:
    TTL:
    [E]
    TTL:
    [E]
    Encoding:
    - [E] + [E]
    - [X] + [X]
    @@ -193,9 +193,9 @@ } ?> >
    - [E] + [E]
    - [X] + [X]
    @@ -212,9 +212,9 @@ foreach ($values as $i => $value) { ?> >
    - [E] + [E]
    - [X] + [X]
    @@ -230,12 +230,12 @@
    Value
     
     
    exists($value) ? ''.nl2br(format_html($value, $server['charset'])).'' : nl2br(format_html($value, $server['charset'])); + $display_value = $redis->exists($value) ? ''.nl2br(format_html($value, $server['charset'])).'' : nl2br(format_html($value, $server['charset'])); ?> >
    - [E] + [E]
    - [X] + [X]
    @@ -254,11 +254,11 @@ if ($value_unsrlzd != null){ // unserialize success! $value = var_export($value_unsrlzd, true); } - $display_value = $redis->exists($value) ? ''.nl2br(format_html($value, $server['charset'])).'' : nl2br(format_html($value, $server['charset'])); + $display_value = $redis->exists($value) ? ''.nl2br(format_html($value, $server['charset'])).'' : nl2br(format_html($value, $server['charset'])); ?> >
    - [E] - [X] + [E] + [X]
    @@ -268,7 +268,7 @@

    - Add another value + Add another value

    Date: Tue, 23 Sep 2014 18:45:22 +0800 Subject: [PATCH 11/13] Add usage tips on `overview.php`, add a column to parse score as date format in zSet view --- .gitignore | 2 ++ overview.php | 8 ++++++-- view.php | 5 +++-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index daf3eea..5c46148 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ config.inc.php *.phar vendor +tags +cscope* diff --git a/overview.php b/overview.php index caeb2bb..105b9fa 100644 --- a/overview.php +++ b/overview.php @@ -1,10 +1,14 @@ +
    Tips: +

    You can use URL parameter `from`& `to` to custermize page range in case of List and zSet.
    +We even support zRangeByScore now,Just assing URL parameter `cursor=score&from=123&to=456`.
    +If you specify `cursor` to 'datetime', `from` & `to` could even assigned as datetime format.

    - - + $server) { diff --git a/view.php b/view.php index 78b85bf..4c42d47 100644 --- a/view.php +++ b/view.php @@ -247,16 +247,17 @@ else if ($type == 'zset') { ?> - + $score) { + $score_parsed = $score > 1300000000 ? @date('Y-m-d H:i:s', (int)$score) : 0; $value_unsrlzd = @unserialize($value); if ($value_unsrlzd != null){ // unserialize success! $value = var_export($value_unsrlzd, true); } $display_value = $redis->exists($value) ? ''.nl2br(format_html($value, $server['charset'])).'' : nl2br(format_html($value, $server['charset'])); ?> - >> From 9878f020acddc7e22765ccf7e0137dc443e0f866 Mon Sep 17 00:00:00 2001 From: Cherrot Luo Date: Tue, 23 Sep 2014 20:54:32 +0800 Subject: [PATCH 12/13] remmove maxlength limit --- edit.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/edit.php b/edit.php index 9ecd5cf..fbda5e4 100644 --- a/edit.php +++ b/edit.php @@ -149,12 +149,12 @@

    -> +>

    -> +>

    From 37469cbd66b11ea6a0e25707fb5044bc78a39464 Mon Sep 17 00:00:00 2001 From: Cherrot Luo Date: Thu, 25 Sep 2014 13:02:19 +0800 Subject: [PATCH 13/13] Fix bugs in deleting tree --- delete.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/delete.php b/delete.php index 66798f7..63b437c 100644 --- a/delete.php +++ b/delete.php @@ -57,7 +57,7 @@ $redis->del($key); } - die('?&s='.$server['id']); + die(substr($_SERVER['HTTP_REFERER'], strpos($_SERVER['HTTP_REFERER'], '?') )); } ?>

    Score
    Value
     
     
    Score
    Value
    Parse score as date
     
     
    +
    [E] [X]