straces 0.0.2 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/lib/straces.rb +31 -10
  4. data/straces.gemspec +1 -1
  5. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 45aab18b826338ce96ffcdaee841f0711cbdca95e240d4a723d42d7eaec004fc
4
- data.tar.gz: afc9fad238fbc4d25bb8c2a1caabb464d19b94178b8a145596d72923d4b3a5b3
3
+ metadata.gz: 51245154ff7877023486583fd33719bbfd50a9ef490bea0a132ced5a162a5b61
4
+ data.tar.gz: 65bc6d33500b88d51a93b96a0d5011e8b8e5accd7004863e2b1251d32d6fa129
5
5
  SHA512:
6
- metadata.gz: 0ba4d24baf6521ee3f9bc0800b438afb78f15cdcc935a33e56db61ff65e2b588e85eba8ca8ccd538d18d2d55639b8bebe6d99e479619c06d3525fea7fc0d602f
7
- data.tar.gz: dfec0976a12e9a6434046b5492894135dd5be51b34d038df6bce469a81e62fd2b63cabc56e2c7b27f67ef8fe459995f8daa822d1b8e568828a0be8e677e9cbf1
6
+ metadata.gz: acf8587a2631bdd8eff809a1ed4b655718a403b722ec40d08d97f8b7e6e989a39b74154a217bcead9b51c1deac91aaf7df1b2fc8809cf2ad8518543c039d6165
7
+ data.tar.gz: b119b17004b3019bd434f6abd3900790ac66bf92f00336003d6d2f5627aa20ee76fe5283c510e5c8c87bfb1ddae45b0b0dd0e1bf3df9fff33526f8fe598521c5
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- straces (0.0.2)
4
+ straces (0.1.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/lib/straces.rb CHANGED
@@ -38,7 +38,22 @@ end
38
38
 
39
39
 
40
40
  def strace_parse(line)
41
- matcher = line.match /^(?<pid>\d*)\s?(?<time>\d\d:\d\d:\d\d\.?\d*)?\s?(?<call>[^\(]+)(?<middle>.*)\<(?<timing>\d+\.\d+)\>$/
41
+ return nil if line.end_with? "<unfinished ...>"
42
+ return nil if line.end_with? "resumed>) = ?"
43
+ return nil if line.end_with? "+++ exited with 0 +++"
44
+ # accept4(3,
45
+ return nil if line.end_with? ", "
46
+ matcher = line.match /^(?<pid>\d*)\s?(?<time>\d\d:\d\d:\d\d\.?\d*)?\s?(?<interrupted>\<\.\.\.)?(?<call>[^\(]+)(?<middle>.*)?\<(?<timing>\d+\.\d+)\>$/
47
+
48
+ #63796 11:18:12 clock_gettime(CLOCK_MONOTONIC, {tv_sec=27510, tv_nsec=693534954}) = 0 <0.000108>
49
+ #63796 11:18:12 <... clock_gettime resumed> {tv_sec=27510, tv_nsec=648632454}) = 0 <0.000356>
50
+
51
+ call, middle = if matcher[:interrupted]
52
+ syscall, rest = matcher[:call].split(" ")
53
+ [syscall, rest]
54
+ else
55
+ [matcher[:call], matcher[:middle]]
56
+ end
42
57
 
43
58
  # <detached ..>
44
59
  timing = Float matcher[:timing] rescue 0.0
@@ -46,8 +61,8 @@ def strace_parse(line)
46
61
  if matcher
47
62
  {
48
63
  pid: matcher[:pid],
49
- call: matcher[:call],
50
- middle: matcher[:middle],
64
+ call: call,
65
+ middle: middle,
51
66
  timing: timing
52
67
  }
53
68
  else
@@ -105,10 +120,10 @@ objs.each_with_index do |obj, i|
105
120
  obj[:time].round(4).to_s.ljust(6, "0"),
106
121
  obj[:timing].round(6).to_s.ljust(8, "0"),
107
122
  obj[:call].ljust(16),
108
- "#"*(obj[:normalized] == 0 ? 1 : obj[:normalized])
123
+ "#".green*(obj[:normalized] == 0 ? 1 : obj[:normalized])
109
124
  ].join " "
110
125
  else
111
- matches = filter.match /^(?<comparator>gt|lt|ge|le|eq)=(?<value>\d+\.?\d*)$/
126
+ matches = filter.match /^(?<comparator>at|gt|lt|ge|le|eq)=(?<value>\d+\.?\d*)$/
112
127
  comparator = matches && matches[:comparator]
113
128
  value = Float matches[:value] rescue nil
114
129
  if comparator.nil? || value.nil?
@@ -125,16 +140,22 @@ objs.each_with_index do |obj, i|
125
140
  :<
126
141
  when "lte"
127
142
  :<=
128
- when "eq"
143
+ when "eq","at"
129
144
  :==
130
145
  end
131
146
 
132
- if obj[:timing].send(ruby_comparator, value)
147
+ target = if comparator == "at"
148
+ obj[:time].round(4)
149
+ else
150
+ obj[:timing]
151
+ end
152
+
153
+ if target.send(ruby_comparator, value)
133
154
  terminal_width=Integer `tput cols`
134
155
  puts "-"*terminal_width
135
- puts objs[i-lines_before..i-1].map {|o| format(o)}
136
- puts format(objs[i]).red
137
- puts objs[i+1..i+lines_after].map {|o| format(o)}
156
+ puts objs[i-lines_before..i-1].map {|o| format(o) + "\n" + "#".green*(o[:normalized] == 0 ? 1 : o[:normalized])}
157
+ puts format(objs[i]).red + "\n" + "#".green*(objs[i][:normalized] == 0 ? 1 : objs[i][:normalized])
158
+ puts objs[i+1..i+lines_after].map {|o| format(o) + "\n" + "#".green*(o[:normalized] == 0 ? 1 : o[:normalized])}
138
159
 
139
160
  puts ""
140
161
  end
data/straces.gemspec CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "straces"
7
- spec.version = "0.0.2"
7
+ spec.version = "0.1.0"
8
8
  spec.authors = ["Matti Paksula"]
9
9
  spec.email = ["matti.paksula@iki.fi"]
10
10
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: straces
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matti Paksula