rshade 0.1.7 → 0.1.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/html/template.html.erb +72 -0
- data/lib/rshade.rb +3 -1
- data/lib/rshade/configuration.rb +4 -0
- data/lib/rshade/event_serializer.rb +13 -1
- data/lib/rshade/formatter/file.rb +28 -0
- data/lib/rshade/formatter/html.rb +31 -0
- data/lib/rshade/formatter/json.rb +2 -12
- data/lib/rshade/version.rb +1 -1
- metadata +5 -3
- data/lib/rshade/formatter/http.rb +0 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f10cfe61e925b1882ff42ea7580a2a6d72b5eadd4f18831a7e52813e22d1daea
|
4
|
+
data.tar.gz: cfe32fccff6bd61114bb86d0fd0d790d66c61ca41ce7bda0fc39e03af73ddb46
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 34222d8c0982a0af1ccbd37a2436f3dfa58d164ad4614a51db4c2074aff55f5adc873aa89008b173a065ec83975b3e67f9266437931efc1725baf50d04638bd5
|
7
|
+
data.tar.gz: 231f085edc963e287f1e8ae1b0843567ff5857cbfd50d80e240548e143148609c44d02d76204a6dd021765785c7ce347e6d7dcdeb49a388ff08197ce52074f45
|
data/Gemfile.lock
CHANGED
@@ -0,0 +1,72 @@
|
|
1
|
+
<!doctype html>
|
2
|
+
|
3
|
+
<html lang="en">
|
4
|
+
<head>
|
5
|
+
<meta charset="utf-8">
|
6
|
+
<title>RShade call trace viewer</title>
|
7
|
+
<meta name="description" content="The HTML5 Herald">
|
8
|
+
<meta name="author" content="me">
|
9
|
+
<style>
|
10
|
+
body {
|
11
|
+
overflow-x: scroll;
|
12
|
+
}
|
13
|
+
.stacktrace-line {
|
14
|
+
color: #1c1c1c;
|
15
|
+
font-family: monospace;
|
16
|
+
border: 1px solid hsla(210,50%, 50%, 1);
|
17
|
+
margin-bottom: 10px;
|
18
|
+
width: fit-content;
|
19
|
+
}
|
20
|
+
.method-line {
|
21
|
+
font-size: 1.2rem;
|
22
|
+
padding: 10px;
|
23
|
+
background: hsla(210,50%, 50%, 0.1);
|
24
|
+
}
|
25
|
+
|
26
|
+
.path-line {
|
27
|
+
padding: 10px;
|
28
|
+
font-size: 0.9rem;
|
29
|
+
background: hsla(110,50%, 50%, 0.1);
|
30
|
+
}
|
31
|
+
|
32
|
+
.vars-line {
|
33
|
+
font-size: 0.7rem;
|
34
|
+
padding: 10px;
|
35
|
+
background: hsla(60,50%, 50%, 0.1);
|
36
|
+
}
|
37
|
+
|
38
|
+
</style>
|
39
|
+
</head>
|
40
|
+
<body>
|
41
|
+
<div class="stacktrace"></div>
|
42
|
+
<script>
|
43
|
+
var data = <%=json %>;
|
44
|
+
var el = document.querySelector(".stacktrace");
|
45
|
+
for(i=0; i < data.length; i++) {
|
46
|
+
var value = data[i];
|
47
|
+
var newEl = document.createElement('div');
|
48
|
+
newEl.setAttribute("class", "stacktrace-line");
|
49
|
+
newEl.style.marginLeft = `${value.depth * 10}px`
|
50
|
+
|
51
|
+
line1 = document.createElement('div');
|
52
|
+
line1.setAttribute("class", "method-line");
|
53
|
+
line1.innerText = `${value.class}#${value.method_name}`;
|
54
|
+
|
55
|
+
var line2 = document.createElement('div');
|
56
|
+
line2.setAttribute("class", "path-line");
|
57
|
+
line2.innerText = `${value.class}#${value.full_path}`;
|
58
|
+
|
59
|
+
var line3 = document.createElement('div');
|
60
|
+
line3.setAttribute("class", "vars-line");
|
61
|
+
line3.innerText = JSON.stringify(value.vars)
|
62
|
+
|
63
|
+
newEl.appendChild(line1);
|
64
|
+
newEl.appendChild(line2);
|
65
|
+
newEl.appendChild(line3);
|
66
|
+
el.appendChild(newEl)
|
67
|
+
}
|
68
|
+
console.log(data);
|
69
|
+
</script>
|
70
|
+
|
71
|
+
</body>
|
72
|
+
</html>
|
data/lib/rshade.rb
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
require 'colorize'
|
2
|
+
require 'erb'
|
2
3
|
require 'rshade/configuration'
|
3
4
|
require 'rshade/base'
|
4
5
|
require 'rshade/event_serializer'
|
5
6
|
require 'rshade/filter/app_filter'
|
6
7
|
require 'rshade/formatter/string'
|
7
8
|
require 'rshade/formatter/json'
|
9
|
+
require 'rshade/formatter/file'
|
10
|
+
require 'rshade/formatter/html'
|
8
11
|
require 'rshade/formatter/stdout'
|
9
|
-
require 'rshade/formatter/http'
|
10
12
|
require 'rshade/event'
|
11
13
|
require 'rshade/event_store'
|
12
14
|
require 'rshade/trace'
|
data/lib/rshade/configuration.rb
CHANGED
@@ -2,7 +2,7 @@ require 'date'
|
|
2
2
|
module RShade
|
3
3
|
class EventSerializer < Base
|
4
4
|
attr_reader :evt, :level
|
5
|
-
SERIALIZE_CLASSES = [NilClass, TrueClass, FalseClass, Numeric, Time, Date, String, Symbol, Array
|
5
|
+
SERIALIZE_CLASSES = [NilClass, TrueClass, FalseClass, Numeric, Time, Date, String, Symbol, Array]
|
6
6
|
def initialize(evt, level)
|
7
7
|
@evt = evt
|
8
8
|
@level = level
|
@@ -18,6 +18,8 @@ module RShade
|
|
18
18
|
local_var = evt.binding.local_variable_get var
|
19
19
|
if SERIALIZE_CLASSES.any? { |klass| local_var.is_a?(klass) }
|
20
20
|
vars[var] = local_var
|
21
|
+
elsif local_var.is_a?(Hash)
|
22
|
+
vars[var] = shallow_copy_of_hash(local_var)
|
21
23
|
else
|
22
24
|
class_name = local_var.is_a?(Class) ? local_var.to_s : local_var.class.to_s
|
23
25
|
vars[var] = "FILTERED[#{class_name}]"
|
@@ -25,5 +27,15 @@ module RShade
|
|
25
27
|
end
|
26
28
|
vars
|
27
29
|
end
|
30
|
+
|
31
|
+
#TODO: work on more efficient way to serialize hash
|
32
|
+
def shallow_copy_of_hash(hash)
|
33
|
+
{}.tap do |new_hash|
|
34
|
+
hash.each do |k,v|
|
35
|
+
new_hash[k] = v.to_s
|
36
|
+
end
|
37
|
+
new_hash
|
38
|
+
end
|
39
|
+
end
|
28
40
|
end
|
29
41
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module RShade
|
2
|
+
module Formatter
|
3
|
+
class File < ::RShade::Base
|
4
|
+
attr_reader :formatter, :event_store
|
5
|
+
FILE_NAME = 'stacktrace.json'.freeze
|
6
|
+
|
7
|
+
def initialize(event_store, args={})
|
8
|
+
@event_store = event_store
|
9
|
+
@formatter = args.fetch(:format, Json)
|
10
|
+
end
|
11
|
+
|
12
|
+
def call
|
13
|
+
data = formatter.call(event_store)
|
14
|
+
if formatter == Json
|
15
|
+
write_to_file(JSON.pretty_generate(data))
|
16
|
+
else
|
17
|
+
write_to_file(data.to_s)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def write_to_file(data)
|
22
|
+
::File.open(::File.join(RShade.config.store_dir, FILE_NAME), "w+") do |f|
|
23
|
+
f.write data
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module RShade
|
2
|
+
module Formatter
|
3
|
+
class Html < ::RShade::Base
|
4
|
+
attr_reader :formatter, :event_store
|
5
|
+
FILE_NAME = 'stacktrace.html'.freeze
|
6
|
+
TEMPLATE = 'html/template.html.erb'
|
7
|
+
|
8
|
+
def initialize(event_store, args={})
|
9
|
+
@event_store = event_store
|
10
|
+
@formatter = args.fetch(:formatter, Json)
|
11
|
+
end
|
12
|
+
|
13
|
+
def call
|
14
|
+
data = formatter.call(event_store)
|
15
|
+
erb_template = ERB.new(template)
|
16
|
+
content = erb_template.result_with_hash({json: data.to_json})
|
17
|
+
write_to_file(content)
|
18
|
+
end
|
19
|
+
|
20
|
+
def write_to_file(data)
|
21
|
+
::File.open(::File.join(RShade.config.store_dir, FILE_NAME), "w+") do |f|
|
22
|
+
f.write data
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def template
|
27
|
+
@template ||=::File.read(::File.join(::RShade.config.root_dir, TEMPLATE))
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -2,7 +2,6 @@ module RShade
|
|
2
2
|
module Formatter
|
3
3
|
class Json < ::RShade::Base
|
4
4
|
attr_reader :event_store
|
5
|
-
FILE_NAME = 'stacktrace.json'.freeze
|
6
5
|
|
7
6
|
def initialize(event_store)
|
8
7
|
@event_store = event_store
|
@@ -17,8 +16,7 @@ module RShade
|
|
17
16
|
event_store.iterate do |node, depth|
|
18
17
|
arr << item(node)
|
19
18
|
end
|
20
|
-
|
21
|
-
arr
|
19
|
+
arr.sort_by { |item| item[:depth]}
|
22
20
|
end
|
23
21
|
|
24
22
|
def hierarchical
|
@@ -27,15 +25,7 @@ module RShade
|
|
27
25
|
ref = hash_iterate(hash, depth)
|
28
26
|
ref[:data] = item(node)
|
29
27
|
end
|
30
|
-
|
31
|
-
write_to_file(JSON.pretty_generate(hash))
|
32
|
-
hash
|
33
|
-
end
|
34
|
-
|
35
|
-
def write_to_file(data)
|
36
|
-
File.open(File.join(RShade.config.store_dir, FILE_NAME), "w+") do |f|
|
37
|
-
f.write data
|
38
|
-
end
|
28
|
+
sort_hash(hash)
|
39
29
|
end
|
40
30
|
|
41
31
|
def sort_hash(h)
|
data/lib/rshade/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rshade
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ivan Lopatin
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-06-
|
11
|
+
date: 2020-06-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colorize
|
@@ -83,6 +83,7 @@ files:
|
|
83
83
|
- Rakefile
|
84
84
|
- bin/console
|
85
85
|
- bin/setup
|
86
|
+
- html/template.html.erb
|
86
87
|
- lib/rshade.rb
|
87
88
|
- lib/rshade/base.rb
|
88
89
|
- lib/rshade/configuration.rb
|
@@ -90,7 +91,8 @@ files:
|
|
90
91
|
- lib/rshade/event_serializer.rb
|
91
92
|
- lib/rshade/event_store.rb
|
92
93
|
- lib/rshade/filter/app_filter.rb
|
93
|
-
- lib/rshade/formatter/
|
94
|
+
- lib/rshade/formatter/file.rb
|
95
|
+
- lib/rshade/formatter/html.rb
|
94
96
|
- lib/rshade/formatter/json.rb
|
95
97
|
- lib/rshade/formatter/stdout.rb
|
96
98
|
- lib/rshade/formatter/string.rb
|