cayuga 0.0.10 → 0.0.11
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/.idea/.rakeTasks +1 -1
- data/.idea/inspectionProfiles/Project_Default.xml +3 -1
- data/.idea/workspace.xml +485 -306
- data/.rubocop.yml +3 -0
- data/Gemfile +2 -2
- data/Rakefile +3 -3
- data/bin/console +3 -3
- data/lib/cayuga/object/constants.rb +1 -0
- data/lib/cayuga/object/factory.rb +21 -22
- data/lib/cayuga/object/logger.rb +57 -41
- data/lib/cayuga/object/named_object.rb +3 -1
- data/lib/cayuga/object/object.rb +5 -4
- data/lib/cayuga/object/singleton.rb +1 -1
- data/lib/cayuga/tools/class.rb +1 -1
- data/lib/cayuga/tools/loggable.rb +1 -1
- data/lib/cayuga/tools/string.rb +1 -1
- data/lib/cayuga/tools/symbol.rb +3 -3
- data/lib/cayuga/version.rb +1 -1
- data/test_script.rb +35 -30
- metadata +2 -2
data/.rubocop.yml
CHANGED
data/Gemfile
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
source
|
1
|
+
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
|
3
|
+
git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
|
4
4
|
|
5
5
|
# Specify your gem's dependencies in cayuga.gemspec
|
6
6
|
gemspec
|
data/Rakefile
CHANGED
data/bin/console
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'cayuga'
|
5
5
|
|
6
6
|
# You can add fixtures and/or initialization code here to make experimenting
|
7
7
|
# with your gem easier. You can also use a different console, if you like.
|
@@ -10,5 +10,5 @@ require "cayuga"
|
|
10
10
|
# require "pry"
|
11
11
|
# Pry.start
|
12
12
|
|
13
|
-
require
|
13
|
+
require 'irb'
|
14
14
|
IRB.start(__FILE__)
|
@@ -60,19 +60,18 @@ module Cayuga
|
|
60
60
|
|
61
61
|
def release(klass, name = nil)
|
62
62
|
key = klass.symbolize
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
end
|
63
|
+
return unless registered?(key, name)
|
64
|
+
type = type(key)
|
65
|
+
case type
|
66
|
+
when :singleton
|
67
|
+
instances.delete(key)
|
68
|
+
when :named
|
69
|
+
value = instances[key]
|
70
|
+
if value
|
71
|
+
value.delete(name)
|
72
|
+
end
|
73
|
+
else
|
74
|
+
raise "bad type '#{type}'"
|
76
75
|
end
|
77
76
|
end
|
78
77
|
|
@@ -83,15 +82,22 @@ module Cayuga
|
|
83
82
|
private
|
84
83
|
|
85
84
|
OBJECTS = {
|
86
|
-
singletons: %w
|
85
|
+
singletons: %w[Cayuga::Object::Logger Cayuga::Object::Constants]
|
87
86
|
}.deep_freeze
|
88
87
|
|
89
88
|
attr_reader :configuration, :types, :instances
|
90
89
|
|
91
90
|
def initialize(config)
|
92
|
-
@configuration =
|
91
|
+
@configuration =
|
92
|
+
JSON.parse(File.read(config), symbolize_names: true).deep_freeze
|
93
93
|
@configuration_name = configuration[:configuration_name]
|
94
94
|
@logs_directory = configuration[:directories][:logs]
|
95
|
+
setup_types
|
96
|
+
@instances = {}
|
97
|
+
@directories = configuration[:directories].freeze
|
98
|
+
end
|
99
|
+
|
100
|
+
def setup_types
|
95
101
|
@types = {}
|
96
102
|
register_classes(configuration[:object_classes], :object)
|
97
103
|
register_classes(OBJECTS[:singletons], :singleton)
|
@@ -99,8 +105,6 @@ module Cayuga
|
|
99
105
|
register_classes(
|
100
106
|
configuration[:named_object_classes], :named
|
101
107
|
)
|
102
|
-
@instances = {}
|
103
|
-
@directories = configuration[:directories].freeze
|
104
108
|
end
|
105
109
|
|
106
110
|
def register_classes(list, type)
|
@@ -120,11 +124,6 @@ module Cayuga
|
|
120
124
|
|
121
125
|
def create_instance(type, klass, name)
|
122
126
|
case type
|
123
|
-
# when :factory
|
124
|
-
# object = klass.create(self, configuration)
|
125
|
-
# unless klass == LoggerFactory
|
126
|
-
# log.info("factory #{klass} created ")
|
127
|
-
# end
|
128
127
|
when :object, :singleton
|
129
128
|
object = klass.create(self, configuration)
|
130
129
|
# log.info("singleton #{klass} created ")
|
data/lib/cayuga/object/logger.rb
CHANGED
@@ -5,10 +5,14 @@ require 'cayuga'
|
|
5
5
|
|
6
6
|
module Cayuga
|
7
7
|
module Object
|
8
|
+
|
9
|
+
# Cayuga Object Logger
|
10
|
+
# noinspection RubyModuleAsSuperclassInspection
|
8
11
|
class Logger < Singleton
|
9
12
|
|
10
13
|
def generic_log_file(name)
|
11
|
-
|
14
|
+
filename = name.stringify.filenamify('.log')
|
15
|
+
"#{factory.logs_directory}/#{filename}"
|
12
16
|
end
|
13
17
|
|
14
18
|
def log_names
|
@@ -21,60 +25,55 @@ module Cayuga
|
|
21
25
|
|
22
26
|
alias [] log_filename
|
23
27
|
|
28
|
+
def log_appender_name(name)
|
29
|
+
name.stringify + annotation
|
30
|
+
end
|
31
|
+
|
24
32
|
def log_appender(name)
|
25
|
-
all = SemanticLogger.appenders.select
|
26
|
-
|
27
|
-
raise RuntimeError, "More than one log with name #{name}" if count > 1
|
28
|
-
if count == 1
|
29
|
-
all[0]
|
30
|
-
else
|
31
|
-
nil
|
33
|
+
all = SemanticLogger.appenders.select do |log|
|
34
|
+
log.name == log_appender_name(name)
|
32
35
|
end
|
36
|
+
count = all.count
|
37
|
+
raise "More than one log with name #{name}" if count > 1
|
38
|
+
count == 1 ? all[0] : nil
|
33
39
|
end
|
34
40
|
|
35
41
|
def log_log?(name)
|
36
|
-
|
42
|
+
!@logs[name.symbolize].nil?
|
37
43
|
end
|
38
44
|
|
39
45
|
def log_log!(name, filename: nil, stream: nil, filter: nil, level: :info)
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
logger.warn('no entry for log', payload = { name: symbol })
|
44
|
-
logger.warn('no entry for log', payload = { log: log_names })
|
45
|
-
@logs[symbol] = filename || stream
|
46
|
-
if log_filename(symbol).nil?
|
47
|
-
@logs[symbol] = factory.logs_directory + '/' + name.classify.log_file
|
48
|
-
end
|
49
|
-
return
|
46
|
+
unless log_log?(name)
|
47
|
+
remove_any_orphan_appender(name)
|
48
|
+
make_appender(name, filename, stream, filter, level)
|
50
49
|
end
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
log = SemanticLogger.add_appender(file_name: filename, filter: filter)
|
56
|
-
else
|
57
|
-
log = SemanticLogger.add_appender(io: stream, filter: filter)
|
58
|
-
end
|
59
|
-
else
|
60
|
-
log = SemanticLogger.add_appender(file_name: filename, filter: filter)
|
61
|
-
end
|
62
|
-
log.name = name.stringify
|
63
|
-
log.level = level
|
64
|
-
@logs[name.symbolize] = filename || stream || name.stringify
|
65
|
-
logger.info('logs', payload = { log_names: log_names })
|
66
|
-
logger.info('logs', payload = { count: SemanticLogger.appenders.count })
|
50
|
+
logger.info('log created', payload: { name: name })
|
51
|
+
logger.debug('logs', payload: { log_names: log_names })
|
52
|
+
logger.debug('logs', payload: { count: SemanticLogger.appenders.count })
|
53
|
+
log_filename(name)
|
67
54
|
end
|
68
55
|
|
69
56
|
private_class_method :new
|
70
57
|
|
71
58
|
private
|
72
59
|
|
73
|
-
attr_reader :
|
60
|
+
attr_reader :annotation
|
74
61
|
|
75
62
|
def initialize(factory, configuration)
|
76
63
|
@factory = factory
|
64
|
+
@configuration = configuration
|
65
|
+
@configuration_name = factory.configuration_name
|
66
|
+
@annotation = fetch_annotation
|
77
67
|
@logs = {}
|
68
|
+
create_logs
|
69
|
+
end
|
70
|
+
|
71
|
+
def fetch_annotation
|
72
|
+
value = configuration[:constants][:log_annotation_marker]
|
73
|
+
value.nil? ? '' : value
|
74
|
+
end
|
75
|
+
|
76
|
+
def create_logs
|
78
77
|
log_log!(:console, stream: $stderr, level: :warn)
|
79
78
|
log_log!(:main, filename: generic_log_file(:main))
|
80
79
|
log_log!(factory.class, filter: Regexp.new(factory.class.stringify))
|
@@ -82,13 +81,30 @@ module Cayuga
|
|
82
81
|
end
|
83
82
|
|
84
83
|
def log_appender_exists?(name)
|
85
|
-
name
|
86
|
-
|
87
|
-
|
88
|
-
|
84
|
+
!log_appender(name.symbolize).nil?
|
85
|
+
end
|
86
|
+
|
87
|
+
def make_appender(name, filename, stream, filter, level)
|
88
|
+
if stream.nil?
|
89
|
+
if filename.nil?
|
90
|
+
filename = factory.logs_directory + '/' + name.classify.log_file
|
91
|
+
end
|
92
|
+
log = SemanticLogger.add_appender(file_name: filename, filter: filter)
|
89
93
|
else
|
90
|
-
|
94
|
+
log = SemanticLogger.add_appender(io: stream, filter: filter)
|
91
95
|
end
|
96
|
+
log.name = log_appender_name(name)
|
97
|
+
log.level = level
|
98
|
+
@logs[name.symbolize] = filename || stream || name.stringify
|
99
|
+
log
|
100
|
+
end
|
101
|
+
|
102
|
+
def remove_any_orphan_appender(name)
|
103
|
+
return if log_log?(name)
|
104
|
+
return unless log_appender_exists?(name)
|
105
|
+
logger.warn('log without registration', payload: { name: name })
|
106
|
+
logger.debug('log without registration', payload: { log: log_names })
|
107
|
+
SemanticLogger.remove_appender(log_appender(name))
|
92
108
|
end
|
93
109
|
|
94
110
|
end
|
@@ -20,7 +20,9 @@ module Cayuga
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def self.create(factory, configuration, name)
|
23
|
-
|
23
|
+
if factory.registered?(self, name)
|
24
|
+
raise "#{stringify}[#{name}] already registered"
|
25
|
+
end
|
24
26
|
if primary?(name)
|
25
27
|
primary = name
|
26
28
|
alternate = nil
|
data/lib/cayuga/object/object.rb
CHANGED
@@ -9,6 +9,8 @@ module Cayuga
|
|
9
9
|
RootObject = Object
|
10
10
|
|
11
11
|
module Object
|
12
|
+
|
13
|
+
# Cayuga Object Object
|
12
14
|
class Object
|
13
15
|
include Tools::Loggable
|
14
16
|
|
@@ -28,10 +30,9 @@ module Cayuga
|
|
28
30
|
@factory = factory
|
29
31
|
@configuration = configuration
|
30
32
|
@configuration_name = factory.configuration_name
|
31
|
-
|
32
|
-
|
33
|
-
filter: Regexp.new(self.class.stringify)
|
34
|
-
) unless self.class == Logger
|
33
|
+
return if self.class == Logger
|
34
|
+
factory[Logger]
|
35
|
+
.log_log!(self.class, filter: Regexp.new(self.class.stringify))
|
35
36
|
end
|
36
37
|
|
37
38
|
end
|
@@ -6,7 +6,7 @@ module Cayuga
|
|
6
6
|
# Cayuga Object Singleton
|
7
7
|
class Singleton < Object
|
8
8
|
def self.create(factory, configuration)
|
9
|
-
raise "#{
|
9
|
+
raise "#{stringify} already registered" if factory.registered?(self)
|
10
10
|
factory.register(new(factory, configuration), self)
|
11
11
|
end
|
12
12
|
|
data/lib/cayuga/tools/class.rb
CHANGED
data/lib/cayuga/tools/string.rb
CHANGED
@@ -22,7 +22,7 @@ module Cayuga
|
|
22
22
|
|
23
23
|
def filenamify(extension = nil)
|
24
24
|
# noinspection RubyResolve
|
25
|
-
result = pathize.
|
25
|
+
result = pathize.tr('/', '#')
|
26
26
|
unless extension.nil? || extension.empty?
|
27
27
|
result += extension[0] == '.' ? '' : '.'
|
28
28
|
result += extension.stringify
|
data/lib/cayuga/tools/symbol.rb
CHANGED
@@ -15,12 +15,12 @@ module Cayuga
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def classify
|
18
|
-
klass = Object.const_get(
|
19
|
-
raise
|
18
|
+
klass = Object.const_get(to_s)
|
19
|
+
raise NameError, "wrong class name '#{klass}'" unless klass.is_a?(Class)
|
20
20
|
klass
|
21
21
|
end
|
22
22
|
|
23
|
-
def filenamify(extension=nil)
|
23
|
+
def filenamify(extension = nil)
|
24
24
|
stringify.filenamify(extension)
|
25
25
|
end
|
26
26
|
|
data/lib/cayuga/version.rb
CHANGED
data/test_script.rb
CHANGED
@@ -7,8 +7,8 @@ filename = File.expand_path('development.log')
|
|
7
7
|
SemanticLogger.add_appender(file_name: filename)
|
8
8
|
SemanticLogger.add_appender(io: $stderr)
|
9
9
|
buffer = StringIO.new
|
10
|
-
SemanticLogger.add_appender(io: buffer)
|
11
|
-
tail_lines =3
|
10
|
+
SemanticLogger.add_appender(io: buffer) # , formatter: :json)
|
11
|
+
tail_lines = 3
|
12
12
|
|
13
13
|
log.info 'start'
|
14
14
|
# puts buffer.string
|
@@ -26,31 +26,30 @@ top = 2 ** 23
|
|
26
26
|
# array[i] = i
|
27
27
|
now = Time.now
|
28
28
|
elapsed = now - last
|
29
|
-
|
29
|
+
next unless (elapsed > 5) && (now.sec % 5).zero?
|
30
|
+
stats = "#{now}: #{format('%.6f', (i / 1e6))}" \
|
31
|
+
", #{format('%.2f', elapsed)}s" \
|
32
|
+
", #{format('%.2f', (now - start))}s" \
|
33
|
+
", #{format('%.6f', ((i - old) / 1e6))}"
|
34
|
+
puts stats
|
35
|
+
log.info(stats)
|
36
|
+
# puts buffer.string
|
37
|
+
last = now
|
38
|
+
old = i
|
39
|
+
# end
|
40
|
+
# rubocop: disable Style/Next
|
41
|
+
if (now - start > 1800) || (i == top - 1)
|
42
|
+
duration = now - start
|
30
43
|
stats = "#{now}: #{format('%.6f', (i / 1e6))}" \
|
31
|
-
|
32
|
-
|
33
|
-
|
44
|
+
", #{format('%.2f', duration)}s" \
|
45
|
+
", #{format('%.6f', set.size / 1e6)}" \
|
46
|
+
", #{format('%.6f', array.size / 1e6)}"
|
34
47
|
puts stats
|
35
|
-
log.info
|
48
|
+
log.info stats
|
36
49
|
# puts buffer.string
|
37
|
-
|
38
|
-
old = i
|
39
|
-
# end
|
40
|
-
# rubocop: disable Style/Next
|
41
|
-
if (now - start > 1800) || (i == top - 1)
|
42
|
-
duration = now - start
|
43
|
-
stats = "#{now}: #{format('%.6f', (i / 1e6))}" \
|
44
|
-
", #{format('%.2f', duration)}s" \
|
45
|
-
", #{format('%.6f', set.size / 1e6)}" \
|
46
|
-
", #{format('%.6f', array.size / 1e6)}"
|
47
|
-
puts stats
|
48
|
-
log.info stats
|
49
|
-
# puts buffer.string
|
50
|
-
break
|
51
|
-
end
|
52
|
-
# rubocop: enable Style/Next
|
50
|
+
break
|
53
51
|
end
|
52
|
+
# rubocop: enable Style/Next
|
54
53
|
end
|
55
54
|
now = Time.now
|
56
55
|
# last = now
|
@@ -70,18 +69,24 @@ puts format('%.2fs', duration)
|
|
70
69
|
puts format('%.2fs', (Time.now - now))
|
71
70
|
puts format('%.2fs', (Time.now - start))
|
72
71
|
|
73
|
-
log.info(
|
72
|
+
log.info(
|
73
|
+
'finish',
|
74
|
+
set_size: set.size / 1e6,
|
75
|
+
load: duration,
|
76
|
+
analyze: Time.now - now,
|
77
|
+
total: Time.now - start
|
78
|
+
)
|
74
79
|
SemanticLogger.flush
|
75
80
|
puts '*****FILE*****'
|
76
|
-
File.open(filename) do |
|
77
|
-
|
78
|
-
puts
|
81
|
+
File.open(filename) do |a_log|
|
82
|
+
a_log.extend(File::Tail)
|
83
|
+
puts a_log.backward(tail_lines).tail(tail_lines)
|
79
84
|
end
|
80
85
|
puts '*****BUFFER*****'
|
81
86
|
puts buffer.string
|
82
87
|
# sleep(1)
|
83
88
|
puts '*****FILE*****'
|
84
|
-
File.open(filename) do |
|
85
|
-
|
86
|
-
puts
|
89
|
+
File.open(filename) do |a_log|
|
90
|
+
a_log.extend(File::Tail)
|
91
|
+
puts a_log.backward(tail_lines).tail(tail_lines)
|
87
92
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cayuga
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- patrick
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-11-
|
11
|
+
date: 2018-11-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: semantic_logger
|