log4ever 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +33 -0
- data/.project +11 -0
- data/README.md +36 -0
- data/config/evernote.auth.test.yml +1 -0
- data/config/log4r.xml +19 -0
- data/lib/log4r/evernote/lib/Evernote/EDAM/errors_constants.rb +14 -0
- data/lib/log4r/evernote/lib/Evernote/EDAM/errors_types.rb +128 -0
- data/lib/log4r/evernote/lib/Evernote/EDAM/limits_constants.rb +240 -0
- data/lib/log4r/evernote/lib/Evernote/EDAM/limits_types.rb +13 -0
- data/lib/log4r/evernote/lib/Evernote/EDAM/note_store.rb +5487 -0
- data/lib/log4r/evernote/lib/Evernote/EDAM/note_store_constants.rb +14 -0
- data/lib/log4r/evernote/lib/Evernote/EDAM/note_store_types.rb +1012 -0
- data/lib/log4r/evernote/lib/Evernote/EDAM/types_constants.rb +20 -0
- data/lib/log4r/evernote/lib/Evernote/EDAM/types_types.rb +1792 -0
- data/lib/log4r/evernote/lib/Evernote/EDAM/user_store.rb +549 -0
- data/lib/log4r/evernote/lib/Evernote/EDAM/user_store_constants.rb +18 -0
- data/lib/log4r/evernote/lib/Evernote/EDAM/user_store_types.rb +415 -0
- data/lib/log4r/evernote/lib/thrift/client.rb +62 -0
- data/lib/log4r/evernote/lib/thrift/core_ext/fixnum.rb +29 -0
- data/lib/log4r/evernote/lib/thrift/core_ext.rb +23 -0
- data/lib/log4r/evernote/lib/thrift/exceptions.rb +84 -0
- data/lib/log4r/evernote/lib/thrift/processor.rb +57 -0
- data/lib/log4r/evernote/lib/thrift/protocol/base_protocol.rb +290 -0
- data/lib/log4r/evernote/lib/thrift/protocol/binary_protocol.rb +229 -0
- data/lib/log4r/evernote/lib/thrift/protocol/binary_protocol_accelerated.rb +39 -0
- data/lib/log4r/evernote/lib/thrift/protocol/compact_protocol.rb +426 -0
- data/lib/log4r/evernote/lib/thrift/serializer/deserializer.rb +33 -0
- data/lib/log4r/evernote/lib/thrift/serializer/serializer.rb +34 -0
- data/lib/log4r/evernote/lib/thrift/server/base_server.rb +31 -0
- data/lib/log4r/evernote/lib/thrift/server/mongrel_http_server.rb +58 -0
- data/lib/log4r/evernote/lib/thrift/server/nonblocking_server.rb +305 -0
- data/lib/log4r/evernote/lib/thrift/server/simple_server.rb +43 -0
- data/lib/log4r/evernote/lib/thrift/server/thread_pool_server.rb +75 -0
- data/lib/log4r/evernote/lib/thrift/server/threaded_server.rb +47 -0
- data/lib/log4r/evernote/lib/thrift/struct.rb +237 -0
- data/lib/log4r/evernote/lib/thrift/struct_union.rb +192 -0
- data/lib/log4r/evernote/lib/thrift/thrift_native.rb +24 -0
- data/lib/log4r/evernote/lib/thrift/transport/base_server_transport.rb +37 -0
- data/lib/log4r/evernote/lib/thrift/transport/base_transport.rb +107 -0
- data/lib/log4r/evernote/lib/thrift/transport/buffered_transport.rb +108 -0
- data/lib/log4r/evernote/lib/thrift/transport/framed_transport.rb +116 -0
- data/lib/log4r/evernote/lib/thrift/transport/http_client_transport.rb +53 -0
- data/lib/log4r/evernote/lib/thrift/transport/io_stream_transport.rb +39 -0
- data/lib/log4r/evernote/lib/thrift/transport/memory_buffer_transport.rb +125 -0
- data/lib/log4r/evernote/lib/thrift/transport/server_socket.rb +63 -0
- data/lib/log4r/evernote/lib/thrift/transport/socket.rb +137 -0
- data/lib/log4r/evernote/lib/thrift/transport/unix_server_socket.rb +60 -0
- data/lib/log4r/evernote/lib/thrift/transport/unix_socket.rb +40 -0
- data/lib/log4r/evernote/lib/thrift/types.rb +101 -0
- data/lib/log4r/evernote/lib/thrift/union.rb +179 -0
- data/lib/log4r/evernote/lib/thrift.rb +64 -0
- data/lib/log4r/evernote.rb +206 -0
- data/lib/log4r/outputter/evernoteoutputter.rb +156 -0
- data/spec/log4ever_spec.rb +94 -0
- data/spec/spec_helper.rb +14 -0
- metadata +105 -0
@@ -0,0 +1,64 @@
|
|
1
|
+
#
|
2
|
+
# Licensed to the Apache Software Foundation (ASF) under one
|
3
|
+
# or more contributor license agreements. See the NOTICE file
|
4
|
+
# distributed with this work for additional information
|
5
|
+
# regarding copyright ownership. The ASF licenses this file
|
6
|
+
# to you under the Apache License, Version 2.0 (the
|
7
|
+
# "License"); you may not use this file except in compliance
|
8
|
+
# with the License. You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing,
|
13
|
+
# software distributed under the License is distributed on an
|
14
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
15
|
+
# KIND, either express or implied. See the License for the
|
16
|
+
# specific language governing permissions and limitations
|
17
|
+
# under the License.
|
18
|
+
#
|
19
|
+
# Contains some contributions under the Thrift Software License.
|
20
|
+
# Please see doc/old-thrift-license.txt in the Thrift distribution for
|
21
|
+
# details.
|
22
|
+
|
23
|
+
$:.unshift File.dirname(__FILE__)
|
24
|
+
|
25
|
+
require 'thrift/core_ext'
|
26
|
+
require 'thrift/exceptions'
|
27
|
+
require 'thrift/types'
|
28
|
+
require 'thrift/processor'
|
29
|
+
require 'thrift/client'
|
30
|
+
require 'thrift/struct'
|
31
|
+
require 'thrift/union'
|
32
|
+
require 'thrift/struct_union'
|
33
|
+
|
34
|
+
# serializer
|
35
|
+
require 'thrift/serializer/serializer'
|
36
|
+
require 'thrift/serializer/deserializer'
|
37
|
+
|
38
|
+
# protocol
|
39
|
+
require 'thrift/protocol/base_protocol'
|
40
|
+
require 'thrift/protocol/binary_protocol'
|
41
|
+
require 'thrift/protocol/binary_protocol_accelerated'
|
42
|
+
require 'thrift/protocol/compact_protocol'
|
43
|
+
|
44
|
+
# transport
|
45
|
+
require 'thrift/transport/base_transport'
|
46
|
+
require 'thrift/transport/base_server_transport'
|
47
|
+
require 'thrift/transport/socket'
|
48
|
+
require 'thrift/transport/server_socket'
|
49
|
+
require 'thrift/transport/unix_socket'
|
50
|
+
require 'thrift/transport/unix_server_socket'
|
51
|
+
require 'thrift/transport/buffered_transport'
|
52
|
+
require 'thrift/transport/framed_transport'
|
53
|
+
require 'thrift/transport/http_client_transport'
|
54
|
+
require 'thrift/transport/io_stream_transport'
|
55
|
+
require 'thrift/transport/memory_buffer_transport'
|
56
|
+
|
57
|
+
# server
|
58
|
+
require 'thrift/server/base_server'
|
59
|
+
require 'thrift/server/nonblocking_server'
|
60
|
+
require 'thrift/server/simple_server'
|
61
|
+
require 'thrift/server/threaded_server'
|
62
|
+
require 'thrift/server/thread_pool_server'
|
63
|
+
|
64
|
+
require 'thrift/thrift_native'
|
@@ -0,0 +1,206 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
$: << File.dirname(__FILE__) + "/evernote/lib"
|
3
|
+
$: << File.dirname(__FILE__) + "/evernote/lib/thrift"
|
4
|
+
$: << File.dirname(__FILE__) + "/evernote/lib/Evernote/EDAM"
|
5
|
+
require 'log4r/outputter/evernoteoutputter'
|
6
|
+
require "thrift/types"
|
7
|
+
require "thrift/struct"
|
8
|
+
require "thrift/protocol/base_protocol"
|
9
|
+
require "thrift/protocol/binary_protocol"
|
10
|
+
require "thrift/transport/base_transport"
|
11
|
+
require "thrift/transport/http_client_transport"
|
12
|
+
require "Evernote/EDAM/user_store"
|
13
|
+
require "Evernote/EDAM/user_store_constants.rb"
|
14
|
+
require "Evernote/EDAM/note_store"
|
15
|
+
require "Evernote/EDAM/limits_constants.rb"
|
16
|
+
|
17
|
+
module Log4ever
|
18
|
+
VERSION = '0.0.1'
|
19
|
+
class TypeError < StandardError; end
|
20
|
+
module ShiftAge
|
21
|
+
DAILY = 1
|
22
|
+
WEEKLY = 2
|
23
|
+
MONTHLY = 3
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
module Log4r
|
28
|
+
include Log4ever
|
29
|
+
class MyEvernote
|
30
|
+
@@note_store = nil
|
31
|
+
def initialize(env, auth_token)
|
32
|
+
if @@note_store.nil?
|
33
|
+
@env = env
|
34
|
+
@@auth_token = auth_token
|
35
|
+
userStoreTransport = Thrift::HTTPClientTransport.new(@env)
|
36
|
+
userStoreProtocol = Thrift::BinaryProtocol.new(userStoreTransport)
|
37
|
+
user_store = Evernote::EDAM::UserStore::UserStore::Client.new(userStoreProtocol)
|
38
|
+
noteStoreUrl = user_store.getNoteStoreUrl(@@auth_token)
|
39
|
+
noteStoreTransport = Thrift::HTTPClientTransport.new(noteStoreUrl)
|
40
|
+
noteStoreProtocol = Thrift::BinaryProtocol.new(noteStoreTransport)
|
41
|
+
@@note_store = Evernote::EDAM::NoteStore::NoteStore::Client.new(noteStoreProtocol)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# get registered notebook or create new notebook
|
46
|
+
def get_notebook(notebook_name, stack_name)
|
47
|
+
Notebook.new(notebook_name, stack_name)
|
48
|
+
end
|
49
|
+
|
50
|
+
# get registered note or create new note
|
51
|
+
def get_note(notebook_obj)
|
52
|
+
Note.new(notebook_obj)
|
53
|
+
end
|
54
|
+
|
55
|
+
# get registerd tag list
|
56
|
+
def get_tags(tag_names)
|
57
|
+
tag_names.map{|tag_name| get_tag(tag_name)}
|
58
|
+
end
|
59
|
+
|
60
|
+
# get registered tag object
|
61
|
+
def get_tag(tag_name)
|
62
|
+
return if tag_name.empty?
|
63
|
+
tag_name = to_ascii(tag_name)
|
64
|
+
@@note_store.listTags(@@auth_token).each do |tag|
|
65
|
+
return tag if tag_name == tag.name
|
66
|
+
end
|
67
|
+
nil
|
68
|
+
end
|
69
|
+
|
70
|
+
def to_ascii(str)
|
71
|
+
str.force_encoding("ASCII-8BIT") unless str.nil?
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
class Notebook < MyEvernote
|
76
|
+
def initialize(notebook_name, stack_name)
|
77
|
+
return unless @notebook.nil?
|
78
|
+
@@note_store.listNotebooks(@@auth_token).each do |notebook|
|
79
|
+
notebook_name = to_ascii(notebook_name)
|
80
|
+
stack_name = to_ascii(stack_name)
|
81
|
+
if notebook.name == notebook_name && notebook.stack == stack_name
|
82
|
+
@notebook = notebook
|
83
|
+
break
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def guid; @notebook.guid end
|
89
|
+
|
90
|
+
# clear notebook object
|
91
|
+
def clear
|
92
|
+
@notebook = nil
|
93
|
+
initialize(@env, @@auth_token)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
class Note < MyEvernote
|
98
|
+
XML_TEMPLATE_BYTE = 237
|
99
|
+
|
100
|
+
def initialize(notebook)
|
101
|
+
return unless @params.nil? || @params.empty?
|
102
|
+
@params = {}
|
103
|
+
@notebook = notebook
|
104
|
+
if !@notebook.kind_of? Notebook
|
105
|
+
raise TypeError, 'Expected kind of Notebook, got #{@notebook.class}', caller
|
106
|
+
elsif !@notebook.respond_to? 'guid'
|
107
|
+
raise NoMethodError, '#{@notebook.class} do not has method: guid', caller
|
108
|
+
end
|
109
|
+
getNote
|
110
|
+
end
|
111
|
+
|
112
|
+
# content size
|
113
|
+
def size
|
114
|
+
content.bytesize > 0 ? content.bytesize - XML_TEMPLATE_BYTE : 0
|
115
|
+
end
|
116
|
+
|
117
|
+
# note guid
|
118
|
+
def guid; @note.guid end
|
119
|
+
|
120
|
+
# set new title
|
121
|
+
def title=(str)
|
122
|
+
@params[:title] = to_ascii(str)
|
123
|
+
end
|
124
|
+
|
125
|
+
# set tags
|
126
|
+
def tags=(list)
|
127
|
+
@params[:tagGuids] = list
|
128
|
+
end
|
129
|
+
|
130
|
+
# append content
|
131
|
+
def addContent(text)
|
132
|
+
new_html = "<div style='font-family: Courier New'>#{text}</div>"
|
133
|
+
content_xml.at('en-note').inner_html += new_html
|
134
|
+
@params[:content] = @content_ = to_ascii(content_xml.to_xml)
|
135
|
+
end
|
136
|
+
|
137
|
+
# set new content
|
138
|
+
def content=(text)
|
139
|
+
@params[:content] = @content_ = to_ascii("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n" +
|
140
|
+
"<!DOCTYPE en-note SYSTEM \"http://xml.evernote.com/pub/enml2.dtd\">\n" +
|
141
|
+
"<en-note style=\"word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;\">\n" +
|
142
|
+
"<div style=\"font-family: Courier New\">#{text}</div></en-note>")
|
143
|
+
end
|
144
|
+
|
145
|
+
# create note
|
146
|
+
def create
|
147
|
+
@@note_store.createNote(@@auth_token, createNote)
|
148
|
+
clear
|
149
|
+
end
|
150
|
+
|
151
|
+
# update note
|
152
|
+
def update
|
153
|
+
@@note_store.updateNote(@@auth_token, updateNote)
|
154
|
+
end
|
155
|
+
|
156
|
+
# clear note object
|
157
|
+
def clear
|
158
|
+
@params = {}
|
159
|
+
@note = @content_ = @content_xml = nil
|
160
|
+
initialize(@notebook)
|
161
|
+
end
|
162
|
+
|
163
|
+
def getNote
|
164
|
+
filter = Evernote::EDAM::NoteStore::NoteFilter.new
|
165
|
+
filter.order = Evernote::EDAM::Type::NoteSortOrder::CREATED
|
166
|
+
filter.notebookGuid = @notebook.guid
|
167
|
+
filter.timeZone = "Asia/Tokyo"
|
168
|
+
filter.ascending = false # descending
|
169
|
+
note_list = @@note_store.findNotes(@@auth_token, filter, 0, 1)
|
170
|
+
if note_list.notes.empty?
|
171
|
+
Logger.log_internal { "Note not found at #{@notebook.guid}" }
|
172
|
+
@note = Evernote::EDAM::Type::Note.new
|
173
|
+
else
|
174
|
+
@note = note_list.notes[0]
|
175
|
+
end
|
176
|
+
@note
|
177
|
+
end
|
178
|
+
|
179
|
+
# create note object
|
180
|
+
def createNote
|
181
|
+
@note = Evernote::EDAM::Type::Note.new
|
182
|
+
@note.notebookGuid = @notebook.guid
|
183
|
+
@params.each{|method, value| @note.send("#{method.to_s}=", value)}
|
184
|
+
@note
|
185
|
+
end
|
186
|
+
|
187
|
+
# get note object
|
188
|
+
def updateNote
|
189
|
+
getNote if @note.nil?
|
190
|
+
@note.content = @params[:content]
|
191
|
+
@note
|
192
|
+
end
|
193
|
+
|
194
|
+
# get note content text
|
195
|
+
def content
|
196
|
+
return @content_ unless @content_.nil?
|
197
|
+
@content_ = !@note.nil? && !@note.guid.nil? ? @@note_store.getNoteContent(@@auth_token, @note.guid) : ""
|
198
|
+
end
|
199
|
+
|
200
|
+
# get note content xml object
|
201
|
+
def content_xml
|
202
|
+
return @content_xml unless @content_xml.nil?
|
203
|
+
@content_xml = Nokogiri::XML(content)
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|
@@ -0,0 +1,156 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'nokogiri'
|
3
|
+
require 'log4r/outputter/outputter'
|
4
|
+
require "log4r/staticlogger"
|
5
|
+
require 'active_support'
|
6
|
+
require 'active_support/time'
|
7
|
+
require 'active_support/core_ext'
|
8
|
+
|
9
|
+
module Log4r
|
10
|
+
class EvernoteOutputter < Outputter
|
11
|
+
SANDBOX_HOST = 'sandbox.evernote.com'
|
12
|
+
PRODUCTION_HOST = 'www.evernote.com'
|
13
|
+
|
14
|
+
def initialize(_name, hash = {})
|
15
|
+
super(_name, hash)
|
16
|
+
validate(hash)
|
17
|
+
end
|
18
|
+
|
19
|
+
# validation of evernote parameters
|
20
|
+
def validate(hash)
|
21
|
+
set_maxsize(hash) # for rolling
|
22
|
+
set_shift_age(hash) # for roling
|
23
|
+
|
24
|
+
env = hash[:env] || hash['env'] || 'sandbox'
|
25
|
+
if env == 'sandbox'
|
26
|
+
@env = "https://#{SANDBOX_HOST}/edam/user"
|
27
|
+
elsif env == 'production'
|
28
|
+
@env = "https://#{PRODUCTION_HOST}/edam/user"
|
29
|
+
else
|
30
|
+
raise ArgumentError, "Must specify from env 'sandbox' or 'production'"
|
31
|
+
end
|
32
|
+
@auth_token = hash[:auth_token] || hash['auth_token'] || ""
|
33
|
+
raise ArgumentError, "Must specify from auth token" if @auth_token.empty?
|
34
|
+
@evernote = MyEvernote.new(@env, @auth_token)
|
35
|
+
notebook = hash[:notebook] || hash['notebook'] || ""
|
36
|
+
raise ArgumentError, "Must specify from notebook" if notebook.empty?
|
37
|
+
tags = @evernote.get_tags(hash[:tags] || hash['tags'] || [])
|
38
|
+
stack = hash[:stack] || hash['stack']
|
39
|
+
@evernote = MyEvernote.new(@env, @auth_token)
|
40
|
+
@notebook = @evernote.get_notebook(notebook, stack)
|
41
|
+
@note = @evernote.get_note(@notebook)
|
42
|
+
@tags = tags.map{|tag_obj| tag_obj.guid}
|
43
|
+
end
|
44
|
+
|
45
|
+
def canonical_log(logevent); super end
|
46
|
+
|
47
|
+
def write(content)
|
48
|
+
@content = content
|
49
|
+
if note_size_requires_roll? || time_requires_roll?
|
50
|
+
create_log
|
51
|
+
else
|
52
|
+
update_log
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
def create_log
|
58
|
+
@note.clear
|
59
|
+
@note.title = @name + " - " + Time.now.strftime("%Y-%m-%d %H:%M:%S")
|
60
|
+
@note.tags = @tags
|
61
|
+
@note.content = @content
|
62
|
+
@note.create
|
63
|
+
Logger.log_internal { "Create note: #{@note.guid}" }
|
64
|
+
end
|
65
|
+
|
66
|
+
def update_log
|
67
|
+
@note.addContent(@content)
|
68
|
+
@note.update
|
69
|
+
Logger.log_internal { "Update note: #{@note.guid}" }
|
70
|
+
end
|
71
|
+
|
72
|
+
# more expensive, only for startup
|
73
|
+
def note_size_requires_roll?
|
74
|
+
@note.size == 0 || (@maxsize > 0 && @note.size >= @maxsize)
|
75
|
+
end
|
76
|
+
|
77
|
+
def time_requires_roll?
|
78
|
+
!@endTime.nil? && Time.now.to_i >= @endTime
|
79
|
+
end
|
80
|
+
|
81
|
+
def set_maxsize(options)
|
82
|
+
if options.has_key?(:maxsize) || options.has_key?('maxsize')
|
83
|
+
maxsize = options[:maxsize] || options['maxsize']
|
84
|
+
|
85
|
+
multiplier = 1
|
86
|
+
if (maxsize =~ /\d+KB/)
|
87
|
+
multiplier = 1024
|
88
|
+
elsif (maxsize =~ /\d+MB/)
|
89
|
+
multiplier = 1024 * 1024
|
90
|
+
elsif (maxsize =~ /\d+GB/)
|
91
|
+
multiplier = 1024 * 1024 * 1024
|
92
|
+
end
|
93
|
+
|
94
|
+
_maxsize = maxsize.to_i * multiplier
|
95
|
+
|
96
|
+
if _maxsize.class != Fixnum and _maxsize.class != Bignum
|
97
|
+
raise TypeError, "Argument 'maxsize' must be an Fixnum", caller
|
98
|
+
end
|
99
|
+
if _maxsize == 0
|
100
|
+
raise TypeError, "Argument 'maxsize' must be > 0", caller
|
101
|
+
end
|
102
|
+
@maxsize = _maxsize
|
103
|
+
else
|
104
|
+
@maxsize = 0
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def set_maxtime(options)
|
109
|
+
if options.has_key?(:maxtime) || options.has_key?('maxtime')
|
110
|
+
_maxtime = (options[:maxtime] or options['maxtime']).to_i
|
111
|
+
if _maxtime.class != Fixnum
|
112
|
+
raise TypeError, "Argument 'maxtime' must be an Fixnum", caller
|
113
|
+
end
|
114
|
+
if _maxtime == 0
|
115
|
+
raise TypeError, "Argument 'maxtime' must be > 0", caller
|
116
|
+
end
|
117
|
+
@maxtime = _maxtime
|
118
|
+
@startTime = Time.now
|
119
|
+
else
|
120
|
+
@maxtime = 0
|
121
|
+
@startTime = 0
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
def set_shift_age(options)
|
126
|
+
if options.has_key?(:shift_age) || options.has_key?('shift_age')
|
127
|
+
_shift_age = (options[:shift_age] or options['shift_age']).to_i
|
128
|
+
if _shift_age.class != Fixnum
|
129
|
+
raise TypeError, "Argument 'shift_age' must be an Fixnum", caller
|
130
|
+
end
|
131
|
+
unless _shift_age.nil?
|
132
|
+
unless [Log4ever::ShiftAge::DAILY, Log4ever::ShiftAge::WEEKLY,
|
133
|
+
Log4ever::ShiftAge::MONTHLY].include? _shift_age
|
134
|
+
raise TypeError, "Argument 'shift_age' must be > 0", caller
|
135
|
+
end
|
136
|
+
|
137
|
+
now = Time.now
|
138
|
+
case _shift_age
|
139
|
+
when Log4ever::ShiftAge::DAILY
|
140
|
+
tomorrow = Time.local(now.tomorrow.year, now.tomorrow.month, now.tomorrow.day)
|
141
|
+
@endTime = tomorrow.to_i
|
142
|
+
when Log4ever::ShiftAge::WEEKLY
|
143
|
+
next_week = Time.local(now.next_week.year, now.next_week.month, now.next_week.day)
|
144
|
+
@endTime = next_week.to_i
|
145
|
+
when Log4ever::ShiftAge::MONTHLY
|
146
|
+
next_month = Time.local(now.next_month.year, now.next_month.month, now.next_month.day)
|
147
|
+
@endTime = next_month.to_i
|
148
|
+
else
|
149
|
+
raise TypeError, "Argument 'shift_age' must be '1' or '2' or '3'", caller
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
$: << File.dirname(__FILE__) + "/../lib"
|
3
|
+
require 'log4r'
|
4
|
+
require 'log4r/evernote'
|
5
|
+
require 'log4r/configurator'
|
6
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec/spec_helper')
|
7
|
+
|
8
|
+
describe Log4ever, 'が実行する処理' do
|
9
|
+
include Log4r
|
10
|
+
LOGGER_NAME = 'Log4ever'
|
11
|
+
|
12
|
+
before do
|
13
|
+
@formatter = PatternFormatter.new(
|
14
|
+
:pattern => "%d %C[%l]: %M ",
|
15
|
+
:date_format => "%Y/%m/%d %H:%M:%Sm"
|
16
|
+
)
|
17
|
+
@params = {
|
18
|
+
:env => "production",
|
19
|
+
:auth_token => Log4ever::evernote_auth,
|
20
|
+
:stack => "Log4ever",
|
21
|
+
:notebook => "DevelopmentLog",
|
22
|
+
:tags => ['Log'],
|
23
|
+
:maxsize => 500,
|
24
|
+
#:shift_age => Log4ever::ShiftAge::DAILY,
|
25
|
+
:formatter => @formatter
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
let(:logger) {Logger.new(LOGGER_NAME)}
|
30
|
+
let(:evernoteOutputter) {
|
31
|
+
EvernoteOutputter.new('evernote', @params)
|
32
|
+
}
|
33
|
+
|
34
|
+
before do
|
35
|
+
@config_xml = Log4ever::config_xml
|
36
|
+
end
|
37
|
+
|
38
|
+
describe 'Log4rのEvernote書き出し処理' do
|
39
|
+
it '書き出しが成功すること' do
|
40
|
+
log_content = "aaa"
|
41
|
+
formatter_content = "\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\s.*?\[.*?\]:\s(.*)\\n"
|
42
|
+
|
43
|
+
logger.outputters = evernoteOutputter
|
44
|
+
logger.debug(log_content)
|
45
|
+
|
46
|
+
@evernote = MyEvernote.new(@params[:env], @params[:auth_token])
|
47
|
+
@notebook = @evernote.get_notebook(@params[:notebook], @params[:stack])
|
48
|
+
@note = @evernote.get_note(@notebook)
|
49
|
+
write_log = @note.content_xml.children[1].children.reverse[1].text
|
50
|
+
if /\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\s.*?\[.*?\]:\s(.*)/ =~ write_log
|
51
|
+
log_content.should == $1.strip
|
52
|
+
else
|
53
|
+
"".should be_nil
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe 'Log4rの初期化処理(正常系)' do
|
59
|
+
it 'パラメータのチェックでエラーが出ないこと' do
|
60
|
+
logger.outputters = EvernoteOutputter.new(LOGGER_NAME, @params)
|
61
|
+
logger.name.should == LOGGER_NAME
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'XMLから読み込んだパラメータのチェックでエラーが出ないこと' do
|
65
|
+
Configurator.load_xml_file(@config_xml).should_not be_nil
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe 'Log4rの初期化処理(異常系)' do
|
70
|
+
it "envパラメータのチェックでエラーが出ること" do
|
71
|
+
proc {
|
72
|
+
logger.outputters = EvernoteOutputter.new(LOGGER_NAME, @params.merge(
|
73
|
+
:env => "aaa"
|
74
|
+
))
|
75
|
+
}.should raise_error(ArgumentError)
|
76
|
+
end
|
77
|
+
|
78
|
+
it "auth_token必須パラメータのチェックでエラーが出ること" do
|
79
|
+
proc {
|
80
|
+
logger.outputters = EvernoteOutputter.new(LOGGER_NAME, @params.merge(
|
81
|
+
:auth_token => nil
|
82
|
+
))
|
83
|
+
}.should raise_error(ArgumentError)
|
84
|
+
end
|
85
|
+
|
86
|
+
it "notebook必須パラメータのチェックでエラーが出ること" do
|
87
|
+
proc {
|
88
|
+
logger.outputters = EvernoteOutputter.new(LOGGER_NAME, @params.merge(
|
89
|
+
:notebook => nil
|
90
|
+
))
|
91
|
+
}.should raise_error(ArgumentError)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'rspec'
|
2
|
+
|
3
|
+
module Log4ever
|
4
|
+
class << self
|
5
|
+
def config_xml
|
6
|
+
File.dirname(__FILE__) + "/../config/log4r.xml"
|
7
|
+
end
|
8
|
+
|
9
|
+
def evernote_auth
|
10
|
+
path = File.dirname(__FILE__) + "/../config/evernote.auth.yml"
|
11
|
+
YAML.load_file(path)["auth_token"]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
metadata
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: log4ever
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- mapserver2007
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-08-06 00:00:00.000000000 +09:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
description: log4ever is simple logger for evernote. It is available as an extension
|
16
|
+
of log4r.
|
17
|
+
email:
|
18
|
+
- mapserver2007@gmail.com
|
19
|
+
executables: []
|
20
|
+
extensions: []
|
21
|
+
extra_rdoc_files: []
|
22
|
+
files:
|
23
|
+
- .gitignore
|
24
|
+
- .project
|
25
|
+
- README.md
|
26
|
+
- config/evernote.auth.test.yml
|
27
|
+
- config/log4r.xml
|
28
|
+
- lib/log4r/evernote.rb
|
29
|
+
- lib/log4r/evernote/lib/Evernote/EDAM/errors_constants.rb
|
30
|
+
- lib/log4r/evernote/lib/Evernote/EDAM/errors_types.rb
|
31
|
+
- lib/log4r/evernote/lib/Evernote/EDAM/limits_constants.rb
|
32
|
+
- lib/log4r/evernote/lib/Evernote/EDAM/limits_types.rb
|
33
|
+
- lib/log4r/evernote/lib/Evernote/EDAM/note_store.rb
|
34
|
+
- lib/log4r/evernote/lib/Evernote/EDAM/note_store_constants.rb
|
35
|
+
- lib/log4r/evernote/lib/Evernote/EDAM/note_store_types.rb
|
36
|
+
- lib/log4r/evernote/lib/Evernote/EDAM/types_constants.rb
|
37
|
+
- lib/log4r/evernote/lib/Evernote/EDAM/types_types.rb
|
38
|
+
- lib/log4r/evernote/lib/Evernote/EDAM/user_store.rb
|
39
|
+
- lib/log4r/evernote/lib/Evernote/EDAM/user_store_constants.rb
|
40
|
+
- lib/log4r/evernote/lib/Evernote/EDAM/user_store_types.rb
|
41
|
+
- lib/log4r/evernote/lib/thrift.rb
|
42
|
+
- lib/log4r/evernote/lib/thrift/client.rb
|
43
|
+
- lib/log4r/evernote/lib/thrift/core_ext.rb
|
44
|
+
- lib/log4r/evernote/lib/thrift/core_ext/fixnum.rb
|
45
|
+
- lib/log4r/evernote/lib/thrift/exceptions.rb
|
46
|
+
- lib/log4r/evernote/lib/thrift/processor.rb
|
47
|
+
- lib/log4r/evernote/lib/thrift/protocol/base_protocol.rb
|
48
|
+
- lib/log4r/evernote/lib/thrift/protocol/binary_protocol.rb
|
49
|
+
- lib/log4r/evernote/lib/thrift/protocol/binary_protocol_accelerated.rb
|
50
|
+
- lib/log4r/evernote/lib/thrift/protocol/compact_protocol.rb
|
51
|
+
- lib/log4r/evernote/lib/thrift/serializer/deserializer.rb
|
52
|
+
- lib/log4r/evernote/lib/thrift/serializer/serializer.rb
|
53
|
+
- lib/log4r/evernote/lib/thrift/server/base_server.rb
|
54
|
+
- lib/log4r/evernote/lib/thrift/server/mongrel_http_server.rb
|
55
|
+
- lib/log4r/evernote/lib/thrift/server/nonblocking_server.rb
|
56
|
+
- lib/log4r/evernote/lib/thrift/server/simple_server.rb
|
57
|
+
- lib/log4r/evernote/lib/thrift/server/thread_pool_server.rb
|
58
|
+
- lib/log4r/evernote/lib/thrift/server/threaded_server.rb
|
59
|
+
- lib/log4r/evernote/lib/thrift/struct.rb
|
60
|
+
- lib/log4r/evernote/lib/thrift/struct_union.rb
|
61
|
+
- lib/log4r/evernote/lib/thrift/thrift_native.rb
|
62
|
+
- lib/log4r/evernote/lib/thrift/transport/base_server_transport.rb
|
63
|
+
- lib/log4r/evernote/lib/thrift/transport/base_transport.rb
|
64
|
+
- lib/log4r/evernote/lib/thrift/transport/buffered_transport.rb
|
65
|
+
- lib/log4r/evernote/lib/thrift/transport/framed_transport.rb
|
66
|
+
- lib/log4r/evernote/lib/thrift/transport/http_client_transport.rb
|
67
|
+
- lib/log4r/evernote/lib/thrift/transport/io_stream_transport.rb
|
68
|
+
- lib/log4r/evernote/lib/thrift/transport/memory_buffer_transport.rb
|
69
|
+
- lib/log4r/evernote/lib/thrift/transport/server_socket.rb
|
70
|
+
- lib/log4r/evernote/lib/thrift/transport/socket.rb
|
71
|
+
- lib/log4r/evernote/lib/thrift/transport/unix_server_socket.rb
|
72
|
+
- lib/log4r/evernote/lib/thrift/transport/unix_socket.rb
|
73
|
+
- lib/log4r/evernote/lib/thrift/types.rb
|
74
|
+
- lib/log4r/evernote/lib/thrift/union.rb
|
75
|
+
- lib/log4r/outputter/evernoteoutputter.rb
|
76
|
+
- spec/log4ever_spec.rb
|
77
|
+
- spec/spec_helper.rb
|
78
|
+
has_rdoc: true
|
79
|
+
homepage: https://github.com/mapserver2007/log4ever
|
80
|
+
licenses: []
|
81
|
+
post_install_message:
|
82
|
+
rdoc_options: []
|
83
|
+
require_paths:
|
84
|
+
- lib
|
85
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
86
|
+
none: false
|
87
|
+
requirements:
|
88
|
+
- - ! '>='
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
92
|
+
none: false
|
93
|
+
requirements:
|
94
|
+
- - ! '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
requirements: []
|
98
|
+
rubyforge_project:
|
99
|
+
rubygems_version: 1.6.2
|
100
|
+
signing_key:
|
101
|
+
specification_version: 3
|
102
|
+
summary: log4ever is simple logger for evernote.
|
103
|
+
test_files:
|
104
|
+
- spec/log4ever_spec.rb
|
105
|
+
- spec/spec_helper.rb
|