statusz 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -27,7 +27,7 @@ Usage
27
27
  ``` ruby
28
28
  # Somewhere in your deploy scripts, probably where you stage the files before you rsync them:
29
29
  require "statusz"
30
- Statusz.write_git_metadata("#{your_staging_root}/statusz.html")
30
+ Statusz.write_file("#{your_staging_root}/statusz.html")
31
31
  ```
32
32
 
33
33
  Now you can serve up the file from your webserver however you like. If you have a public folder, you can drop
@@ -40,28 +40,47 @@ get "/statusz" do
40
40
  end
41
41
  ```
42
42
 
43
- If you want statusz to write a plain text file instead of an html file, you can do that:
43
+ If you want statusz to write a plain text file or json instead of an html file, you can do that:
44
44
 
45
45
  ``` ruby
46
- Statusz.write_git_metadata("statusz.txt", :format => :text)
46
+ Statusz.write_file("statusz.txt", :format => :text)
47
47
  ```
48
48
 
49
49
  If you want statusz to only write some of the fields (skip `commit_search` to save space -- this field
50
50
  contains every sha in your repo, so it can be kind of large):
51
51
 
52
52
  ``` ruby
53
- Statusz.write_git_metadata("statusz.html", :fields => ["latest_sha", "date", "username"])
53
+ Statusz.write_file("statusz.html", :fields => ["latest commit", "date", "git user info"])
54
54
  ```
55
55
 
56
56
  Here are the possible fields -- by default, statusz will write them all:
57
57
 
58
- * `git_directory` -- The name of the directory at the git root
59
- * `latest_sha` -- The sha of the latest commit
60
- * `current_branch` -- The name of the branch, if any, from which the deploy is being run
61
- * `date` -- Timestamp
62
- * `username` -- The output of `whoami`
63
- * `git_user_info` -- The user name and email in git
64
- * `commit_search` -- A list of all commits. In the html version, it's a search box.
58
+ * `"git directory"` -- The name of the directory at the git root
59
+ * `"latest commit"` -- The sha of the latest commit
60
+ * `"current branch"` -- The name of the branch, if any, from which the deploy is being run
61
+ * `"date"` -- Timestamp
62
+ * `"current user on deploy host"` -- The output of `whoami`
63
+ * `"git user info"` -- The user name and email in git
64
+ * `"all commits"` -- A list of all commits. In the html version, it's a search box.
65
+
66
+ Finally, statusz can write out extra arbitrary fields if you want. Just attach a hash of objects that have
67
+ meaningful `to_s` representations:
68
+
69
+ ``` ruby
70
+ Statusz.write_file("statusz.html", :extra_fields => { "database host" => "dbslave3.example.com" })
71
+ ```
72
+
73
+ Options
74
+ -------
75
+
76
+ The only method provided by statusz is `Statusz.write_file(filename = "./statusz.html", options)`. Here is a
77
+ full list of possible `options`:
78
+
79
+ * `:format` -- one of `:html`, `:text`, `:json` (defaults to `:html`).
80
+ * `:fields` -- an array; some subset of `["git directory", "latest commit", "current branch", "date", "current
81
+ user on deploy host", "git user info", "all commits"]` (defaults to the whole thing).
82
+ * `:extra_fields` -- a hash of arbitrary keys and values that will be stringified. You can override values in
83
+ `:fields` if you wish.
65
84
 
66
85
  Screenshot
67
86
  ----------
@@ -72,4 +91,3 @@ TODO
72
91
  ----
73
92
 
74
93
  * Call via command-line script? Useful if doing a non-ruby deploy.
75
- * Other formats? (JSON?)
@@ -1,3 +1,3 @@
1
1
  module Statusz
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
data/lib/statusz.erb CHANGED
@@ -129,22 +129,24 @@
129
129
  <% end %>
130
130
  </table>
131
131
 
132
- <script type="text/javascript">
133
- allCommits = [<%= html_values["all commits"].map { |sha| %Q{"#{sha}"} }.join(",") %>]
134
- </script>
132
+ <% if html_values["all commits"] %>
133
+ <script type="text/javascript">
134
+ allCommits = [<%= html_values["all commits"].map { |sha| %Q{"#{sha}"} }.join(",") %>]
135
+ </script>
135
136
 
136
- <table id="commit_search">
137
- <tr>
138
- <td>search for a commit:</td>
139
- <td>
140
- <input name="sha" onkeyup="commitSearch(this, event);" size="40" type="text" value="" />
141
- </td>
142
- </tr>
143
- <tr>
144
- <td>matches:</td>
145
- <td id="search_results"></td>
146
- </tr>
147
- </table>
137
+ <table id="commit_search">
138
+ <tr>
139
+ <td>search for a commit:</td>
140
+ <td>
141
+ <input name="sha" onkeyup="commitSearch(this, event);" size="40" type="text" value="" />
142
+ </td>
143
+ </tr>
144
+ <tr>
145
+ <td>matches:</td>
146
+ <td id="search_results"></td>
147
+ </tr>
148
+ </table>
149
+ <% end %>
148
150
  </div>
149
151
  </body>
150
152
  </html>
data/lib/statusz.rb CHANGED
@@ -1,58 +1,50 @@
1
1
  require "cgi"
2
2
  require "erb"
3
3
  require "time"
4
+ require "json"
4
5
 
5
6
  module Statusz
6
- ALL_FIELDS = %w(git_directory latest_sha current_branch date username git_user_info commit_search)
7
-
8
7
  FIELD_TO_SCRAPING_PROC = {
9
- "git_directory" => Proc.new { `git rev-parse --show-toplevel`.strip.rpartition("/").last },
10
- "latest_sha" => Proc.new { `git log --pretty=%H -n 1`.strip },
11
- "current_branch" => Proc.new do
8
+ "git directory" => Proc.new { `git rev-parse --show-toplevel`.strip.rpartition("/").last },
9
+ "latest commit" => Proc.new { `git log --pretty=%H -n 1`.strip },
10
+ "current branch" => Proc.new do
12
11
  branch = `git symbolic-ref HEAD 2> /dev/null`.strip.sub(%r{^refs/heads/}, "")
13
12
  $?.to_i.zero? ? branch : "<no branch>"
14
13
  end,
15
14
  "date" => Proc.new { Time.now.strftime("%Y-%m-%d %H:%M:%S %z") },
16
- "username" => Proc.new { `whoami`.strip },
17
- "git_user_info" => Proc.new do
15
+ "current user on deploy host" => Proc.new { `whoami`.strip },
16
+ "git user info" => Proc.new do
18
17
  "#{`git config --get user.name`.strip} <#{`git config --get user.email`.strip}>"
19
18
  end,
20
- "commit_search" => Proc.new { `git log --pretty=%H`.strip }
21
- }
22
-
23
- FIELD_TO_HEADER_NAME = {
24
- "git_directory" => "git directory",
25
- "latest_sha" => "latest commit",
26
- "current_branch" => "current branch",
27
- "date" => "date",
28
- "username" => "current user on deploy host",
29
- "git_user_info" => "git user info",
30
- "commit_search" => "all commits"
19
+ "all commits" => Proc.new { `git log --pretty=%H`.strip }
31
20
  }
32
21
 
33
- def self.write_git_metadata(filename = "./statusz.html", options = {})
22
+ def self.write_file(filename = "./statusz.html", options = {})
34
23
  options[:format] ||= :html
35
- raise "Bad format: #{options[:format]}" unless [:html, :text].include? options[:format]
36
- options[:fields] ||= ALL_FIELDS
37
- bad_options = options[:fields] - ALL_FIELDS
24
+ raise "Bad format: #{options[:format]}" unless [:html, :text, :json].include? options[:format]
25
+ options[:fields] ||= FIELD_TO_SCRAPING_PROC.keys
26
+ bad_options = options[:fields] - FIELD_TO_SCRAPING_PROC.keys
38
27
  raise "Bad options: #{bad_options.inspect}" unless bad_options.empty?
28
+ extra_fields = options[:extra_fields] || {}
29
+ unless extra_fields.is_a? Hash
30
+ raise "Extra fields should be a hash, but #{extra_fields.inspect} (#{extra_fields.class}) was given."
31
+ end
39
32
 
40
33
  results = {}
41
- options[:fields].each { |field| results[field] = FIELD_TO_SCRAPING_PROC[field].call }
34
+ options[:fields].each do |field|
35
+ results[field] = FIELD_TO_SCRAPING_PROC[field].call
36
+ end
37
+ extra_fields.each { |field, value| results[field.to_s] = value.to_s }
42
38
 
43
39
  case options[:format]
44
40
  when :text
45
- sections = options[:fields].map do |field|
46
- "#{FIELD_TO_HEADER_NAME[field]}:\n#{results[field]}"
47
- end
48
- output = sections.join("\n\n")
41
+ output = results.map { |name, value| "#{name}:\n#{value}" }.join("\n\n")
42
+ when :json
43
+ output = results.to_json
49
44
  when :html
50
- html_values = options[:fields].reduce({}) do |hash, field|
51
- if field == "commit_search"
52
- pair = { FIELD_TO_HEADER_NAME[field] => FIELD_TO_SCRAPING_PROC[field].call.split("\n") }
53
- else
54
- pair = { FIELD_TO_HEADER_NAME[field] => CGI.escapeHTML(FIELD_TO_SCRAPING_PROC[field].call) }
55
- end
45
+ html_values = results.reduce({}) do |hash, field_and_value|
46
+ field, value = field_and_value
47
+ pair = (field == "all commits") ? { field => value.split("\n") } : { field => CGI.escapeHTML(value) }
56
48
  hash.merge pair
57
49
  end
58
50
  output = ERB.new(File.read(File.join(File.dirname(__FILE__), "statusz.erb"))).result(binding)
data/statusz.gemspec CHANGED
@@ -6,7 +6,7 @@ Gem::Specification.new do |gem|
6
6
  gem.email = ["cespare@gmail.com"]
7
7
  gem.description = "statusz is a gem that writes out git metadata at deploy time."
8
8
  gem.summary = "statusz is a gem that writes out git metadata at deploy time."
9
- gem.homepage = ""
9
+ gem.homepage = "https://github.com/ooyala/statusz"
10
10
 
11
11
  gem.files = `git ls-files`.split($\)
12
12
  gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: statusz
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -27,7 +27,7 @@ files:
27
27
  - lib/statusz.rb
28
28
  - lib/statusz/version.rb
29
29
  - statusz.gemspec
30
- homepage: ''
30
+ homepage: https://github.com/ooyala/statusz
31
31
  licenses: []
32
32
  post_install_message:
33
33
  rdoc_options: []