ass_maintainer-info_base 0.1.2 → 1.0.0
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/.gitignore +0 -0
- data/.simplecov +0 -0
- data/.travis.yml +0 -0
- data/Gemfile +0 -0
- data/LICENSE.txt +0 -0
- data/README.md +94 -15
- data/Rakefile +0 -0
- data/ass_maintainer-info_base.gemspec +4 -1
- data/bin/runsrv +241 -0
- data/examples/describe_infobase.rb +0 -0
- data/lib/ass_maintainer/info_base.rb +79 -73
- data/lib/ass_maintainer/info_base/cfg.rb +14 -10
- data/lib/ass_maintainer/info_base/config.rb +0 -0
- data/lib/ass_maintainer/info_base/default_maker.rb +0 -0
- data/lib/ass_maintainer/info_base/file_ib.rb +24 -41
- data/lib/ass_maintainer/info_base/interfaces.rb +49 -20
- data/lib/ass_maintainer/info_base/server_ib.rb +257 -55
- data/lib/ass_maintainer/info_base/server_ib/enterprise_servers.rb +80 -0
- data/lib/ass_maintainer/info_base/server_ib/enterprise_servers/cluster.rb +114 -0
- data/lib/ass_maintainer/info_base/server_ib/enterprise_servers/server_agent.rb +91 -0
- data/lib/ass_maintainer/info_base/server_ib/enterprise_servers/support.rb +200 -0
- data/lib/ass_maintainer/info_base/server_ib/enterprise_servers/wp_connection.rb +198 -0
- data/lib/ass_maintainer/info_base/version.rb +1 -1
- metadata +72 -26
- data/lib/ass_maintainer/info_base/server_ib/helpers.rb +0 -50
@@ -0,0 +1,198 @@
|
|
1
|
+
module AssMaintainer
|
2
|
+
class InfoBase
|
3
|
+
module ServerIb
|
4
|
+
require 'ass_ole'
|
5
|
+
module EnterpriseServers
|
6
|
+
# @api private
|
7
|
+
# Object for comunication with 1C Working process.
|
8
|
+
# @example
|
9
|
+
# wp_connection = WpConnection.new(wp_info).connect(infobase_wrapper)
|
10
|
+
module WpConnection
|
11
|
+
# Drop infobase modes defines what should do with infobase's database.
|
12
|
+
# - 0 - databse willn't be deleted
|
13
|
+
# - 1 - databse will be deleted
|
14
|
+
# - 2 - database willn't be deleted but will be cleared
|
15
|
+
DROP_MODES = {alive_db: 0, destroy_db: 1, clear_db: 2}.freeze
|
16
|
+
|
17
|
+
include Support::OleRuntime
|
18
|
+
include Support::InfoBaseFind
|
19
|
+
include Support::Reconnect
|
20
|
+
|
21
|
+
# Make new object of anonymous class which included this module.
|
22
|
+
# @param wp_info (see #initialize)
|
23
|
+
def self.new(wp_info)
|
24
|
+
Class.new do
|
25
|
+
include WpConnection
|
26
|
+
end.new wp_info
|
27
|
+
end
|
28
|
+
|
29
|
+
attr_reader :infobase_wrapper
|
30
|
+
|
31
|
+
attr_reader :wp_info
|
32
|
+
|
33
|
+
# @param wp_info [Wrappers::WorkingProcessInfo]
|
34
|
+
def initialize(wp_info)
|
35
|
+
@wp_info = wp_info
|
36
|
+
end
|
37
|
+
|
38
|
+
def runtime_type
|
39
|
+
:wp
|
40
|
+
end
|
41
|
+
|
42
|
+
def sagent
|
43
|
+
wp_info.sagent
|
44
|
+
end
|
45
|
+
|
46
|
+
def cluster
|
47
|
+
wp_info.cluster
|
48
|
+
end
|
49
|
+
|
50
|
+
def host_port
|
51
|
+
"#{wp_info.HostName}:#{wp_info.MainPort}"
|
52
|
+
end
|
53
|
+
|
54
|
+
def user
|
55
|
+
infobase_wrapper.ib.usr.to_s
|
56
|
+
end
|
57
|
+
|
58
|
+
def pass
|
59
|
+
infobase_wrapper.ib.pwd.to_s
|
60
|
+
end
|
61
|
+
|
62
|
+
def ping?
|
63
|
+
wp_info.ping?
|
64
|
+
end
|
65
|
+
|
66
|
+
# @param infobase_wrapper [InfoBaseWrapper]
|
67
|
+
def connect(infobase_wrapper)
|
68
|
+
@infobase_wrapper = infobase_wrapper
|
69
|
+
_connect host_port, sagent.platform_require
|
70
|
+
end
|
71
|
+
|
72
|
+
def ib_ref
|
73
|
+
infobase_wrapper.ib_ref
|
74
|
+
end
|
75
|
+
|
76
|
+
def authenticate
|
77
|
+
AuthenticateAdmin(cluster.user.to_s, cluster.password.to_s)
|
78
|
+
authenticate_infobase_admin
|
79
|
+
end
|
80
|
+
|
81
|
+
def authenticate_infobase_admin
|
82
|
+
AddAuthentication(user, pass)
|
83
|
+
ole_connector.GetInfoBaseConnections(ib_info_create)
|
84
|
+
true
|
85
|
+
end
|
86
|
+
|
87
|
+
def ib_info_create
|
88
|
+
ii = createInfoBaseInfo
|
89
|
+
ii.Name = ib_ref
|
90
|
+
ii
|
91
|
+
end
|
92
|
+
|
93
|
+
def authenticate?
|
94
|
+
false
|
95
|
+
end
|
96
|
+
|
97
|
+
def infobase_exists?
|
98
|
+
infobase_include? ib_ref
|
99
|
+
end
|
100
|
+
|
101
|
+
def drop_infobase!(mode)
|
102
|
+
fail ArgumentError, "Invalid mode #{mode}" unless DROP_MODES[mode]
|
103
|
+
lock_infobase!(nil, nil, "BEFORE DROP INFOBASE", '')
|
104
|
+
DropInfoBase(infobase_info, DROP_MODES[mode])
|
105
|
+
end
|
106
|
+
|
107
|
+
def infobase_info
|
108
|
+
fail 'Infobase not exists' unless infobase_exists?
|
109
|
+
authenticate_infobase_admin
|
110
|
+
infobase_find ib_ref
|
111
|
+
end
|
112
|
+
|
113
|
+
def locked?
|
114
|
+
ii = infobase_info
|
115
|
+
ii.SessionsDenied
|
116
|
+
end
|
117
|
+
|
118
|
+
def connections
|
119
|
+
GetInfoBaseConnections(infobase_info)
|
120
|
+
end
|
121
|
+
|
122
|
+
def lock_sessions!(from, to, code, mess)
|
123
|
+
fail ArgumentError, 'Permission code won\'t be empty' if\
|
124
|
+
code.to_s.empty?
|
125
|
+
ii = infobase_info
|
126
|
+
ii.DeniedFrom = (from.nil? ? Date.parse('1973.09.07') : from).to_time
|
127
|
+
ii.DeniedTo = (to.nil? ? Date.parse('2073.09.07') : to).to_time
|
128
|
+
ii.DeniedMessage = mess.to_s
|
129
|
+
ii.SessionsDenied = true
|
130
|
+
ii.PermissionCode = code
|
131
|
+
UpdateInfoBase(ii)
|
132
|
+
end
|
133
|
+
|
134
|
+
def drop_sessions
|
135
|
+
infobase_wrapper.sessions.each do |sess|
|
136
|
+
sess.terminate
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
def drop_connections
|
141
|
+
connections.each do |conn|
|
142
|
+
Disconnect(conn)
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
def lock_infobase!(from, to, code, mess)
|
147
|
+
lock_sessions!(from, to, code, mess)
|
148
|
+
lock_schjobs!
|
149
|
+
drop_sessions
|
150
|
+
drop_connections
|
151
|
+
end
|
152
|
+
|
153
|
+
def unlock_sessions!
|
154
|
+
ii = infobase_info
|
155
|
+
ii.DeniedFrom = Date.parse('1973.09.07').to_time
|
156
|
+
ii.DeniedTo = Date.parse('1973.09.07').to_time
|
157
|
+
ii.DeniedMessage = ''
|
158
|
+
ii.SessionsDenied = false
|
159
|
+
ii.PermissionCode = ''
|
160
|
+
UpdateInfoBase(ii)
|
161
|
+
end
|
162
|
+
|
163
|
+
def lock_schjobs!
|
164
|
+
ii = infobase_info
|
165
|
+
ii.ScheduledJobsDenied = true
|
166
|
+
UpdateInfoBase(ii)
|
167
|
+
end
|
168
|
+
|
169
|
+
def unlock_schjobs!
|
170
|
+
ii = infobase_info
|
171
|
+
ii.ScheduledJobsDenied = false
|
172
|
+
UpdateInfoBase(ii)
|
173
|
+
end
|
174
|
+
|
175
|
+
def infobases
|
176
|
+
reconnect
|
177
|
+
getInfoBases
|
178
|
+
end
|
179
|
+
|
180
|
+
def _reconnect_required?
|
181
|
+
getInfoBases.empty?
|
182
|
+
end
|
183
|
+
private :reconnect_required?
|
184
|
+
|
185
|
+
def raise_unless_unlock_possable(err, unlock_code)
|
186
|
+
ii = infobase_info
|
187
|
+
return if !ii.SessionsDenied
|
188
|
+
return if ii.PermissionCode.to_s.empty?
|
189
|
+
return if unlock_code.to_s.downcase == ii.PermissionCode
|
190
|
+
.to_s.downcase
|
191
|
+
fail err, "Infobase is locked and PermissionCode:"\
|
192
|
+
" `#{ii.PermissionCode}' not match unlock_code: `#{unlock_code}'"
|
193
|
+
end
|
194
|
+
end
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
metadata
CHANGED
@@ -1,111 +1,153 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ass_maintainer-info_base
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Leonid Vlasov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-12-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ass_launcher
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: '0.3'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: '0.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: ass_ole
|
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: net-ping
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 2.0.0
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 2.0.0
|
27
55
|
- !ruby/object:Gem::Dependency
|
28
56
|
name: bundler
|
29
57
|
requirement: !ruby/object:Gem::Requirement
|
30
58
|
requirements:
|
31
|
-
- - ~>
|
59
|
+
- - "~>"
|
32
60
|
- !ruby/object:Gem::Version
|
33
61
|
version: '1.10'
|
34
62
|
type: :development
|
35
63
|
prerelease: false
|
36
64
|
version_requirements: !ruby/object:Gem::Requirement
|
37
65
|
requirements:
|
38
|
-
- - ~>
|
66
|
+
- - "~>"
|
39
67
|
- !ruby/object:Gem::Version
|
40
68
|
version: '1.10'
|
41
69
|
- !ruby/object:Gem::Dependency
|
42
70
|
name: rake
|
43
71
|
requirement: !ruby/object:Gem::Requirement
|
44
72
|
requirements:
|
45
|
-
- - ~>
|
73
|
+
- - "~>"
|
46
74
|
- !ruby/object:Gem::Version
|
47
75
|
version: '10.0'
|
48
76
|
type: :development
|
49
77
|
prerelease: false
|
50
78
|
version_requirements: !ruby/object:Gem::Requirement
|
51
79
|
requirements:
|
52
|
-
- - ~>
|
80
|
+
- - "~>"
|
53
81
|
- !ruby/object:Gem::Version
|
54
82
|
version: '10.0'
|
55
83
|
- !ruby/object:Gem::Dependency
|
56
84
|
name: minitest
|
57
85
|
requirement: !ruby/object:Gem::Requirement
|
58
86
|
requirements:
|
59
|
-
- -
|
87
|
+
- - ">="
|
60
88
|
- !ruby/object:Gem::Version
|
61
89
|
version: '0'
|
62
90
|
type: :development
|
63
91
|
prerelease: false
|
64
92
|
version_requirements: !ruby/object:Gem::Requirement
|
65
93
|
requirements:
|
66
|
-
- -
|
94
|
+
- - ">="
|
67
95
|
- !ruby/object:Gem::Version
|
68
96
|
version: '0'
|
69
97
|
- !ruby/object:Gem::Dependency
|
70
98
|
name: pry
|
71
99
|
requirement: !ruby/object:Gem::Requirement
|
72
100
|
requirements:
|
73
|
-
- -
|
101
|
+
- - ">="
|
74
102
|
- !ruby/object:Gem::Version
|
75
103
|
version: '0'
|
76
104
|
type: :development
|
77
105
|
prerelease: false
|
78
106
|
version_requirements: !ruby/object:Gem::Requirement
|
79
107
|
requirements:
|
80
|
-
- -
|
108
|
+
- - ">="
|
81
109
|
- !ruby/object:Gem::Version
|
82
110
|
version: '0'
|
83
111
|
- !ruby/object:Gem::Dependency
|
84
112
|
name: simplecov
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|
86
114
|
requirements:
|
87
|
-
- -
|
115
|
+
- - ">="
|
88
116
|
- !ruby/object:Gem::Version
|
89
117
|
version: '0'
|
90
118
|
type: :development
|
91
119
|
prerelease: false
|
92
120
|
version_requirements: !ruby/object:Gem::Requirement
|
93
121
|
requirements:
|
94
|
-
- -
|
122
|
+
- - ">="
|
95
123
|
- !ruby/object:Gem::Version
|
96
124
|
version: '0'
|
97
125
|
- !ruby/object:Gem::Dependency
|
98
126
|
name: mocha
|
99
127
|
requirement: !ruby/object:Gem::Requirement
|
100
128
|
requirements:
|
101
|
-
- -
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: clamp
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
102
144
|
- !ruby/object:Gem::Version
|
103
145
|
version: '0'
|
104
146
|
type: :development
|
105
147
|
prerelease: false
|
106
148
|
version_requirements: !ruby/object:Gem::Requirement
|
107
149
|
requirements:
|
108
|
-
- -
|
150
|
+
- - ">="
|
109
151
|
- !ruby/object:Gem::Version
|
110
152
|
version: '0'
|
111
153
|
description: Classes and utils for manipulate with 1C:Enterprise application instances
|
@@ -117,15 +159,16 @@ executables:
|
|
117
159
|
extensions: []
|
118
160
|
extra_rdoc_files: []
|
119
161
|
files:
|
120
|
-
- .gitignore
|
121
|
-
- .simplecov
|
122
|
-
- .travis.yml
|
162
|
+
- ".gitignore"
|
163
|
+
- ".simplecov"
|
164
|
+
- ".travis.yml"
|
123
165
|
- Gemfile
|
124
166
|
- LICENSE.txt
|
125
167
|
- README.md
|
126
168
|
- Rakefile
|
127
169
|
- ass_maintainer-info_base.gemspec
|
128
170
|
- bin/console
|
171
|
+
- bin/runsrv
|
129
172
|
- bin/setup
|
130
173
|
- examples/describe_infobase.rb
|
131
174
|
- exe/ass_maintainer-info_base
|
@@ -136,7 +179,11 @@ files:
|
|
136
179
|
- lib/ass_maintainer/info_base/file_ib.rb
|
137
180
|
- lib/ass_maintainer/info_base/interfaces.rb
|
138
181
|
- lib/ass_maintainer/info_base/server_ib.rb
|
139
|
-
- lib/ass_maintainer/info_base/server_ib/
|
182
|
+
- lib/ass_maintainer/info_base/server_ib/enterprise_servers.rb
|
183
|
+
- lib/ass_maintainer/info_base/server_ib/enterprise_servers/cluster.rb
|
184
|
+
- lib/ass_maintainer/info_base/server_ib/enterprise_servers/server_agent.rb
|
185
|
+
- lib/ass_maintainer/info_base/server_ib/enterprise_servers/support.rb
|
186
|
+
- lib/ass_maintainer/info_base/server_ib/enterprise_servers/wp_connection.rb
|
140
187
|
- lib/ass_maintainer/info_base/version.rb
|
141
188
|
homepage: https://github.com/leoniv/ass_maintainer-info_base
|
142
189
|
licenses:
|
@@ -148,19 +195,18 @@ require_paths:
|
|
148
195
|
- lib
|
149
196
|
required_ruby_version: !ruby/object:Gem::Requirement
|
150
197
|
requirements:
|
151
|
-
- -
|
198
|
+
- - ">="
|
152
199
|
- !ruby/object:Gem::Version
|
153
200
|
version: '0'
|
154
201
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
155
202
|
requirements:
|
156
|
-
- -
|
203
|
+
- - ">="
|
157
204
|
- !ruby/object:Gem::Version
|
158
205
|
version: '0'
|
159
206
|
requirements: []
|
160
207
|
rubyforge_project:
|
161
|
-
rubygems_version: 2.
|
208
|
+
rubygems_version: 2.6.13
|
162
209
|
signing_key:
|
163
210
|
specification_version: 4
|
164
211
|
summary: Manipulate with 1C:Enterprise application instances
|
165
212
|
test_files: []
|
166
|
-
has_rdoc:
|
@@ -1,50 +0,0 @@
|
|
1
|
-
module AssMaintainer
|
2
|
-
class InfoBase
|
3
|
-
module ServerIb
|
4
|
-
module EnterpriseServers
|
5
|
-
# Mixins for serever connection describers {Claster} {ServerAgent}
|
6
|
-
module ServerConnection
|
7
|
-
attr_reader :host_port, :user, :password
|
8
|
-
def initialize(host_port, user, password)
|
9
|
-
fail ArgumentError, 'Host name require' if host_port.to_s.empty?
|
10
|
-
@host_port = host_port.to_s
|
11
|
-
@user = user
|
12
|
-
@password = password
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
# Object descrbed 1C server agent connection
|
17
|
-
class ServerAgent
|
18
|
-
include ServerConnection
|
19
|
-
end
|
20
|
-
|
21
|
-
# Object descrbed 1C claster connection
|
22
|
-
class Claster
|
23
|
-
include ServerConnection
|
24
|
-
def self.from_cs(cs)
|
25
|
-
new cs.srvr, cs.susr, cs.spwd
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
# Wrapper for manipulate
|
31
|
-
# with real information base deployed in 1C:Enterprise server
|
32
|
-
# ower the 1C Ole classes
|
33
|
-
class InfoBaseWrapper
|
34
|
-
include Interfaces::InfoBaseWrapper
|
35
|
-
attr_accessor :infobase, :server_agent, :claster
|
36
|
-
# @api private
|
37
|
-
def initialize(infobase, server_agent, claster)
|
38
|
-
self.infobase = infobase
|
39
|
-
self.server_agent = server_agent
|
40
|
-
self.claster = claster
|
41
|
-
end
|
42
|
-
|
43
|
-
# True if infobase exists
|
44
|
-
def exists?
|
45
|
-
fail NotImplementedError
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|