2018-05-16 11:17:27 +00:00
|
|
|
|
######################################################
|
|
|
|
|
# Rac GUI
|
|
|
|
|
# Distributed under GNU Public License
|
|
|
|
|
# Author: Sergey Kalinin svk@nuk-svk.ru
|
|
|
|
|
# Copyright (c) "http://nuk-svk.ru", 2018
|
|
|
|
|
# https://bitbucket.org/svk28/rac-gui
|
|
|
|
|
######################################################
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
proc Quit {} {
|
|
|
|
|
exit
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
proc TreePress {tree} {
|
|
|
|
|
global host
|
2018-05-17 08:16:14 +00:00
|
|
|
|
set id [$tree selection]
|
|
|
|
|
set values [$tree item [$tree selection] -values]
|
|
|
|
|
set key [lindex [split $id "::"] 0]
|
|
|
|
|
Run::$key $tree $host $values
|
|
|
|
|
#RunCommand $root "infobase summary list --cluster=$cluster $host"
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
namespace eval Run {} {}
|
2018-05-18 09:13:43 +00:00
|
|
|
|
# Получение данных по кластерам
|
2018-05-17 08:16:14 +00:00
|
|
|
|
proc Run::server {tree host values} {
|
|
|
|
|
puts "Server info $host $values"
|
|
|
|
|
set lst [RunCommand server::$host "cluster list $host"]
|
|
|
|
|
set l [split $lst "&"]
|
|
|
|
|
foreach i $l {
|
|
|
|
|
set cluster_list [split $i ":"]
|
|
|
|
|
if {[string trim [lindex $cluster_list 0]] eq "cluster"} {
|
|
|
|
|
set cluster_id [string trim [lindex $cluster_list 1]]
|
|
|
|
|
lappend cluster($cluster_id) $cluster_id
|
|
|
|
|
}
|
|
|
|
|
if {[string trim [lindex $cluster_list 0]] eq "name"} {
|
|
|
|
|
lappend cluster($cluster_id) [string trim [lindex $cluster_list 1]]
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
foreach x [array names cluster] {
|
|
|
|
|
set id [lindex $cluster($x) 0]
|
|
|
|
|
if { [$tree exists "cluster::$id"] == 0 } {
|
|
|
|
|
$tree insert "server::$host" end -id "cluster::$id" -text "[lindex $cluster($x) 1]" -values "$id"
|
|
|
|
|
InsertClusterItems $tree $id
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
proc Run::cluster {$tree host values} {
|
|
|
|
|
global active_cluster
|
|
|
|
|
set active_cluster $values
|
|
|
|
|
puts "Server info $host $values"
|
|
|
|
|
puts [RunCommand cluster::$values "cluster info --cluster=$values $host"]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
proc Run::infobases {tree host values} {
|
|
|
|
|
global active_cluster
|
|
|
|
|
.frm_work.tree_work delete [ .frm_work.tree_work children {}]
|
|
|
|
|
|
|
|
|
|
set lst [RunCommand infobase::$values "infobase summary --cluster=$active_cluster list $host"]
|
|
|
|
|
set l [split $lst "&"]
|
|
|
|
|
foreach i $l {
|
|
|
|
|
set base_list [split $i ":"]
|
|
|
|
|
if {[string trim [lindex $base_list 0]] eq "infobase"} {
|
|
|
|
|
set base_id [string trim [lindex $base_list 1]]
|
|
|
|
|
lappend base($base_id) $base_id
|
|
|
|
|
}
|
|
|
|
|
if {[string trim [lindex $base_list 0]] eq "name"} {
|
|
|
|
|
lappend base($base_id) [string trim [lindex $base_list 1]]
|
|
|
|
|
}
|
|
|
|
|
InsertItemsWorkList $base_list
|
|
|
|
|
}
|
|
|
|
|
foreach x [array names base] {
|
|
|
|
|
set id [lindex $base($x) 0]
|
|
|
|
|
if { [$tree exists "infobase::$id"] == 0 } {
|
|
|
|
|
$tree insert "infobases::$values" end -id "infobase::$id" -text "[lindex $base($x) 1]" -values "$id"
|
|
|
|
|
}
|
|
|
|
|
InsertBaseItems $tree $id
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
proc Run::infobase {tree host values} {
|
|
|
|
|
global active_cluster
|
|
|
|
|
.frm_work.tree_work delete [ .frm_work.tree_work children {}]
|
|
|
|
|
set lst [RunCommand infobase::$values "infobase info --cluster=$active_cluster --infobase=$values $host"]
|
|
|
|
|
set l [split $lst "&"]
|
|
|
|
|
foreach i $l {
|
|
|
|
|
set base_list [split $i ":"]
|
|
|
|
|
InsertItemsWorkList $base_list
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
proc Run::List:Base {tree host values par} {
|
|
|
|
|
global active_cluster
|
|
|
|
|
.frm_work.tree_work delete [ .frm_work.tree_work children {}]
|
|
|
|
|
set lst [RunCommand infobase::$values "$par list --cluster=$active_cluster --infobase=$values $host"]
|
|
|
|
|
set l [split $lst "&"]
|
|
|
|
|
foreach i $l {
|
|
|
|
|
set base_list [split $i ":"]
|
|
|
|
|
InsertItemsWorkList $base_list
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
proc Run::List {tree host values par} {
|
|
|
|
|
global active_cluster
|
|
|
|
|
.frm_work.tree_work delete [ .frm_work.tree_work children {}]
|
|
|
|
|
set lst [RunCommand infobase::$values "$par list --cluster=$active_cluster $host"]
|
|
|
|
|
set l [split $lst "&"]
|
|
|
|
|
foreach i $l {
|
|
|
|
|
set base_list [split $i ":"]
|
|
|
|
|
InsertItemsWorkList $base_list
|
|
|
|
|
}
|
|
|
|
|
}
|
2018-05-16 11:17:27 +00:00
|
|
|
|
|
2018-05-17 08:16:14 +00:00
|
|
|
|
proc Run::sessions {tree host values} {
|
|
|
|
|
Run::List:Base $tree $host $values session
|
|
|
|
|
}
|
|
|
|
|
proc Run::locks {tree host values} {
|
|
|
|
|
Run::List:Base $tree $host $values lock
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
proc Run::connections {tree host values} {
|
|
|
|
|
Run::List:Base $tree $host $values connection
|
|
|
|
|
}
|
|
|
|
|
proc Run::servers {tree host values} {
|
2018-05-18 09:13:43 +00:00
|
|
|
|
global active_cluster
|
|
|
|
|
.frm_work.tree_work delete [ .frm_work.tree_work children {}]
|
|
|
|
|
set lst [RunCommand infobase::$values "server list --cluster=$active_cluster $host"]
|
|
|
|
|
set l [split $lst "&"]
|
|
|
|
|
foreach i $l {
|
|
|
|
|
set server_list [split $i ":"]
|
|
|
|
|
#InsertItemsWorkList $server_list
|
|
|
|
|
if {[string trim [lindex $server_list 0]] eq "server"} {
|
|
|
|
|
set server_id [string trim [lindex $server_list 1]]
|
|
|
|
|
lappend server($server_id) $server_id
|
|
|
|
|
}
|
|
|
|
|
if {[string trim [lindex $server_list 0]] eq "name"} {
|
|
|
|
|
lappend server($server_id) [string trim [lindex $server_list 1]]
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
foreach x [array names server] {
|
|
|
|
|
set id [lindex $server($x) 0]
|
|
|
|
|
if { [$tree exists "work_server::$id"] == 0 } {
|
|
|
|
|
$tree insert "servers::$values" end -id "work_server::$id" -text "[lindex $server($x) 1]" -values "$id"
|
|
|
|
|
}
|
|
|
|
|
#InsertServerItems $tree $id
|
|
|
|
|
}
|
|
|
|
|
#Run::List $tree $host $values server
|
|
|
|
|
}
|
|
|
|
|
proc Run::work_server {tree host values} {
|
|
|
|
|
global active_cluster
|
|
|
|
|
.frm_work.tree_work delete [ .frm_work.tree_work children {}]
|
|
|
|
|
set lst [RunCommand infobase::$values "server info --cluster=$active_cluster --server=$values $host"]
|
|
|
|
|
set l [split $lst "&"]
|
|
|
|
|
foreach i $l {
|
|
|
|
|
set base_list [split $i ":"]
|
|
|
|
|
InsertItemsWorkList $base_list
|
|
|
|
|
}
|
|
|
|
|
#Run::List $tree $host $values server
|
2018-05-17 08:16:14 +00:00
|
|
|
|
}
|
|
|
|
|
proc Run::profiles {tree host values} {
|
|
|
|
|
Run::List $tree $host $values profile
|
|
|
|
|
}
|
|
|
|
|
proc Run::processes {tree host values} {
|
|
|
|
|
Run::List $tree $host $values process
|
|
|
|
|
}
|
|
|
|
|
proc Run::managers {tree host values} {
|
|
|
|
|
Run::List $tree $host $values manager
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
proc Run::admins {tree host values} {
|
|
|
|
|
global active_cluster
|
|
|
|
|
.frm_work.tree_work delete [ .frm_work.tree_work children {}]
|
|
|
|
|
set lst [RunCommand infobase::$values "agent admin list $host"]
|
|
|
|
|
set l [split $lst "&"]
|
|
|
|
|
foreach i $l {
|
|
|
|
|
set base_list [split $i ":"]
|
|
|
|
|
InsertItemsWorkList $base_list
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
proc InsertItemsWorkList {lst} {
|
|
|
|
|
.frm_work.tree_work insert {} end -values $lst
|
|
|
|
|
#.frm_work.tree_work insert val end -text [lindex $lst 1] -values [lindex $lst 1]
|
2018-05-16 11:17:27 +00:00
|
|
|
|
}
|
|
|
|
|
proc RunCommand {root par} {
|
|
|
|
|
global dir rac_cmd cluster
|
|
|
|
|
set pipe [open "|$rac_cmd $par" "r"]
|
2018-05-17 08:16:14 +00:00
|
|
|
|
set lst ""
|
|
|
|
|
while {[gets $pipe line]>=0} {
|
|
|
|
|
#puts "$line"
|
|
|
|
|
append lst "$line&"
|
2018-05-16 11:17:27 +00:00
|
|
|
|
}
|
2018-05-17 08:16:14 +00:00
|
|
|
|
close $pipe
|
|
|
|
|
return $lst
|
|
|
|
|
# fileevent $pipe readable [list DebugInfo .frm_work.tree_work $pipe]
|
|
|
|
|
# fconfigure $pipe -buffering none -blocking no
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
proc InsertClusterItems {tree id} {
|
|
|
|
|
set parent "cluster::$id"
|
|
|
|
|
$tree insert $parent end -id "infobases::$id" -text "Информационные базы" -values "$id"
|
|
|
|
|
$tree insert $parent end -id "servers::$id" -text "Рабочие серверы" -values "$id"
|
|
|
|
|
$tree insert $parent end -id "admins::$id" -text "Администраторы" -values "$id"
|
|
|
|
|
$tree insert $parent end -id "managers::$id" -text "Менеджеры кластера" -values "managers-all"
|
|
|
|
|
$tree insert $parent end -id "processes::$id" -text "Рабочие процессы" -values "workprocess-all"
|
|
|
|
|
$tree insert $parent end -id "sessions::$id" -text "Сеансы" -values "sessions-all"
|
|
|
|
|
$tree insert $parent end -id "locks::$id" -text "Блокировки" -values "blocks-all"
|
|
|
|
|
$tree insert $parent end -id "connections::$id" -text "Соединения" -values "connections-all"
|
|
|
|
|
$tree insert $parent end -id "profiles::$id" -text "Профили безопасности" -values "secureprofiles-all"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
proc InsertBaseItems {tree id} {
|
|
|
|
|
set parent "infobase::$id"
|
2018-05-18 06:05:27 +00:00
|
|
|
|
if { [$tree exists "sessions::$id"] == 0 } {
|
|
|
|
|
$tree insert $parent end -id "sessions::$id" -text "Сеансы" -values "$id"
|
|
|
|
|
}
|
|
|
|
|
if { [$tree exists "locks::$id"] == 0 } {
|
|
|
|
|
$tree insert $parent end -id "locks::$id" -text "Блокировки" -values "$id"
|
|
|
|
|
}
|
|
|
|
|
if { [$tree exists "connections::$id"] == 0 } {
|
|
|
|
|
$tree insert $parent end -id "connections::$id" -text "Соединения" -values "$id"
|
|
|
|
|
}
|
2018-05-16 11:17:27 +00:00
|
|
|
|
}
|
2018-05-18 09:13:43 +00:00
|
|
|
|
proc InsertServerstems {tree id} {
|
|
|
|
|
set parent "infobase::$id"
|
|
|
|
|
if { [$tree exists "sessions::$id"] == 0 } {
|
|
|
|
|
$tree insert $parent end -id "sessions::$id" -text "Сеансы" -values "$id"
|
|
|
|
|
}
|
|
|
|
|
if { [$tree exists "locks::$id"] == 0 } {
|
|
|
|
|
$tree insert $parent end -id "locks::$id" -text "Блокировки" -values "$id"
|
|
|
|
|
}
|
|
|
|
|
if { [$tree exists "connections::$id"] == 0 } {
|
|
|
|
|
$tree insert $parent end -id "connections::$id" -text "Соединения" -values "$id"
|
|
|
|
|
}
|
|
|
|
|
}
|
2018-05-16 11:17:27 +00:00
|
|
|
|
|
|
|
|
|
proc DebugInfo {widget f} {
|
2018-05-17 08:16:14 +00:00
|
|
|
|
if {[eof $f]} {
|
2018-05-16 11:17:27 +00:00
|
|
|
|
catch [close $f] msg
|
|
|
|
|
if {$msg != ""} {
|
|
|
|
|
puts $msg
|
|
|
|
|
} else {
|
|
|
|
|
puts $msg
|
|
|
|
|
}
|
|
|
|
|
}
|
2018-05-17 08:16:14 +00:00
|
|
|
|
|
2018-05-16 11:17:27 +00:00
|
|
|
|
while {[gets $f line]>=0} {
|
|
|
|
|
puts "$line"
|
|
|
|
|
$widget insert {} end -text "$line" -values "$line"
|
|
|
|
|
}
|
|
|
|
|
}
|
2018-05-17 08:16:14 +00:00
|
|
|
|
|
2018-05-18 09:13:43 +00:00
|
|
|
|
proc Del {} {
|
|
|
|
|
global active_cluster host
|
|
|
|
|
set id [.frm_tree.tree selection]
|
|
|
|
|
set values [.frm_tree.tree item [.frm_tree.tree selection] -values]
|
|
|
|
|
set key [lindex [split $id "::"] 0]
|
|
|
|
|
puts "$key, $id , $values"
|
|
|
|
|
Del::$key .frm_tree.tree $host $values
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
namespace eval Del {} {}
|
|
|
|
|
|
|
|
|
|
proc Del::work_server {tree host values} {
|
|
|
|
|
global active_cluster
|
|
|
|
|
.frm_work.tree_work delete [ .frm_work.tree_work children {}]
|
|
|
|
|
set answer [tk_messageBox -message "Удалить рабочий сервер $values?" \
|
|
|
|
|
-icon question -type yesno ]
|
|
|
|
|
switch -- $answer {
|
|
|
|
|
yes {
|
|
|
|
|
set lst [RunCommand infobase::$values "server remove --cluster=$active_cluster --server=$values $host"]
|
|
|
|
|
$tree delete "work_server::$values"
|
|
|
|
|
}
|
|
|
|
|
no {return}
|
|
|
|
|
}
|
|
|
|
|
}
|
2018-05-18 06:05:27 +00:00
|
|
|
|
|