freezer_burn 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
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