ro_daemon 0.0.4
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 +7 -0
- data/bin/ro_daemonize +3 -0
- data/lib/ro_daemon/daemon.rb +95 -0
- data/lib/ro_daemon/data.rb +48 -0
- data/lib/ro_daemon/helper.rb +7 -0
- data/lib/ro_daemon/mg.rb +67 -0
- data/spec/lib/ro_daemon/daemon_spec.rb +12 -0
- data/spec/rails_helper.rb +1 -0
- data/spec/spec_helper.rb +21 -0
- data/spec/try.rb +4 -0
- metadata +98 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 664d505f80465c4138d376b6b975cdf3bc8ccd2d
|
4
|
+
data.tar.gz: 88bf4d5bffa691aa145e8c0cae2a0b58eb88cda2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d92895f89bdc6786e6901fb9b3345909326271750cde3a9e26b7e5021f829cb0dd5a12794824657936736f27f620319ea27977cb9afb2dc2791080ef902f7ebe
|
7
|
+
data.tar.gz: e3c9729487cbb41e728eceea100be2a11b03c9d862c59d34ae1c4f447ca09722c10055a9b0112953cd737c1264e55668152aa0c0c49cbc0d76bf59f0e1962c5b
|
data/bin/ro_daemonize
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
require File.expand_path('../../../conf/ro_daemon', __FILE__)
|
2
|
+
|
3
|
+
require 'ro_thor'
|
4
|
+
require 'sqlite3'
|
5
|
+
require_relative 'data'
|
6
|
+
require_relative 'helper'
|
7
|
+
|
8
|
+
module RoDaemon
|
9
|
+
class Daemon < RoThor
|
10
|
+
include Helper
|
11
|
+
|
12
|
+
usg :daemonize
|
13
|
+
|
14
|
+
def daemonize(cmd, *args, &blk)
|
15
|
+
logs = Dir["#{logs_dir}/*.log"]
|
16
|
+
ms_cnn_db
|
17
|
+
|
18
|
+
d = Data::Daemon.new(cmd: cmd)
|
19
|
+
|
20
|
+
stdout, stderr = d.stdout, d.stderr
|
21
|
+
pid = spawn_daemon(cmd, stdout, stderr)
|
22
|
+
fix_db_err do
|
23
|
+
d.save
|
24
|
+
end
|
25
|
+
|
26
|
+
pid
|
27
|
+
end
|
28
|
+
|
29
|
+
def spawn_daemon(cmd, stdout, stderr)
|
30
|
+
pid = spawn(cmd, out: stdout, err: stderr)
|
31
|
+
puts
|
32
|
+
puts "spawn pid:#{pid} cmd:#{cmd}\nstdout: #{stdout}\nstderr: #{stderr}"
|
33
|
+
puts
|
34
|
+
pid
|
35
|
+
end
|
36
|
+
|
37
|
+
def fix_db_err(*args, &blk)
|
38
|
+
begin
|
39
|
+
yield
|
40
|
+
rescue ActiveRecord::StatementInvalid => e
|
41
|
+
if e.to_s.match(%r{Could not find table})
|
42
|
+
Data::Mg.st
|
43
|
+
yield
|
44
|
+
else
|
45
|
+
raise e
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def get_stdout_stderr(logs)
|
51
|
+
logs.select do |log|
|
52
|
+
Time.now - File.mtime(log) > 60.days and Data::Daemon.first(stdout: log).closed?
|
53
|
+
end.each do |f|
|
54
|
+
FileUtils.rm_f(f)
|
55
|
+
end
|
56
|
+
|
57
|
+
if Data::Daemon.count > 0
|
58
|
+
(1.. Data::Daemon.all.last.id)
|
59
|
+
end
|
60
|
+
|
61
|
+
unless test(?d, logs_dir)
|
62
|
+
FileUtils.mkdir(logs_dir)
|
63
|
+
end
|
64
|
+
|
65
|
+
stdout = File.open logs_dir("#{stdout_fn}.log"), 'w+'
|
66
|
+
stderr = File.open logs_dir("#{stdout_fn}_err.log"), "w+"
|
67
|
+
return stderr, stdout
|
68
|
+
end
|
69
|
+
|
70
|
+
def ms_cnn_db(*args, &blk)
|
71
|
+
@cnn ||= ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: db)
|
72
|
+
end
|
73
|
+
|
74
|
+
def db(*args, &blk)
|
75
|
+
_db = logs_dir('manager.sqlite')
|
76
|
+
|
77
|
+
if File.exist?(_db)
|
78
|
+
return _db
|
79
|
+
end
|
80
|
+
|
81
|
+
begin
|
82
|
+
sh "sqlite3 dbname.sqlite .dump"
|
83
|
+
rescue ShErr => e
|
84
|
+
if e.to_s.match(%r{command not found})
|
85
|
+
sh "sudo apt-get install sqlite3 -y"
|
86
|
+
sh "sqlite3 dbname.sqlite .dump"
|
87
|
+
else
|
88
|
+
raise e
|
89
|
+
end
|
90
|
+
end
|
91
|
+
_db
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'active_record'
|
2
|
+
require_relative 'mg'
|
3
|
+
require 'ro_thor'
|
4
|
+
require 'ro_thor/sh'
|
5
|
+
require_relative 'helper'
|
6
|
+
|
7
|
+
module RoDaemon
|
8
|
+
module Data
|
9
|
+
class Daemon < ActiveRecord::Base
|
10
|
+
|
11
|
+
class << self
|
12
|
+
include RoDaemon::Helper
|
13
|
+
def new(*args, &blk)
|
14
|
+
r = super
|
15
|
+
r.stdout = logs_dir("#{r.id}.log")
|
16
|
+
r.stderr = logs_dir("#{r.id}_err.log")
|
17
|
+
r
|
18
|
+
end
|
19
|
+
|
20
|
+
def create(*args, &blk)
|
21
|
+
r = super
|
22
|
+
puts "create #{self}"
|
23
|
+
r
|
24
|
+
end
|
25
|
+
end
|
26
|
+
include RoThor::Sh
|
27
|
+
|
28
|
+
def closed?(*args, &blk)
|
29
|
+
begin
|
30
|
+
sh "ps --pid #{pid}"
|
31
|
+
true
|
32
|
+
rescue ShErr => e
|
33
|
+
if e.stdout.match(%r{PID TTY TIME CMD\n})
|
34
|
+
false
|
35
|
+
else
|
36
|
+
raise e
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
class Mg < RoDaemon::Mg
|
43
|
+
def up(*args, &blk)
|
44
|
+
ms_tab(:daemons, pid: :integer, cmd: :string, stdout: :string, stderr: :string)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/lib/ro_daemon/mg.rb
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'active_record'
|
2
|
+
require 'ro_thor'
|
3
|
+
module RoDaemon
|
4
|
+
class Mg < ::ActiveRecord::Migration
|
5
|
+
class << self
|
6
|
+
def st(*args, &blk)
|
7
|
+
if block_given?
|
8
|
+
kls = Class.new(self)
|
9
|
+
kls.class_eval &blk
|
10
|
+
kls.st
|
11
|
+
else
|
12
|
+
migrate(:up)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def mst(*args, &blk)
|
18
|
+
ms_tab(*args, &blk)
|
19
|
+
end
|
20
|
+
|
21
|
+
def ms_tab(tab, attr_name_types=nil, *args, &blk)
|
22
|
+
attr_name_types ||= {}
|
23
|
+
unless exist?(tab)
|
24
|
+
create :"#{tab}" do |t|
|
25
|
+
t.timestamps null: false
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
attr_name_types.each do |name, type|
|
30
|
+
unless exist_col?(tab, name)
|
31
|
+
add_col(tab, name, type)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def add_col(*args, &blk)
|
37
|
+
add_column(*args, &blk)
|
38
|
+
end
|
39
|
+
|
40
|
+
def change_col(*args, &blk)
|
41
|
+
change_column(*args, &blk)
|
42
|
+
end
|
43
|
+
|
44
|
+
def exist_col?(*args, &blk)
|
45
|
+
column_exists?(*args, &blk)
|
46
|
+
end
|
47
|
+
|
48
|
+
def rm_col(*args, &blk)
|
49
|
+
remove_column(*args, &blk)
|
50
|
+
end
|
51
|
+
|
52
|
+
def create(*args, &blk)
|
53
|
+
create_table(*args, &blk)
|
54
|
+
end
|
55
|
+
|
56
|
+
def exist?(*args, &blk)
|
57
|
+
table_exists?(*args, &blk)
|
58
|
+
end
|
59
|
+
|
60
|
+
def del(name, *args, &blk)
|
61
|
+
if exist?(name)
|
62
|
+
drop_table(name, *args, &blk)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require_relative 'spec_helper'
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'spork'
|
3
|
+
|
4
|
+
|
5
|
+
Spork.prefork do
|
6
|
+
|
7
|
+
|
8
|
+
require 'pj'
|
9
|
+
Pj.set_test
|
10
|
+
|
11
|
+
require 'ro_rspec_helpers_plus'
|
12
|
+
|
13
|
+
RoRspec.spec = __dir__
|
14
|
+
|
15
|
+
require File.expand_path("../../conf/ro_daemon", __FILE__)
|
16
|
+
|
17
|
+
module RoDaemon
|
18
|
+
extend PjHelper
|
19
|
+
autoload_all "ro_daemon"
|
20
|
+
end
|
21
|
+
end
|
data/spec/try.rb
ADDED
metadata
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ro_daemon
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.4
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- ''
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-04-03 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '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'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: ro_thor
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
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: sqlite3
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: ''
|
56
|
+
email:
|
57
|
+
- ''
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- bin/ro_daemonize
|
63
|
+
- lib/ro_daemon/daemon.rb
|
64
|
+
- lib/ro_daemon/data.rb
|
65
|
+
- lib/ro_daemon/helper.rb
|
66
|
+
- lib/ro_daemon/mg.rb
|
67
|
+
- spec/lib/ro_daemon/daemon_spec.rb
|
68
|
+
- spec/rails_helper.rb
|
69
|
+
- spec/spec_helper.rb
|
70
|
+
- spec/try.rb
|
71
|
+
homepage: ''
|
72
|
+
licenses: []
|
73
|
+
metadata: {}
|
74
|
+
post_install_message:
|
75
|
+
rdoc_options: []
|
76
|
+
require_paths:
|
77
|
+
- lib
|
78
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - ">="
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
88
|
+
requirements: []
|
89
|
+
rubyforge_project:
|
90
|
+
rubygems_version: 2.4.5
|
91
|
+
signing_key:
|
92
|
+
specification_version: 4
|
93
|
+
summary: ''
|
94
|
+
test_files:
|
95
|
+
- spec/lib/ro_daemon/daemon_spec.rb
|
96
|
+
- spec/spec_helper.rb
|
97
|
+
- spec/rails_helper.rb
|
98
|
+
- spec/try.rb
|