freezer_burn 0.0.6

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c3074df8767d023fdd3755f329e142cb8593e9ce
4
+ data.tar.gz: 486cb77b297dbff806fc7b0b5b2c69a8258a5a58
5
+ SHA512:
6
+ metadata.gz: f27e8fb210bb5d08332182a6e0b8924079bf39549232baa77770974f3985fed37a2db8422fb5e5c521ccc0d802c2d8432f8d2a6350fd79004ea69e80667681f2
7
+ data.tar.gz: 54b37ab961bdfc5d9c270d20bd062714914551311a7bb90696c5ecafb7e34cae88c9ecd43cc82416962c549bb1128019c21f56199d75897194d1be70fb227ca2
data/.gitignore ADDED
@@ -0,0 +1,38 @@
1
+ *.gem
2
+ *.rbc
3
+ Gemfile.lock
4
+
5
+ /.config
6
+ /coverage/
7
+ /InstalledFiles
8
+ /pkg/
9
+ /spec/reports/
10
+ /test/tmp/
11
+ /test/data/freezer/
12
+ /test/version_tmp/
13
+ /tmp/
14
+
15
+ ## Specific to RubyMotion:
16
+ .dat*
17
+ .repl_history
18
+ build/
19
+
20
+ ## Documentation cache and generated files:
21
+ /.yardoc/
22
+ /_yardoc/
23
+ /doc/
24
+ /rdoc/
25
+
26
+ ## Environment normalisation:
27
+ /.bundle/
28
+ /vendor/bundle
29
+ /lib/bundler/man/
30
+
31
+ # for a library or gem, you might want to ignore these files since the code is
32
+ # intended to run in multiple environments; otherwise, check them in:
33
+ # Gemfile.lock
34
+ # .ruby-version
35
+ # .ruby-gemset
36
+
37
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
38
+ .rvmrc
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ freezer_burn
data/.travis.yml ADDED
@@ -0,0 +1,12 @@
1
+ language: ruby
2
+ before_install: gem install bundler
3
+ install: bundle install
4
+ script: rake
5
+ rvm:
6
+ - 2.0.0
7
+ - 2.1.1
8
+ - 2.2.0
9
+ - 2.3.0
10
+ notifications:
11
+ slack:
12
+ secure: tsYjJ2lHbYChbhHCFqY8SuJ85ZKtjho7hPO2ezghCqOmn2b/wNM60jo47VX8dLmDz9h1t/BcO3eeiaE4YC3E1bAdq/VaC481ZCcsCH61TVXCFmIDgJTLGutRWYDc2jH4/URpaZztDTz6DHt3dmvHzsle3snUj4OahLA9nLGkOTmqG+/VVf0/rSx/VjG6AMItYHQpHozdDZaTNdCmpW6kvhkSMvr7MlKmjfgdSCN5oYcbqvVYErFU8e8Ve4muMJ1KXSUp7VTx/X4ECTaqTIQQL5F1eNH9nWz3ftzipd/0EDgJTVWljpzyHpRZU/RgFgHole/5Xl0eMGInDhzUaRgz5hl6AU21GRNxMsCwytc/lUS1i/91JEyXfTqJpmbhsa8k4bSyQGJ5546b0+CET1JsSiD4b6KIO/l3AEOjC/aPFXkxtFQBYS33OJW/LB6rhyiDvRECSvGmliIsZshVaG1Wv+hJQKg24ZWI5bnSTgf/ZPcBjawqLVEaUByeSMV5LlX3/BKEHopgv049E5z05ptcAsG/iA7I26PQvHXDuTI+PclWgONgW15Cfi4kuXtFC8NET2hdIxvrNVD3YMnwZehtS5cFcWFu4Aa3uYETNKNFjTOkuP/zE6erJD/0qTSGE/cr2rJUYZyJeBcm70/BZL1qFJ3MGM+f03IiTDdavFdPej8=
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in gemspec
4
+ gemspec
5
+
6
+ #gem 'pry-nav', group: [:development, :test]
7
+
8
+ # Put other dynamic build / pre-release gems here.
9
+ # Putting gems in a Gemfile does not install them during gem install foo! - Only developement hybrid environments use this.
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 shadowbq
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
data/README.md ADDED
@@ -0,0 +1,47 @@
1
+ # freezer_burn
2
+ Rough management of compressed log files.
3
+
4
+ ## Code Status
5
+
6
+ [![Build Status](https://travis-ci.org/shadowbq/freezer_burn.svg?branch=master)](https://travis-ci.org/shadowbq/freezer_burn)
7
+ [![Code Climate](https://codeclimate.com/github/shadowbq/freezer_burn/badges/gpa.svg)](https://codeclimate.com/github/shadowbq/freezer_burn)
8
+ [![Test Coverage](https://codeclimate.com/github/shadowbq/freezer_burn/badges/coverage.svg)](https://codeclimate.com/github/shadowbq/freezer_burn)
9
+ [![GitHub tag](https://img.shields.io/github/tag/shadowbq/freezer_burn.svg)](http://github.com/shadowbq/freezer_burn)
10
+
11
+ ## Usage
12
+ ```shell
13
+ $> freezer_burn -h
14
+ Rough management for compressing and managing log files.
15
+
16
+ Usage:
17
+ ./bin/freezer_burn passivedns [-vdk] [--version] [-f <fridge>] [-F <freezer>]
18
+ ./bin/freezer_burn cxtracker [-vdk] [--version] [-f <fridge>] [-F <freezer>]
19
+ ./bin/freezer_burn -h | --help
20
+
21
+ Options:
22
+ -f <fridge> look for logs here
23
+ -F <freezer> store file here
24
+ -k --keep-files keep original files in the fridge
25
+ -h --help show this help message and exit
26
+ --version show version and exit
27
+ -d --dry-run simulate without moving files
28
+ -v --verbose print status messages
29
+ ```
30
+
31
+ ## Example Usage
32
+
33
+ ```shell
34
+ $> freezer_burn -dvk -F /man
35
+ Searching 1436932800 -> 1437019200: 0 files
36
+
37
+ $> freezer_burn passivedns -dv -F /man --version
38
+ version => 0.0.4
39
+ verbose => true
40
+ dryrun => true
41
+ fridge => /var/db/yard/pdns.*
42
+ freezer => /man
43
+ gnu_tar_command => gtar
44
+ remove_files => --remove-files
45
+ prefix => passivedns
46
+ max_scan_time_in_sec => 31536000
47
+ ```
data/Rakefile ADDED
@@ -0,0 +1,13 @@
1
+
2
+ #!/usr/bin/env rake
3
+ require "bundler/gem_tasks"
4
+ require "rake/testtask"
5
+
6
+ task :default => [:test]
7
+
8
+ Rake::TestTask.new do |test|
9
+ #test.libs << "lib"
10
+ test.libs << "test"
11
+ test.test_files = Dir[ "test/test_*.rb" ]
12
+ test.verbose = true
13
+ end
data/bin/freezer_burn ADDED
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+ begin
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ Bundler.setup(:default)
6
+ rescue LoadError
7
+ raise 'Could not load the bundler gem. Install it with `gem install bundler`.'
8
+ end
9
+
10
+ # Executable with absolute path to lib for hacking and development
11
+ require File.join(File.dirname(__FILE__), '..', 'lib', 'freezer_burn', 'cli')
12
+
13
+ FreezerBurn::CLI.invoke
data/build-gem.sh ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env bash
2
+
3
+ if [ -f ./README.md ] && [ -f ./LICENSE ];
4
+ then
5
+ echo "Removing old gem.."
6
+ gem uninstall -x freezer_burn
7
+ echo "Building gem.."
8
+ gem build freezer_burn.gemspec
9
+ echo "Installing gem.."
10
+ gem install freezer_burn-`bump current |grep -o [0-9].*`.gem
11
+ git status
12
+ echo "Validating gem.."
13
+ gem list --local |grep freezer_burn
14
+ else
15
+ echo "not in root gem directory, existing."
16
+ fi
@@ -0,0 +1,33 @@
1
+ #gem 'docopt', '~> 0.5.0'
2
+ $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
3
+ name = "freezer_burn"
4
+ require "#{name}/version"
5
+
6
+
7
+ Gem::Specification.new do |gem|
8
+ gem.platform = Gem::Platform::RUBY
9
+ gem.authors = ["shadowbq"]
10
+ gem.email = ["shadowbq@gmail.com"]
11
+ gem.description = %q{rough management of compressed gems}
12
+ gem.summary = gem.description
13
+ gem.homepage = "https://github.com/shadowbq/freezer_burn"
14
+
15
+ gem.files = `git ls-files`.split($\)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.name = "freezer_burn"
19
+ gem.require_paths = ["lib"]
20
+ gem.version = FreezerBurn::VERSION
21
+ gem.license = 'MIT'
22
+
23
+ #Gonna is a mechanize example bin that fetches are parses a fake page.
24
+ gem.add_dependency('docopt', '~> 0.5.0')
25
+
26
+ # gem.add_development_dependency('pry')
27
+ gem.add_development_dependency('bump')
28
+ gem.add_development_dependency('minitest-colorize')
29
+ gem.add_development_dependency('ansi')
30
+ gem.add_development_dependency('simplecov')
31
+ gem.add_development_dependency('travis')
32
+ gem.add_development_dependency('codeclimate-test-reporter')
33
+ end
data/lib/ext/object.rb ADDED
@@ -0,0 +1,7 @@
1
+ class Object
2
+ def self.const_get19(str)
3
+ str.split('::').inject(Object) do |mod, class_name|
4
+ mod.const_get(class_name)
5
+ end
6
+ end
7
+ end
data/lib/ext/time.rb ADDED
@@ -0,0 +1,30 @@
1
+ class Time
2
+ def change(options)
3
+ new_year = options.fetch(:year, year)
4
+ new_month = options.fetch(:month, month)
5
+ new_day = options.fetch(:day, day)
6
+ new_hour = options.fetch(:hour, hour)
7
+ new_min = options.fetch(:min, options[:hour] ? 0 : min)
8
+ new_sec = options.fetch(:sec, (options[:hour] || options[:min]) ? 0 : sec)
9
+
10
+ if new_nsec = options[:nsec]
11
+ fail ArgumentError, "Can't change both :nsec and :usec at the same time: #{options.inspect}" if options[:usec]
12
+ new_usec = Rational(new_nsec, 1000)
13
+ else
14
+ new_usec = options.fetch(:usec, (options[:hour] || options[:min] || options[:sec]) ? 0 : Rational(nsec, 1000))
15
+ end
16
+
17
+ if utc?
18
+ ::Time.utc(new_year, new_month, new_day, new_hour, new_min, new_sec, new_usec)
19
+ elsif zone
20
+ ::Time.local(new_year, new_month, new_day, new_hour, new_min, new_sec, new_usec)
21
+ else
22
+ fail ArgumentError, 'argument out of range' if new_usec >= 1_000_000
23
+ ::Time.new(new_year, new_month, new_day, new_hour, new_min, new_sec + (new_usec.to_r / 1_000_000), utc_offset)
24
+ end
25
+ end
26
+
27
+ def seconds_since_midnight
28
+ to_i - change(hour: 0).to_i + (usec / 1.0e+6)
29
+ end
30
+ end
@@ -0,0 +1,19 @@
1
+ # STDLIBS
2
+ require 'rubygems'
3
+ module FreezerBurn
4
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
5
+
6
+ class ClassError < StandardError; end
7
+ class UnknownParser < StandardError; end
8
+
9
+ MAX_FILEPATH_BUF = 1024
10
+ UINT32_t = 4
11
+
12
+ require 'ext/object'
13
+ require 'ext/time'
14
+ require 'freezer_burn/settings'
15
+ require 'freezer_burn/version'
16
+ require 'freezer_burn/rotation'
17
+ require 'freezer_burn/parsers/cxtracker'
18
+ require 'freezer_burn/parsers/passivedns'
19
+ end
@@ -0,0 +1,89 @@
1
+ require 'rubygems'
2
+ require 'docopt'
3
+ require 'freezer_burn'
4
+
5
+ module FreezerBurn
6
+ class CLI
7
+ def self.invoke
8
+ new
9
+ end
10
+
11
+ def initialize
12
+
13
+ @parsers = [:cxtracker, :passivedns]
14
+
15
+ doc = <<DOCOPT
16
+ Rough management of compressed log files.
17
+
18
+ Usage:
19
+ DOCOPT
20
+
21
+ @parsers.each do |parser|
22
+ doc += "freezer_burn #{parser} [-vdk] [--version] [-f <fridge>] [-F <freezer>] \n"
23
+ end
24
+
25
+ doc_part2 = <<DOCOPT
26
+
27
+ freezer_burn -h | --help
28
+
29
+ Options:
30
+ -f <fridge> look for logs here
31
+ -F <freezer> store file here
32
+ -k --keep-files keep original files in the fridge
33
+ -h --help show this help message and exit
34
+ --version show version and exit
35
+ -d --dry-run simulate without moving files
36
+ -v --verbose print status messages
37
+
38
+ DOCOPT
39
+
40
+ @options = {}
41
+ begin
42
+ @options = Docopt.docopt(doc+doc_part2)
43
+ rescue Docopt::Exit => e
44
+ puts e.message
45
+ exit 1
46
+ end
47
+
48
+ # Boolean switch
49
+ FreezerBurn::Settings.verbose = @options['--verbose'] ? true : false
50
+ FreezerBurn::Settings.dryrun = @options['--dry-run'] ? true : false
51
+
52
+ # Maintain defaults
53
+ FreezerBurn::Settings.remove_files = '' if @options['--keep-files']
54
+ FreezerBurn::Settings.fridge = @options['-f'] if @options['-f']
55
+ FreezerBurn::Settings.freezer = @options['-F'] if @options['-F']
56
+
57
+ if @options['--version']
58
+ _version
59
+ exit 0
60
+ end
61
+
62
+ _meta_parser("rotate")
63
+
64
+ end # def
65
+
66
+ private
67
+
68
+ def _version
69
+ puts 'version => ' + FreezerBurn::VERSION.to_s
70
+ if FreezerBurn::Settings.verbose
71
+ _meta_parser("update_settings!")
72
+ FreezerBurn::Settings.print
73
+ end
74
+ end
75
+
76
+ def _meta_parser(cmd)
77
+ @parsers.each do |el|
78
+ el = el.to_s
79
+ klass = "FreezerBurn::" + el.capitalize
80
+ if @options[el]
81
+ Object.const_get19(klass).send(cmd)
82
+ break # jump out of each
83
+ end
84
+ end
85
+ end
86
+
87
+
88
+ end # class
89
+ end # module
@@ -0,0 +1,36 @@
1
+ module FreezerBurn
2
+ class Cxtracker < Rotation
3
+
4
+ def self.update_settings!
5
+ FreezerBurn::Settings.prefix 'cxtracker'
6
+ FreezerBurn::Settings.fridge '/var/db/fridge/stats.*'
7
+ end
8
+
9
+ def _build_collection(dir)
10
+ @dirglob = Dir.glob(dir)
11
+ collection = []
12
+
13
+ @dirglob.each do |filename|
14
+ collection << { filename: filename, file_epoch: _get_file_epoch_cxtracker(filename) }
15
+ end
16
+
17
+ @dirglob = nil
18
+
19
+ # remove from collection elements with no file_epoch k/v
20
+ collection.collect { |e| e if e[:file_epoch] != '' }.compact
21
+ end
22
+
23
+ # ./test/data/stats.bge1.1429901797
24
+ # stats.bge1.1429901798
25
+ def _get_file_epoch_cxtracker(filename)
26
+ file_epoch = File.basename(filename).split('.')[2]
27
+ # should safely cast
28
+ file_epoch = Integer(file_epoch)
29
+ # ArgumentError: invalid value for Integer: "nights"
30
+ return file_epoch
31
+ rescue
32
+ return ''
33
+ end
34
+
35
+ end
36
+ end
@@ -0,0 +1,36 @@
1
+ module FreezerBurn
2
+ class Passivedns < Rotation
3
+
4
+ def self.update_settings!
5
+ FreezerBurn::Settings.prefix 'passivedns'
6
+ FreezerBurn::Settings.fridge '/var/db/fridge/pdns.*'
7
+ end
8
+
9
+ def _build_collection(dir)
10
+ @dirglob = Dir.glob(dir)
11
+ collection = []
12
+
13
+ @dirglob.each do |filename|
14
+ collection << { filename: filename, file_epoch: _get_file_epoch(filename) }
15
+ end
16
+
17
+ @dirglob = nil
18
+
19
+ # remove from collection elements with no file_epoch k/v
20
+ collection.collect { |e| e if e[:file_epoch] != '' }.compact
21
+ end
22
+
23
+ # ./test/data/stats.bge1.1429901797
24
+ # stats.bge1.1429901798
25
+ def _get_file_epoch(filename)
26
+ file_epoch = File.basename(filename).split('.')[2]
27
+ # should safely cast
28
+ file_epoch = Integer(file_epoch)
29
+ # ArgumentError: invalid value for Integer: "nights"
30
+ return file_epoch
31
+ rescue
32
+ return ''
33
+ end
34
+
35
+ end
36
+ end
@@ -0,0 +1,87 @@
1
+ require 'tempfile'
2
+
3
+ module FreezerBurn
4
+ class Rotation
5
+
6
+ attr_reader :collection
7
+
8
+ # Stub
9
+ def self.update_settings!
10
+ raise ClassError, "method stub called, child method missing"
11
+ end
12
+
13
+ def self.rotate(fridge=FreezerBurn::Settings.fridge)
14
+ rotation = self.new(fridge)
15
+ rotation.rotate
16
+ end
17
+
18
+ def initialize(fridge=FreezerBurn::Settings.fridge)
19
+ # Seconds since epoch
20
+ @unixtime = Time.now.utc.to_i
21
+ @interval = 86_400
22
+
23
+ # UT END of TODAY(uteot).
24
+ @uteot = (Time.now + @interval).change(hour: 0).to_i
25
+
26
+ # UT START of TODAY(utsot).
27
+ @utsot = @uteot - @interval
28
+
29
+ @collection = _build_collection(fridge)
30
+
31
+ self.class.update_settings!
32
+ return self
33
+ end
34
+
35
+ def rotate
36
+ begin
37
+ _rotate_interval
38
+
39
+ # Fall back interval.
40
+ @uteot -= @interval
41
+ @utsot -= @interval
42
+
43
+ # limit selecting to only one year
44
+ @collection = [] if @unixtime - Settings.max_scan_time_in_sec > @uteot
45
+
46
+ end while !@collection.empty?
47
+ end
48
+
49
+ #private
50
+
51
+ # Stub
52
+ def _build_collection(dir)
53
+ raise ClassError, "method stub called, child method missing"
54
+ end
55
+
56
+ # Stub
57
+ def _get_file_epoch_cxtracker(filename)
58
+ raise ClassError, "method stub called, child method missing"
59
+ end
60
+
61
+ def _rotate_interval
62
+ puts "Searching #{@utsot} -> #{@uteot}: #{@collection.size} files" if Settings.verbose
63
+ daylist = []
64
+ @collection.each do |file|
65
+ daylist.push(file) if (@utsot..@uteot) === file[:file_epoch]
66
+ end
67
+ unless daylist.empty?
68
+ puts "#{daylist.first[:filename]} .. #{daylist.last[:filename]}" if Settings.verbose
69
+ @collection -= daylist
70
+
71
+ # compress tarball daylist, write filename with earliest.lastest.gz.tar epoch time.
72
+ # best way to handle thousands of files is with gnu-tar (tar must support -T flag)
73
+ Tempfile.open('tar-ball-listing') do |f|
74
+ daylist.each { |fileref| f.puts(fileref[:filename]) }
75
+ f.close
76
+ # write filenames to a filelist.
77
+ cmd_string = "#{Settings.gnu_tar_command} -T #{f.path} --append -z #{Settings.remove_files}-f #{Settings.freezer}/#{Settings.prefix}.#{daylist.first[:file_epoch]}-#{daylist.last[:file_epoch]}.tar.gz > /dev/null 2>&1"
78
+ puts cmd_string if Settings.verbose
79
+ `#{cmd_string}` unless Settings.dryrun
80
+ end
81
+
82
+ end # unless
83
+
84
+ end # def
85
+
86
+ end
87
+ end
@@ -0,0 +1,87 @@
1
+ module FreezerBurn
2
+ module Settings
3
+ extend self
4
+
5
+ @@registered_settings = []
6
+
7
+ # Appdata provides a basic single-method DSL with .parameter method
8
+ # being used to define a set of available settings.
9
+ # This method takes one or more symbols, with each one being
10
+ # a name of the configuration option.
11
+ def parameter(*names)
12
+ names.each do |name|
13
+ attr_accessor name
14
+
15
+ @@registered_settings.push(name)
16
+
17
+ # For each given symbol we generate accessor method that sets option's
18
+ # value being called with an argument, or returns option's current value
19
+ # when called without arguments
20
+ undef_method name if method_defined? name
21
+
22
+ define_method name do |*values|
23
+ value = values.first
24
+ #binding.pry
25
+ if value
26
+ send("#{name}=", value)
27
+ else
28
+ instance_variable_defined?("@#{name}") ? instance_variable_get("@#{name}") : nil
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ # And we define a wrapper for the configuration block, that we'll use to set up
35
+ # our set of options
36
+ def config &block
37
+ instance_eval(&block)
38
+ end
39
+
40
+ # list available settings
41
+ def self.list
42
+ @@registered_settings
43
+ end
44
+
45
+ def self.reset!
46
+ self.config do
47
+ verbose false
48
+ dryrun false
49
+ fridge '/var/db/fridge/*.log'
50
+ freezer '/var/log/freezer'
51
+ gnu_tar_command 'gtar'
52
+ remove_files '--remove-files '
53
+ prefix 'cxtracker'
54
+ max_scan_time_in_sec 31_536_000
55
+ end
56
+ end
57
+
58
+ def self.to_h
59
+ c = {}
60
+ FreezerBurn::Settings.list.each do |toggle|
61
+ c[toggle.to_sym] = FreezerBurn::Settings.send(toggle)
62
+ end
63
+ return c
64
+ end
65
+
66
+ def self.print
67
+ FreezerBurn::Settings.list.each do |toggle|
68
+ puts "#{toggle} => #{FreezerBurn::Settings.send(toggle)}"
69
+ end
70
+ end
71
+
72
+ end
73
+
74
+ # [1] pry(#<FreezerBurn::CLI>)> Settings.list
75
+ # => [:verbose, :fridge, :freezer, :gnu_tar_command, :remove_files, :prefix, :max_scan_time_in_sec]
76
+
77
+ Settings.config do
78
+ parameter :verbose, :dryrun
79
+ parameter :fridge, :freezer
80
+ parameter :gnu_tar_command
81
+ parameter :remove_files
82
+ parameter :prefix
83
+ parameter :max_scan_time_in_sec
84
+ end
85
+
86
+ Settings.reset!
87
+ end
@@ -0,0 +1,3 @@
1
+ module FreezerBurn
2
+ VERSION = '0.0.6'
3
+ end
File without changes
File without changes
File without changes
@@ -0,0 +1,28 @@
1
+ # require 'pry'
2
+ # binding.pry
3
+ require 'test_helper'
4
+ require 'minitest/spec'
5
+
6
+ describe "rotation" do
7
+
8
+ before do
9
+ FreezerBurn::Settings.reset!
10
+ FreezerBurn::Settings.fridge = './test/data/stats.*'
11
+ FreezerBurn::Settings.freezer = './test/data/freezer'
12
+ end
13
+
14
+ describe 'when calling an rotation job' do
15
+ it 'should return a roation job object' do
16
+ job = FreezerBurn::Cxtracker.new
17
+ job.must_be_instance_of FreezerBurn::Cxtracker
18
+ end
19
+
20
+ it 'should respond with a collection of files in fridge' do
21
+ job = FreezerBurn::Cxtracker.new
22
+ job.collection.must_be_instance_of Array
23
+ job.collection.must_include({:filename => "./test/data/stats.bge1.1429901795", :file_epoch => 1429901795})
24
+ end
25
+
26
+ end
27
+
28
+ end
@@ -0,0 +1,24 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require 'simplecov'
5
+ SimpleCov.start do
6
+ add_filter '/test/'
7
+ add_group 'Bin', '/lib/cli'
8
+ add_group 'Lib', '/lib'
9
+ end
10
+
11
+ require "codeclimate-test-reporter"
12
+ CodeClimate::TestReporter.start
13
+
14
+ gem "minitest"
15
+ require 'minitest/autorun'
16
+ require 'minitest/pride'
17
+ require 'minitest/spec'
18
+
19
+ # :: Scaffold for CodeClimate
20
+ # require "codeclimate-test-reporter"
21
+ # CodeClimate::TestReporter.start
22
+
23
+ #require File.join(File.dirname(__FILE__), '..', 'freezer_burn')
24
+ require File.join(File.dirname(__FILE__), '..', 'lib', 'freezer_burn')
@@ -0,0 +1,16 @@
1
+ require 'test_helper'
2
+ require 'minitest/spec'
3
+
4
+ describe "rotation" do
5
+
6
+ before do
7
+ FreezerBurn::Settings.reset!
8
+ end
9
+
10
+ describe 'when calling the stub' do
11
+ it 'should raise a ClassError' do
12
+ proc { FreezerBurn::Rotation.new }.must_raise FreezerBurn::ClassError
13
+ end
14
+ end
15
+
16
+ end
@@ -0,0 +1,27 @@
1
+ require 'test_helper'
2
+ require 'minitest/spec'
3
+
4
+ describe FreezerBurn::Settings do
5
+
6
+ before do
7
+ FreezerBurn::Settings.reset!
8
+ FreezerBurn::Settings.freezer = './test/data/freezer'
9
+ end
10
+
11
+ describe 'when calling an APP Setting' do
12
+ it 'should respond with defaults' do
13
+ FreezerBurn::Settings.fridge.must_equal '/var/db/fridge/*.log'
14
+ end
15
+
16
+ it 'should list its attributes' do
17
+ FreezerBurn::Settings.list.must_equal [:verbose, :dryrun, :fridge, :freezer, :gnu_tar_command, :remove_files, :prefix, :max_scan_time_in_sec]
18
+ end
19
+
20
+ it 'should convert to a hash with new test settings' do
21
+ target_hash = {:verbose=>nil, :dryrun=>nil, :fridge=>"/var/db/fridge/*.log", :freezer=>"./test/data/freezer", :gnu_tar_command=>"gtar", :remove_files=>"--remove-files ", :prefix=>"cxtracker", :max_scan_time_in_sec=>31536000}
22
+ FreezerBurn::Settings.to_h.must_equal target_hash
23
+ end
24
+
25
+ end
26
+
27
+ end
metadata ADDED
@@ -0,0 +1,176 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: freezer_burn
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.6
5
+ platform: ruby
6
+ authors:
7
+ - shadowbq
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-08-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: docopt
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.5.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.5.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: bump
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest-colorize
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: ansi
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: simplecov
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: travis
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: codeclimate-test-reporter
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: rough management of compressed gems
112
+ email:
113
+ - shadowbq@gmail.com
114
+ executables:
115
+ - freezer_burn
116
+ extensions: []
117
+ extra_rdoc_files: []
118
+ files:
119
+ - ".gitignore"
120
+ - ".ruby-gemset"
121
+ - ".travis.yml"
122
+ - Gemfile
123
+ - LICENSE
124
+ - README.md
125
+ - Rakefile
126
+ - bin/freezer_burn
127
+ - build-gem.sh
128
+ - freezer_burn.gemspec
129
+ - lib/ext/object.rb
130
+ - lib/ext/time.rb
131
+ - lib/freezer_burn.rb
132
+ - lib/freezer_burn/cli.rb
133
+ - lib/freezer_burn/parsers/cxtracker.rb
134
+ - lib/freezer_burn/parsers/passivedns.rb
135
+ - lib/freezer_burn/rotation.rb
136
+ - lib/freezer_burn/settings.rb
137
+ - lib/freezer_burn/version.rb
138
+ - test/data/stats.bge1.1429901795
139
+ - test/data/stats.bge1.1429901797
140
+ - test/data/stats.bge1.1429901799
141
+ - test/test_cxtracker.rb
142
+ - test/test_helper.rb
143
+ - test/test_rotation.rb
144
+ - test/test_settings.rb
145
+ homepage: https://github.com/shadowbq/freezer_burn
146
+ licenses:
147
+ - MIT
148
+ metadata: {}
149
+ post_install_message:
150
+ rdoc_options: []
151
+ require_paths:
152
+ - lib
153
+ required_ruby_version: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ required_rubygems_version: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - ">="
161
+ - !ruby/object:Gem::Version
162
+ version: '0'
163
+ requirements: []
164
+ rubyforge_project:
165
+ rubygems_version: 2.4.8
166
+ signing_key:
167
+ specification_version: 4
168
+ summary: rough management of compressed gems
169
+ test_files:
170
+ - test/data/stats.bge1.1429901795
171
+ - test/data/stats.bge1.1429901797
172
+ - test/data/stats.bge1.1429901799
173
+ - test/test_cxtracker.rb
174
+ - test/test_helper.rb
175
+ - test/test_rotation.rb
176
+ - test/test_settings.rb