psadmin_plus 2.0.5 → 2.0.6

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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/bin/psa +156 -156
  3. data/lib/psadmin_plus.rb +642 -636
  4. metadata +6 -6
data/lib/psadmin_plus.rb CHANGED
@@ -1,636 +1,642 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'rbconfig'
4
- require 'etc'
5
- require 'open3'
6
-
7
- def do_help
8
- puts "Usage: psa [command] <type> <domain>"
9
- puts " "
10
- puts "Commands:"
11
- puts " "
12
- puts " help display this help message"
13
- puts " list list domains"
14
- #puts " admin launch psadmin"
15
- puts " summary PS_CFG_HOME summary, no type or domain needed"
16
- puts " status status of the domain"
17
- puts " start hookstart, if enabled, then start the domain"
18
- puts " stop hookstop, if enabled, stop the domain"
19
- puts " restart stop and start the domain"
20
- puts " purge clear domain cache"
21
- puts " reconfigure stop, configure, and start the domain"
22
- puts " bounce stop, flush, purge, configure and start the domain"
23
- puts " kill force stop the domain"
24
- puts " configure configure the domain"
25
- puts " flush clear domain IPC"
26
- puts " "
27
- puts "Types:"
28
- puts " "
29
- puts " app act on application domains"
30
- #puts " pubsub act on PUBSUB group of application domains"
31
- puts " prcs act on process scheduler domains"
32
- puts " web act on web domains"
33
- puts " all,<blank> act on web, app, and prcs domains"
34
- puts " "
35
- puts "Domains:"
36
- puts " "
37
- puts " dom act on specific domains"
38
- puts " all,<blank> act on all domains"
39
- puts " "
40
- puts "Each parameter type can be enter in a comma separated list "
41
- puts " "
42
- end
43
-
44
- def do_is_runtime_user_nix
45
- result = ENV['USER'] == PS_RUNTIME_USER ? true : false
46
- end
47
-
48
- def do_is_runtime_user_win
49
- result = ENV['USERNAME'] == PS_RUNTIME_USER ? true : false
50
- end
51
-
52
- def env(var)
53
- result = "#{OS_CONST}" == "linux" ? "${#{var}}" : "%#{var}%"
54
- end
55
-
56
- def do_cmd(cmd, print = true, powershell = true)
57
- case "#{OS_CONST}"
58
- when "linux"
59
- if do_is_runtime_user_nix
60
- case "#{PS_PSA_DEBUG}"
61
- when "true"
62
- p "Command: #{cmd}"
63
- end
64
- out = `#{cmd}`
65
- else
66
- if "#{PS_PSA_SUDO}" == "on"
67
- case "#{PS_PSA_DEBUG}"
68
- when "true"
69
- p "Command: sudo su - #{PS_RUNTIME_USER} -c '#{cmd}'"
70
- end
71
- out = `sudo su - #{PS_RUNTIME_USER} -c '#{cmd}'`
72
- else
73
- print "#{PS_RUNTIME_USER} "
74
- case "#{PS_PSA_DEBUG}"
75
- when "true"
76
- p "Command: su - #{PS_RUNTIME_USER} -c '#{cmd}'"
77
- end
78
- out = `su - #{PS_RUNTIME_USER} -c '#{cmd}'`
79
- end
80
- end
81
- when "windows"
82
- case powershell
83
- when true
84
- case "#{PS_PSA_DEBUG}"
85
- when "true"
86
- p "Command: powershell -NoProfile -Command \"#{cmd}\""
87
- end
88
- out = `powershell -NoProfile -Command "#{cmd}"`
89
- else
90
- case "#{PS_PSA_DEBUG}"
91
- when "true"
92
- p "Command: #{cmd}"
93
- end
94
- out = `#{cmd}`
95
- end
96
- else
97
- out = "Invalid OS"
98
- end
99
- print ? (puts out) : result = out
100
- out
101
- end
102
-
103
- def do_cmd_banner(c,t,d)
104
- puts ""
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
118
- end
119
-
120
- def find_apps_nix
121
- case "#{PS_MULTI_HOME}"
122
- when "false"
123
- apps = do_cmd("find #{env('PS_CFG_HOME')}/appserv/*/psappsrv.ubx 2>/dev/null",false).split(/\n+/)
124
- else
125
- apps = do_cmd("find #{PS_MULTI_HOME}#{PS_MULTI_DELIMIT}*/appserv/*/psappsrv.ubx 2>/dev/null",false).split(/\n+/)
126
- end
127
- apps.map! {|app| app.split("/")[-2]}
128
- end
129
-
130
- def find_prcss_nix
131
- case "#{PS_MULTI_HOME}"
132
- when "false"
133
- prcss = do_cmd("find #{env('PS_CFG_HOME')}/appserv/prcs/*/psprcsrv.ubx 2>/dev/null",false).split(/\n+/)
134
- else
135
- prcss = do_cmd("find #{PS_MULTI_HOME}#{PS_MULTI_DELIMIT}*/appserv/prcs/*/psprcsrv.ubx 2>/dev/null",false).split(/\n+/)
136
- end
137
- prcss.map! {|prcs| prcs.split("/")[-2]}
138
- end
139
-
140
- def find_webs_nix
141
- case "#{PS_MULTI_HOME}"
142
- when "false"
143
- webs = do_cmd("find #{env('PS_CFG_HOME')}/webserv/*/piaconfig -maxdepth 0",false).split(/\n+/)
144
- else
145
- webs = do_cmd("find #{PS_MULTI_HOME}#{PS_MULTI_DELIMIT}*/webserv/*/piaconfig -maxdepth 0",false).split(/\n+/)
146
- end
147
- webs.map! {|web| web.split("/")[-2]}
148
- end
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
-
155
- def find_apps_win
156
- case "#{PS_MULTI_HOME}"
157
- when "false"
158
- apps = do_cmd("(get-childitem #{env('PS_CFG_HOME')}/appserv/*/psappsrv.ubx | Format-Table -property FullName -HideTableHeaders | Out-String).Trim()",false).split(/\n+/)
159
- else
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+/)
161
- end
162
- apps.map! {|app| app.split('\\')[-2]}
163
- end
164
-
165
- def find_prcss_win
166
- case "#{PS_MULTI_HOME}"
167
- when "false"
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+/)
169
- else
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+/)
171
- end
172
- prcss.map! {|prcs| prcs.split("\\")[-2]}
173
- end
174
-
175
- def find_webs_win
176
- case "#{PS_MULTI_HOME}"
177
- when "false"
178
- webs = do_cmd("(get-childitem #{env('PS_CFG_HOME')}/webserv/*/piaconfig | Format-Table -property FullName -HideTableHeaders | Out-String).Trim()",false).split(/\n+/)
179
- else
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+/)
181
- end
182
- webs.map! {|web| web.split("\\")[-2]}
183
- end
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
-
191
- def find_apps
192
- apps = "#{OS_CONST}" == "linux" ? find_apps_nix : find_apps_win
193
- end
194
-
195
- def find_prcss
196
- prcss = "#{OS_CONST}" == "linux" ? find_prcss_nix : find_prcss_win
197
- end
198
-
199
- def find_webs
200
- webs = "#{OS_CONST}" == "linux" ? find_webs_nix : find_webs_win
201
- end
202
-
203
- def find_sites(domain)
204
- sites = "#{OS_CONST}" == "linux" ? find_sites_nix(domain) : find_sites_win(domain)
205
- end
206
-
207
- def do_util
208
- puts "TODO: util"
209
- end
210
-
211
- def do_admin
212
- do_cmd("#{PS_PSADMIN_PATH}/psadmin")
213
- end
214
-
215
- def do_list
216
- puts "---"
217
- print "hostname: " ; do_cmd('hostname')
218
- print "ps-home: " ; do_cmd('echo ' + env('PS_HOME'))
219
- if PS_MULTI_HOME == "false"
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}*"
223
- end
224
- puts ""
225
- puts "PS_RUNTIME_USER: #{PS_RUNTIME_USER}"
226
- puts "PS_PSA_SUDO: #{PS_PSA_SUDO}"
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}"
232
- puts "PS_WIN_SERVICES: #{PS_WIN_SERVICES}"
233
- puts "PS_MULTI_HOME: #{PS_MULTI_HOME}"
234
- puts "PS_PARALLEL_BOOT: #{PS_PARALLEL_BOOT}"
235
- puts "PS_PSA_DEBUG: #{PS_PSA_DEBUG}"
236
- puts ""
237
- puts "app:"
238
- find_apps.each do |a|
239
- puts " - #{a}"
240
- end
241
- puts ""
242
- puts "prcs:"
243
- find_prcss.each do |p|
244
- puts " - #{p}"
245
- end
246
- puts ""
247
- puts "web:"
248
- find_webs.each do |w|
249
- puts " - #{w}"
250
- end
251
- puts ""
252
- end
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
-
275
- def do_summary
276
- if "#{PS_MULTI_HOME}" != "false"
277
- ENV['PS_CFG_HOME'] = "#{PS_MULTI_HOME}#{PS_MULTI_DELIMIT}#{domain}"
278
- end
279
-
280
- do_psadmin_check ? nil : exit
281
-
282
- do_cmd("#{PS_PSADMIN_PATH}/psadmin -envsummary")
283
- #do_status("web","all")
284
- end
285
-
286
- def do_status(type, domain)
287
- case type
288
- when "app"
289
- do_psadmin_check ? nil : return
290
- do_cmd("#{PS_PSADMIN_PATH}/psadmin -c sstatus -d #{domain}")
291
- do_cmd("#{PS_PSADMIN_PATH}/psadmin -c cstatus -d #{domain}")
292
- do_cmd("#{PS_PSADMIN_PATH}/psadmin -c qstatus -d #{domain}")
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")
297
- when "prcs"
298
- do_psadmin_check ? nil : return
299
- do_cmd("#{PS_PSADMIN_PATH}/psadmin -p status -d #{domain}")
300
- when "web"
301
- # TODO - PIA script status? 1. psadmin, 2. script, 3. lock file, 4. service
302
- #do_psadmin_check ? nil : return
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")
306
- else
307
- puts "Invalid type, see psa help"
308
- end
309
- end
310
-
311
- def do_start(type, domain)
312
- web_service_name = ENV['WEB_SERVICE_NAME'] || "Psft*Pia*#{domain}*"
313
- app_service_name = ENV['APP_SERVICE_NAME'] || "Psft*App*#{domain}*"
314
- prcs_service_name = ENV['PRCS_SERVICE_NAME'] || "Psft*Prcs*#{domain}*"
315
-
316
- case "#{PS_PARALLEL_BOOT}"
317
- when "false"
318
- start_app_cmd = "#{PS_PSADMIN_PATH}/psadmin -c boot -d #{domain}"
319
- when "true"
320
- start_app_cmd = "#{PS_PSADMIN_PATH}/psadmin -c parallelboot -d #{domain}"
321
- end
322
- start_app_service_cmd = "start-service #{app_service_name}"
323
- start_prcs_cmd = "#{PS_PSADMIN_PATH}/psadmin -p start -d #{domain}"
324
- start_prcs_service_cmd = "start-service #{prcs_service_name}"
325
- start_web_cmd_lnx = "${PS_CFG_HOME?}/webserv/#{domain}/bin/startPIA.sh"
326
- start_web_cmd_win = "#{PS_PSADMIN_PATH}/psadmin -w start -d #{domain}"
327
- start_web_service_cmd = "start-service #{web_service_name}"
328
-
329
- case type
330
- when "app"
331
- case "#{PS_WIN_SERVICES}"
332
- when "true", "tux", "app", "all"
333
- do_cmd(start_app_service_cmd)
334
- else
335
- do_cmd(start_app_cmd)
336
- case "#{PS_TRAIL_SERVICE}"
337
- when "true"
338
- do_cmd(start_app_service_cmd)
339
- end
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?
346
- when "prcs"
347
- case "#{PS_WIN_SERVICES}"
348
- when "true", "tux", "prcs", "all"
349
- do_cmd(start_prcs_service_cmd)
350
- else
351
- do_cmd(start_prcs_cmd)
352
- case "#{PS_TRAIL_SERVICE}"
353
- when "true"
354
- do_cmd(start_prcs_service_cmd)
355
- end
356
- end
357
- do_hookstart("start",type,domain)
358
- when "web"
359
- case "#{OS_CONST}"
360
- when "linux"
361
- if File.exist?("#{ENV['PS_CFG_HOME']}/webserv/#{domain}/servers/PIA/tmp/PIA.lok")
362
- puts "Domain #{domain} already started"
363
- else
364
- do_cmd(start_web_cmd_lnx)
365
- sleep 5.0
366
- end
367
- when "windows"
368
- case "#{PS_WIN_SERVICES}"
369
- when "true", "web", "all"
370
- do_cmd(start_web_service_cmd)
371
- else
372
- # Run command outside of powershell with 'false' parameter
373
- do_cmd(start_web_cmd_win, true, false)
374
- case "#{PS_TRAIL_SERVICE}"
375
- when "true", "web", "all"
376
- do_cmd(start_web_service_cmd)
377
- end
378
- end
379
- end
380
- do_hookstart("start",type,domain)
381
- else
382
- puts "Invalid type, see psa help"
383
- end
384
- end
385
-
386
- def do_stop(type, domain)
387
- web_service_name = ENV['WEB_SERVICE_NAME'] || "Psft*Pia*#{domain}*"
388
- app_service_name = ENV['APP_SERVICE_NAME'] || "Psft*App*#{domain}*"
389
- prcs_service_name = ENV['PRCS_SERVICE_NAME'] || "Psft*Prcs*#{domain}*"
390
-
391
- stop_app_cmd = "#{PS_PSADMIN_PATH}/psadmin -c shutdown -d #{domain}"
392
- stop_app_service_cmd = "stop-service #{app_service_name}"
393
- stop_prcs_cmd = "#{PS_PSADMIN_PATH}/psadmin -p stop -d #{domain}"
394
- stop_prcs_service_cmd = "stop-service #{prcs_service_name}"
395
- stop_web_cmd_lnx = "${PS_CFG_HOME?}/webserv/#{domain}/bin/stopPIA.sh"
396
- stop_web_cmd_win = "#{PS_PSADMIN_PATH}/psadmin -w shutdown -d #{domain}"
397
- stop_web_service_cmd = "stop-service #{web_service_name}"
398
-
399
- case type
400
- when "app"
401
- do_hookstop("stop",type,domain)
402
- case "#{PS_WIN_SERVICES}"
403
- when "true"
404
- do_cmd(stop_app_service_cmd)
405
- else
406
- do_cmd(stop_app_cmd)
407
- case "#{PS_TRAIL_SERVICE}"
408
- when "true"
409
- do_cmd(stop_app_service_cmd)
410
- end
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")
416
- when "prcs"
417
- do_hookstop("stop",type,domain)
418
- case "#{PS_WIN_SERVICES}"
419
- when "true"
420
- do_cmd(stop_prcs_service_cmd)
421
- else
422
- do_cmd(stop_prcs_cmd)
423
- case "#{PS_TRAIL_SERVICE}"
424
- when "true"
425
- do_cmd(stop_prcs_service_cmd)
426
- end
427
- end
428
- when "web"
429
- do_hookstop("stop",type,domain)
430
- case "#{OS_CONST}"
431
- when "linux"
432
- do_cmd(stop_web_cmd_lnx)
433
- when "windows"
434
- case "#{PS_WIN_SERVICES}"
435
- when "true"
436
- do_cmd(stop_web_service_cmd)
437
- else
438
- do_cmd(stop_web_cmd_win, true, false)
439
- case "#{PS_TRAIL_SERVICE}"
440
- when "true"
441
- do_cmd(stop_web_service_cmd)
442
- end
443
- end
444
- end
445
- else
446
- puts "Invalid type, see psa help"
447
- end
448
- end
449
-
450
- def do_kill(type, domain)
451
- case type
452
- when "app"
453
- do_cmd("#{PS_PSADMIN_PATH}/psadmin -c shutdown! -d #{domain}")
454
- when "prcs"
455
- do_cmd("#{PS_PSADMIN_PATH}/psadmin -p kill -d #{domain}")
456
- when "web"
457
- case "#{OS_CONST}"
458
- when "windows"
459
- do_cmd("(gwmi win32_process | where {$_.Name -eq 'Java.exe'} | where {$_.CommandLine -match '#{domain}'}).ProcessId -ErrorAction SilentlyContinue | % { stop-process $_ -force } -ErrorAction SilentlyContinue")
460
- when "linux"
461
- do_cmd("kill $(ps aux|grep java|grep ${PS_CFG_HOME?}/webserv/#{domain}/piaconfig|awk ' {print $2}')")
462
- end
463
- else
464
- puts "Invalid type, see psa help"
465
- end
466
- end
467
-
468
- def do_configure(type, domain)
469
- case type
470
- when "app"
471
- do_cmd("#{PS_PSADMIN_PATH}/psadmin -c configure -d #{domain}")
472
- when "prcs"
473
- do_cmd("#{PS_PSADMIN_PATH}/psadmin -p configure -d #{domain}")
474
- when "web"
475
- do_webprof_reload("#{domain}")
476
- else
477
- puts "Invalid type, see psa help"
478
- end
479
- end
480
-
481
- def do_purge(type, domain)
482
- case type
483
- when "app"
484
- do_cmd("#{PS_PSADMIN_PATH}/psadmin -c purge -d #{domain}")
485
- when "prcs"
486
- do_cmd("echo Purge currently does nothing for prcs")
487
- when "web"
488
- case "#{OS_CONST}"
489
- when "linux"
490
- do_cmd("rm -rf ${PS_CFG_HOME?}/webserv/#{domain}/applications/peoplesoft/PORTAL*/*/cache*/")
491
- puts "web cache purged"
492
- when "windows"
493
- do_cmd("Remove-Item $(Get-ChildItem ${env:PS_CFG_HOME}/webserv/#{domain}/applications/peoplesoft/PORTAL*/*/cache*/ | ?{ $_.PSIsContainer}) -recurse -force -ErrorAction SilentlyContinue".gsub('/','\\'))
494
- end
495
- else
496
- puts "Invalid type, see psa help"
497
- end
498
- end
499
-
500
- def do_flush(type, domain)
501
- case type
502
- when "app"
503
- do_cmd("#{PS_PSADMIN_PATH}/psadmin -c cleanipc -d #{domain}")
504
- when "prcs"
505
- do_cmd("#{PS_PSADMIN_PATH}/psadmin -p cleanipc -d #{domain}")
506
- when "web"
507
- return # web flush n/a
508
- else
509
- puts "Invalid type, see psa help"
510
- end
511
- end
512
-
513
- def do_restart(type, domain)
514
- do_stop(type, domain)
515
- do_start(type, domain)
516
- end
517
-
518
- def do_reconfigure(type, domain)
519
- do_stop(type, domain)
520
- do_configure(type, domain)
521
- do_start(type, domain)
522
- end
523
-
524
- def do_bounce(type, domain)
525
- do_stop(type, domain)
526
- do_purge(type, domain)
527
- do_flush(type, domain)
528
- do_configure(type, domain)
529
- do_start(type, domain)
530
- end
531
-
532
- def do_hook(command, type, domain, script)
533
- ENV['PSA_CMD'] = command
534
- ENV['PSA_TYPE'] = type
535
- ENV['PSA_DOMAIN'] = domain
536
- out = `#{PS_HOOK_INTERP} #{script}`
537
- puts out
538
- end
539
-
540
- def do_hookpre(command, type, domain)
541
- if "#{PS_HOOK_PRE}" != "false"
542
- "#{PS_PSA_DEBUG}" == "true" ? (puts "Executing domain pre command hook...\n\n") : nil
543
- do_hook(command, type, domain, PS_HOOK_PRE)
544
- "#{PS_PSA_DEBUG}" == "true" ? (puts "\n...hook done") : nil
545
- end
546
- end
547
-
548
- def do_hookpost(command, type, domain)
549
- if "#{PS_HOOK_POST}" != "false"
550
- "#{PS_PSA_DEBUG}" == "true" ? (puts "Executing domain post command hook...\n\n") : nil
551
- do_hook(command, type, domain, PS_HOOK_POST)
552
- "#{PS_PSA_DEBUG}" == "true" ? (puts "\n...hook done") : nil
553
- end
554
- end
555
-
556
- def do_hookstart(command, type, domain)
557
- if "#{PS_HOOK_START}" != "false"
558
- "#{PS_PSA_DEBUG}" == "true" ? (puts "Executing domain start hook...\n\n") : nil
559
- do_hook(command, type, domain, PS_HOOK_START)
560
- "#{PS_PSA_DEBUG}" == "true" ? (puts "\n...hook done") : nil
561
- end
562
- end
563
-
564
- def do_hookstop(command, type, domain)
565
- if "#{PS_HOOK_STOP}" != "false"
566
- "#{PS_PSA_DEBUG}" == "true" ? (puts "Executing domain stop hook...\n\n") : nil
567
- do_hook(command, type, domain, PS_HOOK_STOP)
568
- "#{PS_PSA_DEBUG}" == "true" ? (puts "\n...hook done") : nil
569
- end
570
- end
571
-
572
- def do_webprof_reload(domain)
573
- puts "Reloading Web Profiles"
574
-
575
- case "#{OS_CONST}"
576
- when "linux"
577
- "#{PS_PSA_DEBUG}" == "true" ? show_debug = true : show_debug = false
578
-
579
- find_sites(domain).each do |s|
580
- # set vars
581
- url = "${ADMINSERVER_PROTOCOL?}://${ADMINSERVER_HOSTNAME?}:${ADMINSERVER_PORT?}/psp/#{s}/?cmd=login&"
582
- src_env = ". ${PS_CFG_HOME?}/webserv/#{domain}/bin/setEnv.sh"
583
- prop_file = "${PS_CFG_HOME?}/webserv/#{domain}/applications/peoplesoft/PORTAL.war/WEB-INF/psftdocs/#{s}/configuration.properties"
584
-
585
- # set reload in config.props
586
- do_cmd("sed -i 's/ReloadWebProfileWithoutRestart=.*/ReloadWebProfileWithoutRestart=1/g' #{prop_file}",show_debug)
587
-
588
- # source setEnv and ping site
589
- show_debug ? do_cmd("#{src_env} ; curl -s #{url}",show_debug) : do_cmd("#{src_env} ; curl -s -o /dev/null #{url}",show_debug)
590
-
591
- # unset reload in config.props
592
- do_cmd("sed -i 's/ReloadWebProfileWithoutRestart=.*/ReloadWebProfileWithoutRestart=0/g' #{prop_file}",show_debug)
593
-
594
- # done
595
- puts " - #{s}"
596
- end
597
- when "windows"
598
- puts "Windows support coming soon."
599
- #do_cmd(". #{env('PS_CFG_HOME')}/webserv/#{domain}/bin/setEnv.sh")
600
-
601
- #find_sites.each do |s|
602
- # # set vars
603
- # prop_file = "#{env('PS_CFG_HOME')}/webserv/#{domain}/applications/peoplesoft/PORTAL.war/WEB-INF/psftdocs/#{s}}/configuration.properties"
604
- # url = "http://#{PS_PIA_HOST}.#{PS_PIA_DOMAIN}:#{PS_PIA_PORT}/psp/#{s}/?cmd=login&"
605
- # # set reload in config.props
606
- # do_cmd("sed -i 's/ReloadWebProfileWithoutRestart=.*/ReloadWebProfileWithoutRestart=1/g' #{prop_file}")
607
- # # ping site
608
- # do_cmd("curl -s -o /dev/null '#{url}'")
609
- # # unset reload in config.props
610
- # do_cmd("sed -i 's/ReloadWebProfileWithoutRestart=.*/ReloadWebProfileWithoutRestart=0/g' #{prop_file}")
611
- # # done
612
- # puts " - #{s}"
613
- #end
614
- else
615
- puts " badOS - #{OS_CONST}"
616
- end
617
- puts ""
618
- end
619
-
620
- def os
621
- @os ||= (
622
- host_os = RbConfig::CONFIG['host_os']
623
- case host_os
624
- when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
625
- :windows
626
- when /darwin|mac os/
627
- :macosx
628
- when /linux/
629
- :linux
630
- when /solaris|bsd/
631
- :unix
632
- else
633
- raise Error::WebDriverError, "unknown os: #{host_os.inspect}"
634
- end
635
- )
636
- end
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rbconfig'
4
+ require 'etc'
5
+ require 'open3'
6
+
7
+ def do_help
8
+ puts "Usage: psa [command] <type> <domain>"
9
+ puts " "
10
+ puts "Commands:"
11
+ puts " "
12
+ puts " help display this help message"
13
+ puts " list list domains"
14
+ #puts " admin launch psadmin"
15
+ puts " summary PS_CFG_HOME summary, no type or domain needed"
16
+ puts " status status of the domain"
17
+ puts " start hookstart, if enabled, then start the domain"
18
+ puts " stop hookstop, if enabled, stop the domain"
19
+ puts " restart stop and start the domain"
20
+ puts " purge clear domain cache"
21
+ puts " reconfigure stop, configure, and start the domain"
22
+ puts " bounce stop, flush, purge, configure and start the domain"
23
+ puts " kill force stop the domain"
24
+ puts " configure configure the domain"
25
+ puts " flush clear domain IPC"
26
+ puts " "
27
+ puts "Types:"
28
+ puts " "
29
+ puts " app act on application domains"
30
+ #puts " pubsub act on PUBSUB group of application domains"
31
+ puts " prcs act on process scheduler domains"
32
+ puts " web act on web domains"
33
+ puts " all,<blank> act on web, app, and prcs domains"
34
+ puts " "
35
+ puts "Domains:"
36
+ puts " "
37
+ puts " dom act on specific domains"
38
+ puts " all,<blank> act on all domains"
39
+ puts " "
40
+ puts "Each parameter type can be enter in a comma separated list "
41
+ puts " "
42
+ end
43
+
44
+ def do_is_runtime_user_nix
45
+ result = ENV['USER'] == PS_RUNTIME_USER ? true : false
46
+ end
47
+
48
+ def do_is_runtime_user_win
49
+ result = ENV['USERNAME'] == PS_RUNTIME_USER ? true : false
50
+ end
51
+
52
+ def env(var)
53
+ result = "#{OS_CONST}" == "linux" ? "${#{var}}" : "%#{var}%"
54
+ end
55
+
56
+ def do_cmd(cmd, print = true, powershell = true)
57
+ case "#{OS_CONST}"
58
+ when "linux"
59
+ if do_is_runtime_user_nix
60
+ case "#{PS_PSA_DEBUG}"
61
+ when "true"
62
+ p "Command: #{cmd}"
63
+ end
64
+ out = `#{cmd}`
65
+ else
66
+ if "#{PS_PSA_SUDO}" == "on"
67
+ case "#{PS_PSA_DEBUG}"
68
+ when "true"
69
+ p "Command: sudo su - #{PS_RUNTIME_USER} -c '#{cmd}'"
70
+ end
71
+ out = `sudo su - #{PS_RUNTIME_USER} -c '#{cmd}'`
72
+ else
73
+ print "#{PS_RUNTIME_USER} "
74
+ case "#{PS_PSA_DEBUG}"
75
+ when "true"
76
+ p "Command: su - #{PS_RUNTIME_USER} -c '#{cmd}'"
77
+ end
78
+ out = `su - #{PS_RUNTIME_USER} -c '#{cmd}'`
79
+ end
80
+ end
81
+ when "windows"
82
+ case powershell
83
+ when true
84
+ case "#{PS_PSA_DEBUG}"
85
+ when "true"
86
+ p "Command: powershell -NoProfile -Command \"#{cmd}\""
87
+ end
88
+ out = `powershell -NoProfile -Command "#{cmd}"`
89
+ else
90
+ case "#{PS_PSA_DEBUG}"
91
+ when "true"
92
+ p "Command: #{cmd}"
93
+ end
94
+ out = `#{cmd}`
95
+ end
96
+ else
97
+ out = "Invalid OS"
98
+ end
99
+ print ? (puts out) : result = out
100
+ out
101
+ end
102
+
103
+ def do_cmd_banner(c,t,d)
104
+ puts ""
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
118
+ end
119
+
120
+ def find_apps_nix
121
+ case "#{PS_MULTI_HOME}"
122
+ when "false"
123
+ apps = do_cmd("find #{env('PS_CFG_HOME')}/appserv/*/psappsrv.ubx 2>/dev/null",false).split(/\n+/)
124
+ else
125
+ apps = do_cmd("find #{PS_MULTI_HOME}#{PS_MULTI_DELIMIT}*/appserv/*/psappsrv.ubx 2>/dev/null",false).split(/\n+/)
126
+ end
127
+ apps.map! {|app| app.split("/")[-2]}
128
+ end
129
+
130
+ def find_prcss_nix
131
+ case "#{PS_MULTI_HOME}"
132
+ when "false"
133
+ prcss = do_cmd("find #{env('PS_CFG_HOME')}/appserv/prcs/*/psprcsrv.ubx 2>/dev/null",false).split(/\n+/)
134
+ else
135
+ prcss = do_cmd("find #{PS_MULTI_HOME}#{PS_MULTI_DELIMIT}*/appserv/prcs/*/psprcsrv.ubx 2>/dev/null",false).split(/\n+/)
136
+ end
137
+ prcss.map! {|prcs| prcs.split("/")[-2]}
138
+ end
139
+
140
+ def find_webs_nix
141
+ case "#{PS_MULTI_HOME}"
142
+ when "false"
143
+ webs = do_cmd("find #{env('PS_CFG_HOME')}/webserv/*/piaconfig -maxdepth 0",false).split(/\n+/)
144
+ else
145
+ webs = do_cmd("find #{PS_MULTI_HOME}#{PS_MULTI_DELIMIT}*/webserv/*/piaconfig -maxdepth 0",false).split(/\n+/)
146
+ end
147
+ webs.map! {|web| web.split("/")[-2]}
148
+ end
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
+
155
+ def find_apps_win
156
+ case "#{PS_MULTI_HOME}"
157
+ when "false"
158
+ apps = do_cmd("(get-childitem #{env('PS_CFG_HOME')}/appserv/*/psappsrv.ubx | Format-Table -property FullName -HideTableHeaders | Out-String).Trim()",false).split(/\n+/)
159
+ else
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+/)
161
+ end
162
+ apps.map! {|app| app.split('\\')[-2]}
163
+ end
164
+
165
+ def find_prcss_win
166
+ case "#{PS_MULTI_HOME}"
167
+ when "false"
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+/)
169
+ else
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+/)
171
+ end
172
+ prcss.map! {|prcs| prcs.split("\\")[-2]}
173
+ end
174
+
175
+ def find_webs_win
176
+ case "#{PS_MULTI_HOME}"
177
+ when "false"
178
+ webs = do_cmd("(get-childitem #{env('PS_CFG_HOME')}/webserv/*/piaconfig | Format-Table -property FullName -HideTableHeaders | Out-String).Trim()",false).split(/\n+/)
179
+ else
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+/)
181
+ end
182
+ webs.map! {|web| web.split("\\")[-2]}
183
+ end
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
+
191
+ def find_apps
192
+ apps = "#{OS_CONST}" == "linux" ? find_apps_nix : find_apps_win
193
+ end
194
+
195
+ def find_prcss
196
+ prcss = "#{OS_CONST}" == "linux" ? find_prcss_nix : find_prcss_win
197
+ end
198
+
199
+ def find_webs
200
+ webs = "#{OS_CONST}" == "linux" ? find_webs_nix : find_webs_win
201
+ end
202
+
203
+ def find_sites(domain)
204
+ sites = "#{OS_CONST}" == "linux" ? find_sites_nix(domain) : find_sites_win(domain)
205
+ end
206
+
207
+ def do_util
208
+ puts "TODO: util"
209
+ end
210
+
211
+ def do_admin
212
+ do_cmd("#{PS_PSADMIN_PATH}/psadmin")
213
+ end
214
+
215
+ def do_list
216
+ puts "---"
217
+ print "hostname: " ; do_cmd('hostname')
218
+ print "ps-home: " ; do_cmd('echo ' + env('PS_HOME'))
219
+ if PS_MULTI_HOME == "false"
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}*"
223
+ end
224
+ puts ""
225
+ puts "PS_RUNTIME_USER: #{PS_RUNTIME_USER}"
226
+ puts "PS_PSA_SUDO: #{PS_PSA_SUDO}"
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}"
232
+ puts "PS_WIN_SERVICES: #{PS_WIN_SERVICES}"
233
+ puts "PS_MULTI_HOME: #{PS_MULTI_HOME}"
234
+ puts "PS_PARALLEL_BOOT: #{PS_PARALLEL_BOOT}"
235
+ puts "PS_PSA_DEBUG: #{PS_PSA_DEBUG}"
236
+ puts ""
237
+ puts "app:"
238
+ find_apps.each do |a|
239
+ puts " - #{a}"
240
+ end
241
+ puts ""
242
+ puts "prcs:"
243
+ find_prcss.each do |p|
244
+ puts " - #{p}"
245
+ end
246
+ puts ""
247
+ puts "web:"
248
+ find_webs.each do |w|
249
+ puts " - #{w}"
250
+ end
251
+ puts ""
252
+ end
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
+
275
+ def do_summary
276
+ if "#{PS_MULTI_HOME}" != "false"
277
+ ENV['PS_CFG_HOME'] = "#{PS_MULTI_HOME}#{PS_MULTI_DELIMIT}#{domain}"
278
+ end
279
+
280
+ do_psadmin_check ? nil : exit
281
+
282
+ do_cmd("#{PS_PSADMIN_PATH}/psadmin -envsummary")
283
+ #do_status("web","all")
284
+ end
285
+
286
+ def do_status(type, domain)
287
+ case type
288
+ when "app"
289
+ do_psadmin_check ? nil : return
290
+ do_cmd("#{PS_PSADMIN_PATH}/psadmin -c sstatus -d #{domain}")
291
+ do_cmd("#{PS_PSADMIN_PATH}/psadmin -c cstatus -d #{domain}")
292
+ do_cmd("#{PS_PSADMIN_PATH}/psadmin -c qstatus -d #{domain}")
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")
297
+ when "prcs"
298
+ do_psadmin_check ? nil : return
299
+ do_cmd("#{PS_PSADMIN_PATH}/psadmin -p status -d #{domain}")
300
+ when "web"
301
+ # TODO - PIA script status? 1. psadmin, 2. script, 3. lock file, 4. service
302
+ #do_psadmin_check ? nil : return
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")
306
+ else
307
+ puts "Invalid type, see psa help"
308
+ end
309
+ end
310
+
311
+ def do_start(type, domain)
312
+ web_service_name = ENV['WEB_SERVICE_NAME'] || "Psft*Pia*#{domain}*"
313
+ app_service_name = ENV['APP_SERVICE_NAME'] || "Psft*App*#{domain}*"
314
+ prcs_service_name = ENV['PRCS_SERVICE_NAME'] || "Psft*Prcs*#{domain}*"
315
+
316
+ case "#{PS_PARALLEL_BOOT}"
317
+ when "false"
318
+ start_app_cmd = "#{PS_PSADMIN_PATH}/psadmin -c boot -d #{domain}"
319
+ when "true"
320
+ start_app_cmd = "#{PS_PSADMIN_PATH}/psadmin -c parallelboot -d #{domain}"
321
+ end
322
+ start_app_service_cmd = "start-service #{app_service_name}"
323
+ start_prcs_cmd = "#{PS_PSADMIN_PATH}/psadmin -p start -d #{domain}"
324
+ start_prcs_service_cmd = "start-service #{prcs_service_name}"
325
+ start_web_cmd_lnx = "${PS_CFG_HOME?}/webserv/#{domain}/bin/startPIA.sh"
326
+ start_web_cmd_win = "#{PS_PSADMIN_PATH}/psadmin -w start -d #{domain}"
327
+ start_web_service_cmd = "start-service #{web_service_name}"
328
+
329
+ case type
330
+ when "app"
331
+ case "#{PS_WIN_SERVICES}"
332
+ when "true", "tux", "app", "all"
333
+ do_cmd(start_app_service_cmd)
334
+ else
335
+ do_cmd(start_app_cmd)
336
+ case "#{PS_TRAIL_SERVICE}"
337
+ when "true"
338
+ do_cmd(start_app_service_cmd)
339
+ end
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?
346
+ when "prcs"
347
+ case "#{PS_WIN_SERVICES}"
348
+ when "true", "tux", "prcs", "all"
349
+ do_cmd(start_prcs_service_cmd)
350
+ else
351
+ do_cmd(start_prcs_cmd)
352
+ case "#{PS_TRAIL_SERVICE}"
353
+ when "true"
354
+ do_cmd(start_prcs_service_cmd)
355
+ end
356
+ end
357
+ do_hookstart("start",type,domain)
358
+ when "web"
359
+ case "#{OS_CONST}"
360
+ when "linux"
361
+ if File.exist?("#{ENV['PS_CFG_HOME']}/webserv/#{domain}/servers/PIA/tmp/PIA.lok")
362
+ puts "Domain #{domain} already started"
363
+ else
364
+ do_cmd(start_web_cmd_lnx)
365
+ sleep 5.0
366
+ end
367
+ when "windows"
368
+ case "#{PS_WIN_SERVICES}"
369
+ when "true", "web", "all"
370
+ do_cmd(start_web_service_cmd)
371
+ else
372
+ # Run command outside of powershell with 'false' parameter
373
+ do_cmd(start_web_cmd_win, true, false)
374
+ case "#{PS_TRAIL_SERVICE}"
375
+ when "true", "web", "all"
376
+ do_cmd(start_web_service_cmd)
377
+ end
378
+ end
379
+ end
380
+ do_hookstart("start",type,domain)
381
+ else
382
+ puts "Invalid type, see psa help"
383
+ end
384
+ end
385
+
386
+ def do_stop(type, domain)
387
+ web_service_name = ENV['WEB_SERVICE_NAME'] || "Psft*Pia*#{domain}*"
388
+ app_service_name = ENV['APP_SERVICE_NAME'] || "Psft*App*#{domain}*"
389
+ prcs_service_name = ENV['PRCS_SERVICE_NAME'] || "Psft*Prcs*#{domain}*"
390
+
391
+ stop_app_cmd = "#{PS_PSADMIN_PATH}/psadmin -c shutdown -d #{domain}"
392
+ stop_app_service_cmd = "stop-service #{app_service_name}"
393
+ stop_prcs_cmd = "#{PS_PSADMIN_PATH}/psadmin -p stop -d #{domain}"
394
+ stop_prcs_service_cmd = "stop-service #{prcs_service_name}"
395
+ stop_web_cmd_lnx = "${PS_CFG_HOME?}/webserv/#{domain}/bin/stopPIA.sh"
396
+ stop_web_cmd_win = "#{PS_PSADMIN_PATH}/psadmin -w shutdown -d #{domain}"
397
+ stop_web_service_cmd = "stop-service #{web_service_name}"
398
+
399
+ case type
400
+ when "app"
401
+ do_hookstop("stop",type,domain)
402
+ case "#{PS_WIN_SERVICES}"
403
+ when "true"
404
+ do_cmd(stop_app_service_cmd)
405
+ else
406
+ do_cmd(stop_app_cmd)
407
+ case "#{PS_TRAIL_SERVICE}"
408
+ when "true"
409
+ do_cmd(stop_app_service_cmd)
410
+ end
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")
416
+ when "prcs"
417
+ do_hookstop("stop",type,domain)
418
+ case "#{PS_WIN_SERVICES}"
419
+ when "true"
420
+ do_cmd(stop_prcs_service_cmd)
421
+ else
422
+ do_cmd(stop_prcs_cmd)
423
+ case "#{PS_TRAIL_SERVICE}"
424
+ when "true"
425
+ do_cmd(stop_prcs_service_cmd)
426
+ end
427
+ end
428
+ when "web"
429
+ do_hookstop("stop",type,domain)
430
+ case "#{OS_CONST}"
431
+ when "linux"
432
+ do_cmd(stop_web_cmd_lnx)
433
+ when "windows"
434
+ case "#{PS_WIN_SERVICES}"
435
+ when "true"
436
+ do_cmd(stop_web_service_cmd)
437
+ else
438
+ do_cmd(stop_web_cmd_win, true, false)
439
+ case "#{PS_TRAIL_SERVICE}"
440
+ when "true"
441
+ do_cmd(stop_web_service_cmd)
442
+ end
443
+ end
444
+ end
445
+ else
446
+ puts "Invalid type, see psa help"
447
+ end
448
+ end
449
+
450
+ def do_kill(type, domain)
451
+ case type
452
+ when "app"
453
+ do_cmd("#{PS_PSADMIN_PATH}/psadmin -c shutdown! -d #{domain}")
454
+ when "prcs"
455
+ do_cmd("#{PS_PSADMIN_PATH}/psadmin -p kill -d #{domain}")
456
+ when "web"
457
+ case "#{OS_CONST}"
458
+ when "windows"
459
+ do_cmd("(gwmi win32_process | where {$_.Name -eq 'Java.exe'} | where {$_.CommandLine -match '#{domain}'}).ProcessId -ErrorAction SilentlyContinue | % { stop-process $_ -force } -ErrorAction SilentlyContinue")
460
+ when "linux"
461
+ do_cmd("kill $(ps aux|grep java|grep ${PS_CFG_HOME?}/webserv/#{domain}/piaconfig|awk ' {print $2}')")
462
+ end
463
+ else
464
+ puts "Invalid type, see psa help"
465
+ end
466
+ end
467
+
468
+ def do_configure(type, domain)
469
+ case type
470
+ when "app"
471
+ do_cmd("#{PS_PSADMIN_PATH}/psadmin -c configure -d #{domain}")
472
+ when "prcs"
473
+ do_cmd("#{PS_PSADMIN_PATH}/psadmin -p configure -d #{domain}")
474
+ when "web"
475
+ do_webprof_reload("#{domain}")
476
+ else
477
+ puts "Invalid type, see psa help"
478
+ end
479
+ end
480
+
481
+ def do_purge(type, domain)
482
+ case type
483
+ when "app"
484
+ do_cmd("#{PS_PSADMIN_PATH}/psadmin -c purge -d #{domain}")
485
+ when "prcs"
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"
493
+ when "web"
494
+ case "#{OS_CONST}"
495
+ when "linux"
496
+ do_cmd("rm -rf ${PS_CFG_HOME?}/webserv/#{domain}/applications/peoplesoft/PORTAL*/*/cache*/")
497
+ puts "web cache purged"
498
+ when "windows"
499
+ do_cmd("Remove-Item $(Get-ChildItem ${env:PS_CFG_HOME}/webserv/#{domain}/applications/peoplesoft/PORTAL*/*/cache*/ | ?{ $_.PSIsContainer}) -recurse -force -ErrorAction SilentlyContinue".gsub('/','\\'))
500
+ end
501
+ else
502
+ puts "Invalid type, see psa help"
503
+ end
504
+ end
505
+
506
+ def do_flush(type, domain)
507
+ case type
508
+ when "app"
509
+ do_cmd("#{PS_PSADMIN_PATH}/psadmin -c cleanipc -d #{domain}")
510
+ when "prcs"
511
+ do_cmd("#{PS_PSADMIN_PATH}/psadmin -p cleanipc -d #{domain}")
512
+ when "web"
513
+ return # web flush n/a
514
+ else
515
+ puts "Invalid type, see psa help"
516
+ end
517
+ end
518
+
519
+ def do_restart(type, domain)
520
+ do_stop(type, domain)
521
+ do_start(type, domain)
522
+ end
523
+
524
+ def do_reconfigure(type, domain)
525
+ do_stop(type, domain)
526
+ do_configure(type, domain)
527
+ do_start(type, domain)
528
+ end
529
+
530
+ def do_bounce(type, domain)
531
+ do_stop(type, domain)
532
+ do_purge(type, domain)
533
+ do_flush(type, domain)
534
+ do_configure(type, domain)
535
+ do_start(type, domain)
536
+ end
537
+
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
559
+ end
560
+ end
561
+
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}"
602
+ end
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
620
+ else
621
+ puts " badOS - #{OS_CONST}"
622
+ end
623
+ puts ""
624
+ end
625
+
626
+ def os
627
+ @os ||= (
628
+ host_os = RbConfig::CONFIG['host_os']
629
+ case host_os
630
+ when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
631
+ :windows
632
+ when /darwin|mac os/
633
+ :macosx
634
+ when /linux/
635
+ :linux
636
+ when /solaris|bsd/
637
+ :unix
638
+ else
639
+ raise Error::WebDriverError, "unknown os: #{host_os.inspect}"
640
+ end
641
+ )
642
+ end