solarium 0.1.0 → 0.2.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.
- checksums.yaml +4 -4
- data/bin/solarium-chart +51 -0
- data/bin/solarium-collect +1 -1
- data/lib/solarium/database.rb +10 -0
- data/lib/solarium/dygraph/dygraph.rb +39 -0
- data/lib/solarium/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f51387872e85c4048dbb50439732faad9a04dfc3
|
4
|
+
data.tar.gz: 4ba2ef0da46fcb385a3588752f0ac0b7775fd720
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a7145c67e114dceafb1503b5c96d286e63b242533eb96b692a5a23d25853ccaecf259f87fab6ab46e09d7948536cbd55bec25ea03e3978775b731f38e343fb8a
|
7
|
+
data.tar.gz: b99846c1c02f687f0688d94bb2cbdba63da8775e2925a1379b12abecc128ee40834a0cfbe66aa7d9509316d26b98e863d5d67fa00c29ed616c8b6e3fda8e70ab
|
data/bin/solarium-chart
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Solarium (C) 2017 Peter "SaberUK" Powell <petpow@saberuk.com>
|
3
|
+
|
4
|
+
APP_ROOT = File.dirname __dir__
|
5
|
+
if Dir.exist? "#{APP_ROOT}/.git"
|
6
|
+
$LOAD_PATH.unshift "#{APP_ROOT}/lib"
|
7
|
+
end
|
8
|
+
|
9
|
+
%w(solarium trollop).each do |lib|
|
10
|
+
begin
|
11
|
+
require lib
|
12
|
+
rescue ::Exception => error
|
13
|
+
STDERR.puts "A fatal error was encountered whilst loading #{lib}:"
|
14
|
+
STDERR.puts "#{error.class}: #{error.message}"
|
15
|
+
exit 1
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
APP_NAME = File.basename $PROGRAM_NAME
|
20
|
+
options = Trollop::options do
|
21
|
+
banner "Usage: #{APP_NAME} [OPTIONS]"
|
22
|
+
version Solarium::VERSION
|
23
|
+
|
24
|
+
opt :chart_format, 'The output format to use for chart generation', default: 'dygraph'
|
25
|
+
opt :database_url, 'The URL for connecting to the SQL database', default: 'sqlite://solarium.sq3'
|
26
|
+
opt :include_days, 'The number of days to include in the chart', default: 30
|
27
|
+
opt :output_dir, 'The directory to write generated charts to', default: "#{Dir.pwd}/solarium-chart"
|
28
|
+
end
|
29
|
+
|
30
|
+
Trollop::die :database_url, 'is not a valid URL' unless options[:database_url] =~ /^#{URI.regexp}$/
|
31
|
+
Trollop::die :include_days, 'is not a valid day count' unless options[:include_days] > 0
|
32
|
+
|
33
|
+
begin
|
34
|
+
name = options[:chart_format].downcase
|
35
|
+
require "solarium/#{name}/#{name}"
|
36
|
+
rescue ::Exception => error
|
37
|
+
STDERR.puts "A fatal error was encountered whilst loading the #{name} module:"
|
38
|
+
STDERR.puts "#{error.class}: #{error.message}"
|
39
|
+
exit 1
|
40
|
+
end
|
41
|
+
|
42
|
+
database = Solarium::Database.new options[:database_url]
|
43
|
+
unless database.error.nil?
|
44
|
+
STDERR.puts "A fatal error was encountered whilst connecting to the database:"
|
45
|
+
STDERR.puts "#{database.error.class}: #{database.error.message}"
|
46
|
+
STDERR.puts database.error.backtrace
|
47
|
+
exit 1
|
48
|
+
end
|
49
|
+
|
50
|
+
data = database.select_days options[:include_days]
|
51
|
+
Solarium::Chart.generate options[:output_dir], data
|
data/bin/solarium-collect
CHANGED
@@ -21,7 +21,7 @@ options = Trollop::options do
|
|
21
21
|
banner "Usage: #{APP_NAME} [OPTIONS]"
|
22
22
|
version Solarium::VERSION
|
23
23
|
|
24
|
-
opt :database_url, 'The URL for connecting to the SQL database', default: 'sqlite://
|
24
|
+
opt :database_url, 'The URL for connecting to the SQL database', default: 'sqlite://solarium.sq3'
|
25
25
|
opt :envoy_url, 'The URL of the Envoy web interface', default: 'http://192.168.1.200/'
|
26
26
|
opt :print_stats, 'Print generation statistics after collection', default: false
|
27
27
|
end
|
data/lib/solarium/database.rb
CHANGED
@@ -31,6 +31,16 @@ module Solarium
|
|
31
31
|
@connection[:solarium].insert row
|
32
32
|
end
|
33
33
|
|
34
|
+
# Public: Reads the specified number of days worth of data from the database.
|
35
|
+
#
|
36
|
+
# days - The number of days worth of data to read.
|
37
|
+
def select_days days
|
38
|
+
data = @connection[:solarium].where do
|
39
|
+
time > DateTime.now - days
|
40
|
+
end
|
41
|
+
return data.to_a
|
42
|
+
end
|
43
|
+
|
34
44
|
# Internal: Connects to the database and creates the table if required.
|
35
45
|
#
|
36
46
|
# url - The URL for connecting to the SQL database.
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# Solarium (C) 2017 Peter "SaberUK" Powell <petpow@saberuk.com>
|
2
|
+
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
module Solarium
|
6
|
+
|
7
|
+
# Public: Generates charts using the Dygraph API
|
8
|
+
module Chart
|
9
|
+
|
10
|
+
# Public: Generates charts and writes them to the output directory.
|
11
|
+
#
|
12
|
+
# output_dir - The directory to write the generated charts to.
|
13
|
+
# data - The data to use when generating the chart.
|
14
|
+
def self.generate output_dir, data
|
15
|
+
FileUtils.mkdir_p output_dir unless Dir.exist? output_dir
|
16
|
+
FileUtils.cp "#{__dir__}/index.html", output_dir
|
17
|
+
|
18
|
+
self.generate_csv "#{output_dir}/generation.csv", data, 'Watts', :now
|
19
|
+
self.generate_csv "#{output_dir}/today.csv", data, 'Watt Hours', :today
|
20
|
+
self.generate_csv "#{output_dir}/week.csv", data, 'Watt Hours', :week
|
21
|
+
self.generate_csv "#{output_dir}/lifetime.csv", data, 'Watt Hours', :lifetime
|
22
|
+
end
|
23
|
+
|
24
|
+
# Internal: Generates a CSV table for a single chart.
|
25
|
+
#
|
26
|
+
# file - The file to write the CSV table to.
|
27
|
+
# data - The data to use when generating the CSV table.
|
28
|
+
# title - The title to use for this table.
|
29
|
+
# column - The column of data to use for this CSV table.
|
30
|
+
def self.generate_csv file, data, title, column
|
31
|
+
File.open file, 'w' do |fh|
|
32
|
+
fh.puts "Time, #{title}"
|
33
|
+
data.each do |entry|
|
34
|
+
fh.puts "#{entry[:time]}, #{entry[column]}"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/lib/solarium/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: solarium
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter "SaberUK" Powell
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-10-
|
11
|
+
date: 2017-10-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -112,10 +112,12 @@ executables:
|
|
112
112
|
extensions: []
|
113
113
|
extra_rdoc_files: []
|
114
114
|
files:
|
115
|
+
- bin/solarium-chart
|
115
116
|
- bin/solarium-collect
|
116
117
|
- lib/solarium.rb
|
117
118
|
- lib/solarium/collector.rb
|
118
119
|
- lib/solarium/database.rb
|
120
|
+
- lib/solarium/dygraph/dygraph.rb
|
119
121
|
- lib/solarium/version.rb
|
120
122
|
homepage: https://github.com/SaberUK/solarium
|
121
123
|
licenses:
|