psadmin_plus 2.0.4 → 2.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/bin/psa +81 -57
  3. data/lib/psadmin_plus.rb +187 -82
  4. metadata +7 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f9e50fadeb47fc6959bfef534bb1fb031c85dc7051291ccbf914df38731351e6
4
- data.tar.gz: 54aefd4d1ed463119baf1450a9feec43dc46db9e11c83843d4d790b536ac7278
3
+ metadata.gz: 0e0a6c139d1425345320bc485e585220c72dee5d2c17fa440a7de6c2eeb4f2cd
4
+ data.tar.gz: 3a595352998f4c045cab27803e1af1a4266c5823cc177a0f8360716003e859bf
5
5
  SHA512:
6
- metadata.gz: a8255d51419c37a7cd16696202434131f4861d5a1f647dfc1558268801942cc72689e5ed6f4f492c10e64c941e732e42cc38c2af9c758d39b0dcf8e6194e5a45
7
- data.tar.gz: 76cd40f2fb74de8824add86573a2766feed4f269039b9095e176fc4e71c8a5182a7bc2d885c05b5cd1d1deb8fbcdd7c44fbce7f2444b4c9d4519e2b8886bafee
6
+ metadata.gz: 28679fd69d09d403a61be342ac8eefb16e68e2fcaa2641869f7b180ca3bd98df1a82341e7c4b55994f93cbf96d6cf5d5f6fd532ea89e0c4d011b1d6c8ec45fc2
7
+ data.tar.gz: be5c3f5003bf45bf6566522041ff6996219b9aba7b8c0eea0977a1c1d50de1350e2a69009964cbf6c909cadf34dbd27a655395dc11f2e6d0620322606ee7362f
data/bin/psa CHANGED
@@ -1,12 +1,26 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'psadmin_plus'
3
+ begin
4
+ require 'psadmin_plus'
5
+ rescue LoadError
6
+ # running directly, not through gem install
7
+ require_relative '../lib/psadmin_plus.rb'
8
+ end
4
9
 
5
10
  # options
6
11
  opts_c = ARGV.shift || "help"
7
12
  opts_t = ARGV.shift || "all"
8
13
  opts_d = ARGV.shift || "all"
9
- opt_cfg = ARGV.shift
14
+ # Set remaining arguments as environment variables
15
+ ARGV.each do |arg|
16
+ if arg.include? "="
17
+ var = arg.split('=')
18
+ ENV[var[0]]=var[1]
19
+ puts "Setting environment variable " + var[0] + "=" + var[1]
20
+ else
21
+ # puts "Skip argument, no valid environment variable found."
22
+ end
23
+ end
10
24
 
11
25
  commands = opts_c.split(',')
12
26
  types = opts_t.split(',')
@@ -15,8 +29,6 @@ domains = opts_d.split(',')
15
29
  if types.include? "all" then types = ['app','prcs','web'] end
16
30
  if domains.include? "all" then all_domains = true end
17
31
 
18
-
19
-
20
32
  # setup environment
21
33
  PS_PSA_CONF = ENV['PS_PSA_CONF'] || "#{ENV['HOME']}/.psa.conf"
22
34
  if File.exists?(PS_PSA_CONF) then
@@ -25,7 +37,7 @@ if File.exists?(PS_PSA_CONF) then
25
37
  next
26
38
  else
27
39
  key, value = line.split "="
28
- ENV[key] = value.strip
40
+ value.nil? ? next : ENV[key] = value.strip
29
41
  end
30
42
  end
31
43
  end
@@ -33,15 +45,18 @@ end
33
45
  # constants
34
46
  OS_CONST = os
35
47
  PS_RUNTIME_USER = ENV['PS_RUNTIME_USER'] || "psadm2"
36
- PS_POOL_MGMT = ENV['PS_POOL_MGMT'] || "on"
37
- PS_HEALTH_FILE = ENV['PS_HEALTH_FILE'] || "health.html"
38
- PS_HEALTH_TIME = ENV['PS_HEALTH_TIME'] || "60"
39
- PS_HEALTH_TEXT = ENV['PS_HEALTH_TEXT'] || "true"
48
+ PS_HOOK_INTERP = ENV['PS_HOOK_INTERP'] || "ruby"
49
+ PS_HOOK_PRE = ENV['PS_HOOK_PRE'] || "false"
50
+ PS_HOOK_POST = ENV['PS_HOOK_POST'] || "false"
51
+ PS_HOOK_START = ENV['PS_HOOK_START'] || "false"
52
+ PS_HOOK_STOP = ENV['PS_HOOK_STOP'] || "false"
40
53
  PS_PSA_SUDO = ENV['PS_PSA_SUDO'] || "on"
41
54
  PS_PSADMIN_PATH = "#{OS_CONST}" == "linux" ? "#{env('PS_HOME')}/bin" : "cmd /c #{env('PS_HOME')}/appserv"
42
55
  PS_WIN_SERVICES = ENV['PS_WIN_SERVICES'] || "false"
43
56
  PS_TRAIL_SERVICE = ENV['PS_TRAIL_SERVICE'] || "false"
44
57
  PS_MULTI_HOME = ENV['PS_MULTI_HOME'] || "false"
58
+ PS_MULTI_DELIMIT = ENV['PS_MULTI_DELIMIT'] || "/"
59
+ PS_MULTI_PREFIX = ENV['PS_MULTI_PREFIX'].to_i || 0
45
60
  PS_PARALLEL_BOOT = ENV['PS_PARALLEL_BOOT'] || "false"
46
61
  PS_PSA_DEBUG = ENV['PS_PSA_DEBUG'] || "false"
47
62
 
@@ -71,60 +86,69 @@ commands.each do |c|
71
86
  do_summary
72
87
  else
73
88
  types.each do |t|
89
+ # find valid domains for this type
90
+ case "#{t}"
91
+ when "app"
92
+ valid_domains = find_apps
93
+ when "pubsub"
94
+ valid_domains = find_apps # TODO - find only apps with PUBSUB enabled?
95
+ when "prcs"
96
+ valid_domains = find_prcss
97
+ when "web"
98
+ valid_domains = find_webs
99
+ end
100
+
74
101
  if all_domains then
75
- case "#{t}"
76
- when "app"
77
- domains = find_apps
78
- when "prcs"
79
- domains = find_prcss
80
- when "web"
81
- domains = find_webs
82
- end
102
+ domains = valid_domains
83
103
  end
104
+
84
105
  domains.each do |d|
85
- case "#{c}"
86
- when "status"
87
- do_cmd_banner(c,t,d)
88
- do_status(t,d)
89
- when "start"
90
- do_cmd_banner(c,t,d)
91
- do_start(t,d)
92
- when "stop"
93
- do_cmd_banner(c,t,d)
94
- do_stop(t,d)
95
- when "kill"
96
- do_cmd_banner(c,t,d)
97
- do_kill(t,d)
98
- when "configure"
99
- do_cmd_banner(c,t,d)
100
- do_configure(t,d)
101
- when "reconfigure"
102
- do_cmd_banner(c,t,d)
103
- do_reconfigure(t,d)
104
- when "purge"
105
- do_cmd_banner(c,t,d)
106
- do_purge(t,d)
107
- when "flush"
108
- do_cmd_banner(c,t,d)
109
- do_flush(t,d)
110
- when "restart"
111
- do_cmd_banner(c,t,d)
112
- do_restart(t,d)
113
- when "bounce"
114
- do_cmd_banner(c,t,d)
115
- do_bounce(t,d)
116
- when "pooladd"
117
- if t == "web"
106
+ # validate domain for current type
107
+ if valid_domains.include? d
108
+ do_hookpre(c,t,d)
109
+ do_set_cfg_home(d)
110
+
111
+ case "#{c}"
112
+ when "status"
118
113
  do_cmd_banner(c,t,d)
119
- do_pooladd(t,d)
120
- end
121
- when "poolrm"
122
- if t == "web"
114
+ do_status(t,d)
115
+ when "start"
123
116
  do_cmd_banner(c,t,d)
124
- do_poolrm(t,d)
125
- end
117
+ do_start(t,d)
118
+ when "stop"
119
+ do_cmd_banner(c,t,d)
120
+ do_stop(t,d)
121
+ when "kill"
122
+ do_cmd_banner(c,t,d)
123
+ do_kill(t,d)
124
+ when "configure"
125
+ do_cmd_banner(c,t,d)
126
+ do_configure(t,d)
127
+ when "reconfigure"
128
+ do_cmd_banner(c,t,d)
129
+ do_reconfigure(t,d)
130
+ when "purge"
131
+ do_cmd_banner(c,t,d)
132
+ do_purge(t,d)
133
+ when "flush"
134
+ do_cmd_banner(c,t,d)
135
+ do_flush(t,d)
136
+ when "restart"
137
+ do_cmd_banner(c,t,d)
138
+ do_restart(t,d)
139
+ when "bounce"
140
+ do_cmd_banner(c,t,d)
141
+ do_bounce(t,d)
142
+ else
143
+ puts "Not a valid command. See psa help"
144
+ end
145
+
146
+ do_hookpost(c,t,d)
126
147
  else
127
- puts "Not a valid command. See psa help"
148
+ if ENV['PS_PSA_DEBUG'] == "true"
149
+ do_cmd_banner(c,t,d)
150
+ puts "No valid domain found for this type."
151
+ end
128
152
  end
129
153
  end
130
154
  end
data/lib/psadmin_plus.rb CHANGED
@@ -14,8 +14,8 @@ def do_help
14
14
  #puts " admin launch psadmin"
15
15
  puts " summary PS_CFG_HOME summary, no type or domain needed"
16
16
  puts " status status of the domain"
17
- puts " start pooladd, if enabled, then start the domain"
18
- puts " stop poolrm, if enabled, stop the domain"
17
+ puts " start hookstart, if enabled, then start the domain"
18
+ puts " stop hookstop, if enabled, stop the domain"
19
19
  puts " restart stop and start the domain"
20
20
  puts " purge clear domain cache"
21
21
  puts " reconfigure stop, configure, and start the domain"
@@ -23,15 +23,14 @@ def do_help
23
23
  puts " kill force stop the domain"
24
24
  puts " configure configure the domain"
25
25
  puts " flush clear domain IPC"
26
- puts " poolrm remove domain from load balanced pool "
27
- puts " pooladd add domain to load balanced pool "
28
26
  puts " "
29
27
  puts "Types:"
30
28
  puts " "
31
29
  puts " app act on application domains"
30
+ #puts " pubsub act on PUBSUB group of application domains"
32
31
  puts " prcs act on process scheduler domains"
33
32
  puts " web act on web domains"
34
- puts " all,<blank> act on all types of domains"
33
+ puts " all,<blank> act on web, app, and prcs domains"
35
34
  puts " "
36
35
  puts "Domains:"
37
36
  puts " "
@@ -103,15 +102,27 @@ end
103
102
 
104
103
  def do_cmd_banner(c,t,d)
105
104
  puts ""
106
- puts "### #{c} - #{t} - #{d} ###"
105
+ puts "===[ #{c} . #{t} . #{d} ]==="
106
+ puts ""
107
+ end
108
+
109
+ def do_set_cfg_home(d)
110
+ if "#{PS_MULTI_HOME}" != "false"
111
+ if PS_MULTI_PREFIX > 0
112
+ h = d.slice(0..PS_MULTI_PREFIX)
113
+ else
114
+ h = d
115
+ end
116
+ ENV['PS_CFG_HOME'] = "#{PS_MULTI_HOME}#{PS_MULTI_DELIMIT}#{h}"
117
+ end
107
118
  end
108
119
 
109
120
  def find_apps_nix
110
121
  case "#{PS_MULTI_HOME}"
111
122
  when "false"
112
- apps = do_cmd("find #{env('PS_CFG_HOME')}/appserv/*/psappsrv.ubx",false).split(/\n+/)
123
+ apps = do_cmd("find #{env('PS_CFG_HOME')}/appserv/*/psappsrv.ubx 2>/dev/null",false).split(/\n+/)
113
124
  else
114
- apps = do_cmd("find #{PS_MULTI_HOME}/*/appserv/*/psappsrv.ubx",false).split(/\n+/)
125
+ apps = do_cmd("find #{PS_MULTI_HOME}#{PS_MULTI_DELIMIT}*/appserv/*/psappsrv.ubx 2>/dev/null",false).split(/\n+/)
115
126
  end
116
127
  apps.map! {|app| app.split("/")[-2]}
117
128
  end
@@ -119,9 +130,9 @@ end
119
130
  def find_prcss_nix
120
131
  case "#{PS_MULTI_HOME}"
121
132
  when "false"
122
- prcss = do_cmd("find #{env('PS_CFG_HOME')}/appserv/prcs/*/psprcsrv.ubx",false).split(/\n+/)
133
+ prcss = do_cmd("find #{env('PS_CFG_HOME')}/appserv/prcs/*/psprcsrv.ubx 2>/dev/null",false).split(/\n+/)
123
134
  else
124
- prcss = do_cmd("find #{PS_MULTI_HOME}/*/appserv/prcs/*/psprcsrv.ubx",false).split(/\n+/)
135
+ prcss = do_cmd("find #{PS_MULTI_HOME}#{PS_MULTI_DELIMIT}*/appserv/prcs/*/psprcsrv.ubx 2>/dev/null",false).split(/\n+/)
125
136
  end
126
137
  prcss.map! {|prcs| prcs.split("/")[-2]}
127
138
  end
@@ -131,17 +142,22 @@ def find_webs_nix
131
142
  when "false"
132
143
  webs = do_cmd("find #{env('PS_CFG_HOME')}/webserv/*/piaconfig -maxdepth 0",false).split(/\n+/)
133
144
  else
134
- webs = do_cmd("find #{PS_MULTI_HOME}/*/webserv/*/piaconfig -maxdepth 0",false).split(/\n+/)
145
+ webs = do_cmd("find #{PS_MULTI_HOME}#{PS_MULTI_DELIMIT}*/webserv/*/piaconfig -maxdepth 0",false).split(/\n+/)
135
146
  end
136
147
  webs.map! {|web| web.split("/")[-2]}
137
148
  end
138
149
 
150
+ def find_sites_nix(domain)
151
+ webs = do_cmd("find ${PS_CFG_HOME?}/webserv/#{domain}/applications/peoplesoft/PORTAL.war/WEB-INF/psftdocs/* -maxdepth 0",false).split(/\n+/)
152
+ webs.map! {|site| site.split("/")[-1]}
153
+ end
154
+
139
155
  def find_apps_win
140
156
  case "#{PS_MULTI_HOME}"
141
157
  when "false"
142
158
  apps = do_cmd("(get-childitem #{env('PS_CFG_HOME')}/appserv/*/psappsrv.ubx | Format-Table -property FullName -HideTableHeaders | Out-String).Trim()",false).split(/\n+/)
143
159
  else
144
- apps = do_cmd("(get-childitem #{PS_MULTI_HOME}/*/appserv/*/psappsrv.ubx | Format-Table -property FullName -HideTableHeaders | Out-String).Trim()",false).split(/\n+/)
160
+ apps = do_cmd("(get-childitem #{PS_MULTI_HOME}#{PS_MULTI_DELIMIT}*/appserv/*/psappsrv.ubx | Format-Table -property FullName -HideTableHeaders | Out-String).Trim()",false).split(/\n+/)
145
161
  end
146
162
  apps.map! {|app| app.split('\\')[-2]}
147
163
  end
@@ -151,7 +167,7 @@ def find_prcss_win
151
167
  when "false"
152
168
  prcss = do_cmd("(get-childitem #{env('PS_CFG_HOME')}/appserv/prcs/*/psprcsrv.ubx | Format-Table -property FullName -HideTableHeaders | Out-String).Trim()",false).split(/\n+/)
153
169
  else
154
- prcss = do_cmd("(get-childitem #{PS_MULTI_HOME}/*/appserv/prcs/*/psprcsrv.ubx | Format-Table -property FullName -HideTableHeaders | Out-String).Trim()",false).split(/\n+/)
170
+ prcss = do_cmd("(get-childitem #{PS_MULTI_HOME}#{PS_MULTI_DELIMIT}*/appserv/prcs/*/psprcsrv.ubx | Format-Table -property FullName -HideTableHeaders | Out-String).Trim()",false).split(/\n+/)
155
171
  end
156
172
  prcss.map! {|prcs| prcs.split("\\")[-2]}
157
173
  end
@@ -161,11 +177,17 @@ def find_webs_win
161
177
  when "false"
162
178
  webs = do_cmd("(get-childitem #{env('PS_CFG_HOME')}/webserv/*/piaconfig | Format-Table -property FullName -HideTableHeaders | Out-String).Trim()",false).split(/\n+/)
163
179
  else
164
- webs = do_cmd("(get-childitem #{PS_MULTI_HOME}/*/webserv/*/piaconfig | Format-Table -property FullName -HideTableHeaders | Out-String).Trim()",false).split(/\n+/)
180
+ webs = do_cmd("(get-childitem #{PS_MULTI_HOME}#{PS_MULTI_DELIMIT}*/webserv/*/piaconfig | Format-Table -property FullName -HideTableHeaders | Out-String).Trim()",false).split(/\n+/)
165
181
  end
166
182
  webs.map! {|web| web.split("\\")[-2]}
167
183
  end
168
184
 
185
+ def find_sites_win(domain)
186
+ #TODO
187
+ #sites = do_cmd("(get-childitem #{env('PS_CFG_HOME')}/webserv/#{domain}/applications/peoplesoft/PORTAL.war/WEB-INF/psftdocs | Format-Table -property FullName -HideTableHeaders | Out-String).Trim()",false).split(/\n+/)
188
+ #sites.map! {|site| site.split("\\")[-2]}
189
+ end
190
+
169
191
  def find_apps
170
192
  apps = "#{OS_CONST}" == "linux" ? find_apps_nix : find_apps_win
171
193
  end
@@ -178,6 +200,10 @@ def find_webs
178
200
  webs = "#{OS_CONST}" == "linux" ? find_webs_nix : find_webs_win
179
201
  end
180
202
 
203
+ def find_sites(domain)
204
+ sites = "#{OS_CONST}" == "linux" ? find_sites_nix(domain) : find_sites_win(domain)
205
+ end
206
+
181
207
  def do_util
182
208
  puts "TODO: util"
183
209
  end
@@ -191,17 +217,20 @@ def do_list
191
217
  print "hostname: " ; do_cmd('hostname')
192
218
  print "ps-home: " ; do_cmd('echo ' + env('PS_HOME'))
193
219
  if PS_MULTI_HOME == "false"
194
- print "ps-cfg-home: " ; do_cmd('echo ' + env('PS_CFG_HOME'))
220
+ print "ps-cfg-home: " ; do_cmd('echo ' + env('PS_CFG_HOME'))
221
+ else
222
+ puts "ps-cfg-home base: #{PS_MULTI_HOME}#{PS_MULTI_DELIMIT}*"
195
223
  end
196
224
  puts ""
197
225
  puts "PS_RUNTIME_USER: #{PS_RUNTIME_USER}"
198
226
  puts "PS_PSA_SUDO: #{PS_PSA_SUDO}"
199
- puts "PS_POOL_MGMT: #{PS_POOL_MGMT}"
200
- puts "PS_HEALTH_FILE: #{PS_HEALTH_FILE}"
201
- puts "PS_HEALTH_TIME: #{PS_HEALTH_TIME}"
202
- puts "PS_HEALTH_TEXT: #{PS_HEALTH_TEXT}"
227
+ puts "PS_HOOK_INTERP: #{PS_HOOK_INTERP}"
228
+ puts "PS_HOOK_PRE: #{PS_HOOK_PRE}"
229
+ puts "PS_HOOK_POST: #{PS_HOOK_POST}"
230
+ puts "PS_HOOK_START: #{PS_HOOK_START}"
231
+ puts "PS_HOOK_STOP: #{PS_HOOK_STOP}"
203
232
  puts "PS_WIN_SERVICES: #{PS_WIN_SERVICES}"
204
- puts "PS_MULT_HOME: #{PS_MULTI_HOME}"
233
+ puts "PS_MULTI_HOME: #{PS_MULTI_HOME}"
205
234
  puts "PS_PARALLEL_BOOT: #{PS_PARALLEL_BOOT}"
206
235
  puts "PS_PSA_DEBUG: #{PS_PSA_DEBUG}"
207
236
  puts ""
@@ -222,40 +251,64 @@ def do_list
222
251
  puts ""
223
252
  end
224
253
 
254
+ def do_psadmin_check
255
+ # Check to see if psadmin loads correctly
256
+ # This will help when used on web servers that don't have Tuxedo
257
+ case "#{PS_PSA_DEBUG}"
258
+ when "true"
259
+ puts "Checking psadmin version to validate configuration:"
260
+ check = do_cmd("#{PS_PSADMIN_PATH}/psadmin -v 2>&1",true)
261
+ else
262
+ check = do_cmd("#{PS_PSADMIN_PATH}/psadmin -v 2>&1",false)
263
+ end
264
+ if check.include? "error"
265
+ # psadmin config is NOT valid
266
+ puts "ERROR: psadmin is not configured correctly for this environment!"
267
+ puts " Some psadmin-plus actions only work when Tuxedo and psadmin are configured"
268
+ false
269
+ else
270
+ # psadmin config is valid
271
+ true
272
+ end
273
+ end
274
+
225
275
  def do_summary
226
276
  if "#{PS_MULTI_HOME}" != "false"
227
- ENV['PS_CFG_HOME'] = "#{PS_MULTI_HOME}/#{domain}"
277
+ ENV['PS_CFG_HOME'] = "#{PS_MULTI_HOME}#{PS_MULTI_DELIMIT}#{domain}"
228
278
  end
229
279
 
280
+ do_psadmin_check ? nil : exit
281
+
230
282
  do_cmd("#{PS_PSADMIN_PATH}/psadmin -envsummary")
231
283
  #do_status("web","all")
232
284
  end
233
285
 
234
- def do_status(type, domain)
235
- if "#{PS_MULTI_HOME}" != "false"
236
- ENV['PS_CFG_HOME'] = "#{PS_MULTI_HOME}/#{domain}"
237
- end
238
-
286
+ def do_status(type, domain)
239
287
  case type
240
288
  when "app"
289
+ do_psadmin_check ? nil : return
241
290
  do_cmd("#{PS_PSADMIN_PATH}/psadmin -c sstatus -d #{domain}")
242
291
  do_cmd("#{PS_PSADMIN_PATH}/psadmin -c cstatus -d #{domain}")
243
292
  do_cmd("#{PS_PSADMIN_PATH}/psadmin -c qstatus -d #{domain}")
244
293
  do_cmd("#{PS_PSADMIN_PATH}/psadmin -c pslist -d #{domain}")
294
+ when "pubsub"
295
+ ENV['TUXCONFIG'] = "#{ENV['PS_CFG_HOME']}/appserv/#{domain}/PSTUXCFG"
296
+ do_cmd("echo 'printserver -g PUBSUB' | #{ENV['TUXDIR']}/bin/tmadmin")
245
297
  when "prcs"
298
+ do_psadmin_check ? nil : return
246
299
  do_cmd("#{PS_PSADMIN_PATH}/psadmin -p status -d #{domain}")
247
300
  when "web"
301
+ # TODO - PIA script status? 1. psadmin, 2. script, 3. lock file, 4. service
302
+ #do_psadmin_check ? nil : return
248
303
  do_cmd("#{PS_PSADMIN_PATH}/psadmin -w status -d #{domain}")
304
+ #do_cmd("${PS_CFG_HOME?}/webserv/#{domain}/bin/singleserverStatus.sh")
305
+ #if File.exist?("#{ENV['PS_CFG_HOME']}/webserv/#{domain}/servers/PIA/tmp/PIA.lok")
249
306
  else
250
307
  puts "Invalid type, see psa help"
251
308
  end
252
309
  end
253
310
 
254
311
  def do_start(type, domain)
255
- if "#{PS_MULTI_HOME}" != "false"
256
- ENV['PS_CFG_HOME'] = "#{PS_MULTI_HOME}/#{domain}"
257
- end
258
-
259
312
  web_service_name = ENV['WEB_SERVICE_NAME'] || "Psft*Pia*#{domain}*"
260
313
  app_service_name = ENV['APP_SERVICE_NAME'] || "Psft*App*#{domain}*"
261
314
  prcs_service_name = ENV['PRCS_SERVICE_NAME'] || "Psft*Prcs*#{domain}*"
@@ -273,7 +326,6 @@ def do_start(type, domain)
273
326
  start_web_cmd_win = "#{PS_PSADMIN_PATH}/psadmin -w start -d #{domain}"
274
327
  start_web_service_cmd = "start-service #{web_service_name}"
275
328
 
276
- # 10-08-2020 Dale Haman: Changing the logic used on PS_WIN_SERVICES, it will never be tux, app or all.
277
329
  case type
278
330
  when "app"
279
331
  case "#{PS_WIN_SERVICES}"
@@ -286,6 +338,11 @@ def do_start(type, domain)
286
338
  do_cmd(start_app_service_cmd)
287
339
  end
288
340
  end
341
+ do_hookstart("start",type,domain)
342
+ when "pubsub"
343
+ ENV['TUXCONFIG'] = "#{ENV['PS_CFG_HOME']}/appserv/#{domain}/PSTUXCFG"
344
+ do_cmd("echo 'boot -g PUBSUB' | #{ENV['TUXDIR']}/bin/tmadmin")
345
+ # do_hookstart("start",type,domain) - TODO skip hook for PUBSUB?
289
346
  when "prcs"
290
347
  case "#{PS_WIN_SERVICES}"
291
348
  when "true", "tux", "prcs", "all"
@@ -297,6 +354,7 @@ def do_start(type, domain)
297
354
  do_cmd(start_prcs_service_cmd)
298
355
  end
299
356
  end
357
+ do_hookstart("start",type,domain)
300
358
  when "web"
301
359
  case "#{OS_CONST}"
302
360
  when "linux"
@@ -319,17 +377,13 @@ def do_start(type, domain)
319
377
  end
320
378
  end
321
379
  end
322
- do_pooladd(type,domain)
380
+ do_hookstart("start",type,domain)
323
381
  else
324
382
  puts "Invalid type, see psa help"
325
383
  end
326
384
  end
327
385
 
328
- def do_stop(type, domain)
329
- if "#{PS_MULTI_HOME}" != "false"
330
- ENV['PS_CFG_HOME'] = "#{PS_MULTI_HOME}/#{domain}"
331
- end
332
-
386
+ def do_stop(type, domain)
333
387
  web_service_name = ENV['WEB_SERVICE_NAME'] || "Psft*Pia*#{domain}*"
334
388
  app_service_name = ENV['APP_SERVICE_NAME'] || "Psft*App*#{domain}*"
335
389
  prcs_service_name = ENV['PRCS_SERVICE_NAME'] || "Psft*Prcs*#{domain}*"
@@ -344,6 +398,7 @@ def do_stop(type, domain)
344
398
 
345
399
  case type
346
400
  when "app"
401
+ do_hookstop("stop",type,domain)
347
402
  case "#{PS_WIN_SERVICES}"
348
403
  when "true"
349
404
  do_cmd(stop_app_service_cmd)
@@ -354,7 +409,12 @@ def do_stop(type, domain)
354
409
  do_cmd(stop_app_service_cmd)
355
410
  end
356
411
  end
412
+ when "pubsub"
413
+ # do_hookstop("stop",type,domain) - TODO skip hook for PUBSUB?
414
+ ENV['TUXCONFIG'] = "#{ENV['PS_CFG_HOME']}/appserv/#{domain}/PSTUXCFG"
415
+ do_cmd("echo 'shutdown -g PUBSUB' | #{ENV['TUXDIR']}/bin/tmadmin")
357
416
  when "prcs"
417
+ do_hookstop("stop",type,domain)
358
418
  case "#{PS_WIN_SERVICES}"
359
419
  when "true"
360
420
  do_cmd(stop_prcs_service_cmd)
@@ -366,7 +426,7 @@ def do_stop(type, domain)
366
426
  end
367
427
  end
368
428
  when "web"
369
- do_poolrm(type,domain)
429
+ do_hookstop("stop",type,domain)
370
430
  case "#{OS_CONST}"
371
431
  when "linux"
372
432
  do_cmd(stop_web_cmd_lnx)
@@ -388,10 +448,6 @@ def do_stop(type, domain)
388
448
  end
389
449
 
390
450
  def do_kill(type, domain)
391
- if "#{PS_MULTI_HOME}" != "false"
392
- ENV['PS_CFG_HOME'] = "#{PS_MULTI_HOME}/#{domain}"
393
- end
394
-
395
451
  case type
396
452
  when "app"
397
453
  do_cmd("#{PS_PSADMIN_PATH}/psadmin -c shutdown! -d #{domain}")
@@ -402,7 +458,7 @@ def do_kill(type, domain)
402
458
  when "windows"
403
459
  do_cmd("(gwmi win32_process | where {$_.Name -eq 'Java.exe'} | where {$_.CommandLine -match '#{domain}'}).ProcessId -ErrorAction SilentlyContinue | % { stop-process $_ -force } -ErrorAction SilentlyContinue")
404
460
  when "linux"
405
- return #kill n/a
461
+ do_cmd("kill $(ps aux|grep java|grep ${PS_CFG_HOME?}/webserv/#{domain}/piaconfig|awk ' {print $2}')")
406
462
  end
407
463
  else
408
464
  puts "Invalid type, see psa help"
@@ -410,32 +466,30 @@ def do_kill(type, domain)
410
466
  end
411
467
 
412
468
  def do_configure(type, domain)
413
- if "#{PS_MULTI_HOME}" != "false"
414
- ENV['PS_CFG_HOME'] = "#{PS_MULTI_HOME}/#{domain}"
415
- end
416
-
417
469
  case type
418
470
  when "app"
419
471
  do_cmd("#{PS_PSADMIN_PATH}/psadmin -c configure -d #{domain}")
420
472
  when "prcs"
421
473
  do_cmd("#{PS_PSADMIN_PATH}/psadmin -p configure -d #{domain}")
422
474
  when "web"
423
- return # web configure n/a
475
+ do_webprof_reload("#{domain}")
424
476
  else
425
477
  puts "Invalid type, see psa help"
426
478
  end
427
479
  end
428
480
 
429
481
  def do_purge(type, domain)
430
- if "#{PS_MULTI_HOME}" != "false"
431
- ENV['PS_CFG_HOME'] = "#{PS_MULTI_HOME}/#{domain}"
432
- end
433
-
434
482
  case type
435
483
  when "app"
436
484
  do_cmd("#{PS_PSADMIN_PATH}/psadmin -c purge -d #{domain}")
437
485
  when "prcs"
438
- do_cmd("echo purge todo")
486
+ case "#{OS_CONST}"
487
+ when "linux"
488
+ do_cmd("rm -rf ${PS_CFG_HOME?}/appserv/prcs/#{domain}/CACHE/*")
489
+ when "windows"
490
+ do_cmd("Remove-Item $(Get-ChildItem ${env:PS_CFG_HOME}/appserv/prcs/#{domain}/CACHE/* | ?{ $_.PSIsContainer}) -recurse -force -ErrorAction SilentlyContinue".gsub('/','\\'))
491
+ end
492
+ puts "prcs cache purged"
439
493
  when "web"
440
494
  case "#{OS_CONST}"
441
495
  when "linux"
@@ -450,10 +504,6 @@ def do_purge(type, domain)
450
504
  end
451
505
 
452
506
  def do_flush(type, domain)
453
- if "#{PS_MULTI_HOME}" != "false"
454
- ENV['PS_CFG_HOME'] = "#{PS_MULTI_HOME}/#{domain}"
455
- end
456
-
457
507
  case type
458
508
  when "app"
459
509
  do_cmd("#{PS_PSADMIN_PATH}/psadmin -c cleanipc -d #{domain}")
@@ -485,37 +535,92 @@ def do_bounce(type, domain)
485
535
  do_start(type, domain)
486
536
  end
487
537
 
488
- def do_pooladd(type, domain)
489
- if PS_POOL_MGMT == "on" then
490
- # Change PS_HEALTH_TEXT and PS_HEALTH_FILE variables to match your system
491
- puts "Adding web domain to load balanced pool..."
492
- do_cmd("echo '#{PS_HEALTH_TEXT}' > #{env('PS_CFG_HOME')}/webserv/#{domain}/applications/peoplesoft/PORTAL.war/#{PS_HEALTH_FILE}")
493
- sleep(PS_HEALTH_TIME.to_i)
494
- puts "...domain added to pool."
495
- puts ""
496
- else
497
- puts "Skipping pool managment. To enable, set PS_POOL_MGMT to 'on'."
538
+ def do_hook(command, type, domain, script)
539
+ ENV['PSA_CMD'] = command
540
+ ENV['PSA_TYPE'] = type
541
+ ENV['PSA_DOMAIN'] = domain
542
+ out = `#{PS_HOOK_INTERP} #{script}`
543
+ puts out
544
+ end
545
+
546
+ def do_hookpre(command, type, domain)
547
+ if "#{PS_HOOK_PRE}" != "false"
548
+ "#{PS_PSA_DEBUG}" == "true" ? (puts "Executing domain pre command hook...\n\n") : nil
549
+ do_hook(command, type, domain, PS_HOOK_PRE)
550
+ "#{PS_PSA_DEBUG}" == "true" ? (puts "\n...hook done") : nil
551
+ end
552
+ end
553
+
554
+ def do_hookpost(command, type, domain)
555
+ if "#{PS_HOOK_POST}" != "false"
556
+ "#{PS_PSA_DEBUG}" == "true" ? (puts "Executing domain post command hook...\n\n") : nil
557
+ do_hook(command, type, domain, PS_HOOK_POST)
558
+ "#{PS_PSA_DEBUG}" == "true" ? (puts "\n...hook done") : nil
498
559
  end
499
560
  end
500
561
 
501
- def do_poolrm(type,domain)
502
- if PS_POOL_MGMT == "on" then
503
- # Change PS_HEALTH_TEXT and PS_HEALTH_FILE variables to match your system
504
- puts "Removing domain from load balanced pool..."
505
- case "#{OS_CONST}"
506
- when "linux"
507
- do_cmd("rm -f #{env('PS_CFG_HOME')}/webserv/#{domain}/applications/peoplesoft/PORTAL.war/#{PS_HEALTH_FILE}")
508
- when "windows"
509
- do_cmd("remove-item -force #{env('PS_CFG_HOME')}/webserv/#{domain}/applications/peoplesoft/PORTAL.war/#{PS_HEALTH_FILE} -ErrorAction SilentlyContinue")
510
- else
511
- puts " badOS - #{OS_CONST}"
562
+ def do_hookstart(command, type, domain)
563
+ if "#{PS_HOOK_START}" != "false"
564
+ "#{PS_PSA_DEBUG}" == "true" ? (puts "Executing domain start hook...\n\n") : nil
565
+ do_hook(command, type, domain, PS_HOOK_START)
566
+ "#{PS_PSA_DEBUG}" == "true" ? (puts "\n...hook done") : nil
567
+ end
568
+ end
569
+
570
+ def do_hookstop(command, type, domain)
571
+ if "#{PS_HOOK_STOP}" != "false"
572
+ "#{PS_PSA_DEBUG}" == "true" ? (puts "Executing domain stop hook...\n\n") : nil
573
+ do_hook(command, type, domain, PS_HOOK_STOP)
574
+ "#{PS_PSA_DEBUG}" == "true" ? (puts "\n...hook done") : nil
575
+ end
576
+ end
577
+
578
+ def do_webprof_reload(domain)
579
+ puts "Reloading Web Profiles"
580
+
581
+ case "#{OS_CONST}"
582
+ when "linux"
583
+ "#{PS_PSA_DEBUG}" == "true" ? show_debug = true : show_debug = false
584
+
585
+ find_sites(domain).each do |s|
586
+ # set vars
587
+ url = "${ADMINSERVER_PROTOCOL?}://${ADMINSERVER_HOSTNAME?}:${ADMINSERVER_PORT?}/psp/#{s}/?cmd=login&"
588
+ src_env = ". ${PS_CFG_HOME?}/webserv/#{domain}/bin/setEnv.sh"
589
+ prop_file = "${PS_CFG_HOME?}/webserv/#{domain}/applications/peoplesoft/PORTAL.war/WEB-INF/psftdocs/#{s}/configuration.properties"
590
+
591
+ # set reload in config.props
592
+ do_cmd("sed -i 's/ReloadWebProfileWithoutRestart=.*/ReloadWebProfileWithoutRestart=1/g' #{prop_file}",show_debug)
593
+
594
+ # source setEnv and ping site
595
+ show_debug ? do_cmd("#{src_env} ; curl -s #{url}",show_debug) : do_cmd("#{src_env} ; curl -s -o /dev/null #{url}",show_debug)
596
+
597
+ # unset reload in config.props
598
+ do_cmd("sed -i 's/ReloadWebProfileWithoutRestart=.*/ReloadWebProfileWithoutRestart=0/g' #{prop_file}",show_debug)
599
+
600
+ # done
601
+ puts " - #{s}"
512
602
  end
513
- sleep(PS_HEALTH_TIME.to_i)
514
- puts "...domain removed from pool."
515
- puts ""
603
+ when "windows"
604
+ puts "Windows support coming soon."
605
+ #do_cmd(". #{env('PS_CFG_HOME')}/webserv/#{domain}/bin/setEnv.sh")
606
+
607
+ #find_sites.each do |s|
608
+ # # set vars
609
+ # prop_file = "#{env('PS_CFG_HOME')}/webserv/#{domain}/applications/peoplesoft/PORTAL.war/WEB-INF/psftdocs/#{s}}/configuration.properties"
610
+ # url = "http://#{PS_PIA_HOST}.#{PS_PIA_DOMAIN}:#{PS_PIA_PORT}/psp/#{s}/?cmd=login&"
611
+ # # set reload in config.props
612
+ # do_cmd("sed -i 's/ReloadWebProfileWithoutRestart=.*/ReloadWebProfileWithoutRestart=1/g' #{prop_file}")
613
+ # # ping site
614
+ # do_cmd("curl -s -o /dev/null '#{url}'")
615
+ # # unset reload in config.props
616
+ # do_cmd("sed -i 's/ReloadWebProfileWithoutRestart=.*/ReloadWebProfileWithoutRestart=0/g' #{prop_file}")
617
+ # # done
618
+ # puts " - #{s}"
619
+ #end
516
620
  else
517
- puts "Skipping pool managment. To enable, set PS_POOL_MGMT to 'on'."
621
+ puts " badOS - #{OS_CONST}"
518
622
  end
623
+ puts ""
519
624
  end
520
625
 
521
626
  def os
metadata CHANGED
@@ -1,18 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: psadmin_plus
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.4
4
+ version: 2.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kyle Benson
8
8
  - Dan Iverson
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-01-04 00:00:00.000000000 Z
12
+ date: 2023-04-27 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: A psadmin helper tool
15
- email: kyle@psadmin.io
15
+ email: info@psadmin.io
16
16
  executables:
17
17
  - psa
18
18
  extensions: []
@@ -24,7 +24,7 @@ homepage: https://github.com/psadmin-io/psadmin-plus
24
24
  licenses:
25
25
  - MIT
26
26
  metadata: {}
27
- post_install_message:
27
+ post_install_message:
28
28
  rdoc_options: []
29
29
  require_paths:
30
30
  - lib
@@ -39,8 +39,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  requirements: []
42
- rubygems_version: 3.1.4
43
- signing_key:
42
+ rubygems_version: 3.2.15
43
+ signing_key:
44
44
  specification_version: 4
45
45
  summary: psadmin plus
46
46
  test_files: []