From 0878dbf0b25db94d227ab7bf6b0668f68e7e370f Mon Sep 17 00:00:00 2001 From: Sergey Kalinin Date: Sun, 17 Jun 2018 16:02:07 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=BF=D1=82=D0=B8=D0=BC=D0=B8=D0=B7?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D1=8B=20=D0=BD=D0=B5=D0=BA?= =?UTF-8?q?=D0=BE=D1=82=D0=BE=D1=80=D1=8B=D0=B5=20=D0=BF=D1=80=D0=BE=D1=86?= =?UTF-8?q?=D0=B5=D0=B4=D1=83=D1=80=D1=8B.=20=D0=9D=D0=B0=D1=87=D0=B0?= =?UTF-8?q?=D1=82=D0=B0=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20=D0=BF?= =?UTF-8?q?=D0=BE=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8E=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B9=20=D0=B0?= =?UTF-8?q?=D0=B2=D1=82=D0=BE=D1=80=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/function.tcl | 1041 ++++++++++++++++++++++++++-------------------- lib/images.tcl | 21 + rac_gui.cfg | 6 + 3 files changed, 624 insertions(+), 444 deletions(-) diff --git a/lib/function.tcl b/lib/function.tcl index 9afed8c..830abad 100644 --- a/lib/function.tcl +++ b/lib/function.tcl @@ -10,22 +10,170 @@ proc Quit {} { exit } +set active_cluster "" +set host "" +set infobase "" +set server "" + proc TreePress {tree} { - global host server - - set id [$tree selection] - set values [$tree item [$tree selection] -values] + global host server active_cluster infobase + set id [$tree selection] + SetGlobalVarFromTreeItems $tree $id + set values [$tree item $id -values] set key [lindex [split $id "::"] 0] - if {$key eq "server"} { - set host $values - } elseif {$key eq ""} { - return - } elseif {$key eq "work_server"} { - set server $values - } - #puts "$id $host $values" + puts $key Run::$key $tree $host $values - #RunCommand $root "infobase summary list --cluster=$cluster $host" +} + +proc SetGlobalVarFromTreeItems {tree id} { + global host server active_cluster infobase + set parent [$tree parent $id] + set values [$tree item $id -values] + set key [lindex [split $id "::"] 0] + switch -- $key { + server {set host $values} + work_server {set server $values} + cluster {set active_cluster $values} + infobase {set infobase $values} + } + if {$parent eq ""} { + return + } else { + SetGlobalVarFromTreeItems $tree $parent + } +} + +proc InsertItemsWorkList {lst} { + global work_list_row_count + if [expr $work_list_row_count % 2] { + set tag dark + } else { + set tag light + } + foreach i $lst { + if [regexp -nocase -all -- {(\D+)(\s*?|)(:)(\s*?|)(.*)} $i match param v2 v3 v4 value] { + lappend column_list [string trim $param] + lappend value_list [string trim $value] + } + } + .frm_work.tree_work configure -columns $column_list -displaycolumns $column_list + .frm_work.tree_work insert {} end -values $value_list -tags $tag + .frm_work.tree_work column #0 -stretch + foreach j $column_list { + .frm_work.tree_work heading $j -text $j + } + incr work_list_row_count +} + +proc RunCommand {root par} { + global dir rac_cmd cluster work_list_row_count + puts "$rac_cmd $par" + set work_list_row_count 0 + set pipe [open "|$rac_cmd $par" "r"] + set lst "" + set l "" + while {[gets $pipe line]>=0} { + if {$line eq ""} { + lappend l $lst + set lst "" + } else { + lappend lst [string trim $line] + } + } + close $pipe + return $l + + # 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 $id + $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" + 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" + } +} + +proc InsertWorkServerItems {tree id} { + set parent "work_server::$id" + if { [$tree exists "work_server_processes::$id"] == 0 } { + $tree insert $parent end -id "work_server_processes::$id" -text "Процессы" -values "$id" + } + if { [$tree exists "work_server_licenses::$id"] == 0 } { + $tree insert $parent end -id "work_server_licenses::$id" -text "Лицензии" -values "$id" + } + if { [$tree exists "rule::$id"] == 0 } { + $tree insert $parent end -id "rule::$id" -text "Требования назначения функциональности" -values "$id" + } + if { [$tree exists "services::$id"] == 0 } { + # $tree insert $parent end -id "services::$id" -text "Сервисы" -values "$id" + } +} + +proc GetInfobases {cluster host} { + set lst [RunCommand "" "infobase summary --cluster=$cluster list $host"] + set return_list "" + foreach info_bases_list $lst { + foreach i $info_bases_list { + set i [split $i ":"] + if {[string trim [lindex $i 0]] eq "name"} { + lappend return_list [string trim [lindex $i 1]] + } + } + } + return $return_list +} + +proc FormFieldsDataInsert {frm lst} { + foreach i [lindex $lst 0] { + if [regexp -nocase -all -- {(\D+)(\s*?|)(:)(\s*?|)(.*)} $i match param v2 v3 v4 value] { + regsub -all -- "-" [string trim $param] "_" entry_name + if [winfo exists $frm.ent_$entry_name] { + $frm.ent_$entry_name delete 0 end + $frm.ent_$entry_name insert end [string trim $value "\""] + } + if [winfo exists $frm.cb_$entry_name] { + set $entry_name [string trim $value "\""] + } + if [winfo exists $frm.check_$entry_name] { + global $entry_name + if {$value eq "0"} { + set $entry_name no + } elseif {$value eq "1"} { + set $entry_name yes + } else { + set $entry_name $value + } + } + } + } +} + +proc SaveMainServer {host port} { + global dir + set file [open [file join $dir(work) 1c_srv.cfg] "a+"] + puts $file "$host:$port" + close $file + return "$host:$port" } namespace eval Run {} {} @@ -39,7 +187,7 @@ proc Run::server {tree host values} { foreach cluster_list $lst { InsertItemsWorkList $cluster_list foreach i $cluster_list { - puts $i + #puts $i set cluster_list [split $i ":"] if {[string trim [lindex $cluster_list 0]] eq "cluster"} { set cluster_id [string trim [lindex $cluster_list 1]] @@ -57,6 +205,11 @@ proc Run::server {tree host values} { InsertClusterItems $tree $id } } + if { [$tree exists "agent_admins::$id"] == 0 } { + + $tree insert "server::$host" end -id "agent_admins::$id" -text "Администраторы" -values "$id" + #InsertClusterItems $tree $id + } } proc Run::cluster {tree host values} { @@ -245,328 +398,92 @@ proc Run::manager {tree host values} { } } } -proc Run::admins {tree host values} { - global active_cluster +proc Run::agent_admin {tree host values} { + Run::admins $tree $host $values +} +proc Run::agent_admins {tree host values} { + global active_cluster agent_user agent_pwd .frm_work.tree_work delete [ .frm_work.tree_work children {}] - set lst [RunCommand infobase::$values "agent admin list $host"] - - foreach l $lst { + if {[info exists agent_user] == 0 || $agent_user eq ""} { + set frm [AddToplevel "Авторизация администратора агента кластера" administrator_grey_64] + label $frm.lbl_name -text "Имя пользователя" + entry $frm.ent_name + label $frm.lbl_pwd -text "Пароль" + entry $frm.ent_pwd - InsertItemsWorkList $l + grid $frm.lbl_name -row 0 -column 0 -sticky nw -padx 5 -pady 5 + grid $frm.ent_name -row 0 -column 1 -sticky nsew -padx 5 -pady 5 + grid $frm.lbl_pwd -row 1 -column 0 -sticky nw -padx 5 -pady 5 + grid $frm.ent_pwd -row 1 -column 1 -sticky nsew -padx 5 -pady 5 + + grid columnconfigure $frm 0 -weight 1 + grid rowconfigure $frm 0 -weight 1 + #set frm_btn [frame .add.frm_btn -border 0] + .add.frm_btn.btn_ok configure -command { + set agent_user [.add.frm.ent_name get] + set agent_pwd [.add.frm.ent_pwd get] + set lst [RunCommand "" "agent admin list --agent-user=$agent_user --agent-pwd=$agent_pwd $host"] + foreach l $lst { + InsertItemsWorkList $l + } + destroy .add + } + } else { + set lst [RunCommand "" "agent admin list --agent-user=$agent_user --agent-pwd=$agent_pwd $host"] + foreach l $lst { + InsertItemsWorkList $l + } + return } } + +proc Run::admins {tree host values} { + global active_cluster agent_user agent_pwd cluster_user cluster_pwd + .frm_work.tree_work delete [ .frm_work.tree_work children {}] + if {[info exists cluster_user] == 0 || $cluster_user eq ""} { + set frm [AddToplevel "Авторизация администратора кластера" administrator_grey_64] + label $frm.lbl_name -text "Имя пользователя" + entry $frm.ent_name + label $frm.lbl_pwd -text "Пароль" + entry $frm.ent_pwd + + grid $frm.lbl_name -row 0 -column 0 -sticky nw -padx 5 -pady 5 + grid $frm.ent_name -row 0 -column 1 -sticky nsew -padx 5 -pady 5 + grid $frm.lbl_pwd -row 1 -column 0 -sticky nw -padx 5 -pady 5 + grid $frm.ent_pwd -row 1 -column 1 -sticky nsew -padx 5 -pady 5 + + grid columnconfigure $frm 0 -weight 1 + grid rowconfigure $frm 0 -weight 1 + #set frm_btn [frame .add.frm_btn -border 0] + .add.frm_btn.btn_ok configure -command { + set cluster_user [.add.frm.ent_name get] + set cluster_pwd [.add.frm.ent_pwd get] + set lst [RunCommand "" "cluster admin list --cluster-user=$cluster_user --cluster-pwd=$cluster_pwd --cluster=$active_cluster $host"] + foreach l $lst { + InsertItemsWorkList $l + } + destroy .add + } + } else { + set lst [RunCommand "" "cluster admin list --cluster-user=$cluster_user --cluster-pwd=$cluster_pwd --cluster=$active_cluster $host"] + foreach l $lst { + InsertItemsWorkList $l + } + return + } +} + proc Run::rule {tree host values} { global active_cluster .frm_work.tree_work delete [ .frm_work.tree_work children {}] set lst [RunCommand "" "rule list --cluster=$active_cluster --server=$values $host"] foreach l $lst { - puts $l + #puts $l InsertItemsWorkList $l } } -proc InsertItemsWorkList {lst} { - global work_list_row_count - if [expr $work_list_row_count % 2] { - set tag dark - } else { - set tag light - } - foreach i $lst { - if [regexp -nocase -all -- {(\D+)(\s*?|)(:)(\s*?|)(.*)} $i match param v2 v3 v4 value] { - lappend column_list [string trim $param] - lappend value_list [string trim $value] - } - } - .frm_work.tree_work configure -columns $column_list -displaycolumns $column_list - .frm_work.tree_work insert {} end -values $value_list -tags $tag - .frm_work.tree_work column #0 -stretch - foreach j $column_list { - .frm_work.tree_work heading $j -text $j - } - incr work_list_row_count -} - -proc RunCommand {root par} { - global dir rac_cmd cluster work_list_row_count - puts "$rac_cmd $par" - set work_list_row_count 0 - set pipe [open "|$rac_cmd $par" "r"] - set lst "" - set l "" - while {[gets $pipe line]>=0} { - if {$line eq ""} { - lappend l $lst - set lst "" - } else { - lappend lst [string trim $line] - } - } - close $pipe - return $l - - # 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 $id - $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" - 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" - } -} - -proc InsertWorkServerItems {tree id} { - set parent "work_server::$id" - if { [$tree exists "work_server_processes::$id"] == 0 } { - $tree insert $parent end -id "work_server_processes::$id" -text "Процессы" -values "$id" - } - if { [$tree exists "work_server_licenses::$id"] == 0 } { - $tree insert $parent end -id "work_server_licenses::$id" -text "Лицензии" -values "$id" - } - if { [$tree exists "rule::$id"] == 0 } { - $tree insert $parent end -id "rule::$id" -text "Требования назначения функциональности" -values "$id" - } - if { [$tree exists "services::$id"] == 0 } { - # $tree insert $parent end -id "services::$id" -text "Сервисы" -values "$id" - } -} - -proc Del {} { - global active_cluster host - set tree .frm_tree.tree - set id [.frm_tree.tree selection] - set values [.frm_tree.tree item $id -values] - set key [lindex [split $id "::"] 0] - - Del::$key $tree $host $values -} - -namespace eval Del {} {} -proc Del::work_server {tree host values} { - global active_cluster - 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"] - .frm_tree.tree delete "work_server::$values" - .frm_work.tree_work delete [ .frm_work.tree_work children {}] - } - no {return} - } -} -proc Del::servers {tree host values} { - global active_cluster - set work_tree_id [.frm_work.tree_work selection] - set work_tree_values [.frm_work.tree_work item $work_tree_id -values] - puts ">$work_tree_id >$work_tree_values" - set id [.frm_tree.tree selection] - #set values [.frm_tree.tree item $id -values] - set key [lindex [split $id "::"] 0] - set column_list [.frm_work.tree_work cget -columns] - set i 0 - # проверка соответсвия колонки в таблице и ключа в дереве - foreach l $column_list { - if {$l eq "server" } { - set work_server_id [lindex $work_tree_values $i] - set tree .frm_work.tree_work - } - incr i - } - - Del::work_server $tree $host $work_server_id -} -proc Del::cluster {tree host values} { - set answer [tk_messageBox -message "Удалить кластер $values?" \ - -icon question -type yesno ] - switch -- $answer { - yes { - set lst [RunCommand infobase::$values "cluster remove --cluster=$values $host"] - $tree delete "cluster::$values" - .frm_work.tree_work delete [ .frm_work.tree_work children {}] - } - no {return} - } -} -proc Del::infobase {tree host values} { - global active_cluster - set answer [tk_messageBox -message "Удалить информационную базу $values?" \ - -icon question -type yesno ] - switch -- $answer { - yes { - set lst [RunCommand infobase::$values "infobase drop --infobase=$values --cluster=$active_cluster $host"] - $tree delete "infobase::$values" - .frm_work.tree_work delete [ .frm_work.tree_work children {}] - } - no {return} - } -} -proc Del::infobases {tree host values} { - global active_cluster - set work_tree_id [.frm_work.tree_work selection] - set work_tree_values [.frm_work.tree_work item $work_tree_id -values] - puts ">$work_tree_id >$work_tree_values" - set id [.frm_tree.tree selection] - #set values [.frm_tree.tree item $id -values] - set key [lindex [split $id "::"] 0] - set column_list [.frm_work.tree_work cget -columns] - set i 0 - # проверка соответсвия колонки в таблице и ключа в дереве - foreach l $column_list { - if {$l eq "infobase" } { - set values [lindex $work_tree_values $i] - set tree .frm_work.tree_work - } - incr i - } - - puts "$tree $host $values" - Del::infobase $tree $host $values -} -proc Del::connections {tree host values} { - global active_cluster - set work_tree_id [.frm_work.tree_work selection] - set work_tree_values [.frm_work.tree_work item $work_tree_id -values] - puts ">$work_tree_id >$work_tree_values" - set id [.frm_tree.tree selection] - #set values [.frm_tree.tree item $id -values] - set key [lindex [split $id "::"] 0] - set column_list [.frm_work.tree_work cget -columns] - set i 0 - # проверка соответсвия колонки в таблице и ключа в дереве - foreach l $column_list { - if {$l eq "connection" } { - set connection_id [lindex $work_tree_values $i] - } - if {$l eq "process" } { - set process_id [lindex $work_tree_values $i] - } - incr i - } - - puts "$connection_id $process_id" - - set answer [tk_messageBox -message "Удалить соединение $connection_id?" \ - -icon question -type yesno ] - switch -- $answer { - yes { - set lst [RunCommand infobase::$values "connection disconnect --process=$process_id --connection=$connection_id --cluster=$active_cluster $host"] - #$tree delete "infobase::$values" - .frm_work.tree_work delete [ .frm_work.tree_work children {}] - } - no {return} - } -} - -proc Del::sessions {tree host values} { - global active_cluster - set work_tree_id [.frm_work.tree_work selection] - set work_tree_values [.frm_work.tree_work item $work_tree_id -values] - set id [.frm_tree.tree selection] - set values [.frm_tree.tree item $id -values] - set key [lindex [split $id "::"] 0] - set column_list [.frm_work.tree_work cget -columns] - set i 0 - # проверка соответсвия колонки в таблице и ключа в дереве - foreach l $column_list { - if {$l eq "session" } { - set session_id [lindex $work_tree_values $i] - } - incr i - } - - set answer [tk_messageBox -message "Прервать сессию $session_id?" \ - -icon question -type yesno ] - switch -- $answer { - yes { - set lst [RunCommand infobase::$values "session terminate --session=$session_id --cluster=$active_cluster $host"] - #$tree delete "infobase::$values" - .frm_work.tree_work delete [ .frm_work.tree_work children {}] - } - no {return} - } -} - - -proc Del::rule {tree host values} { - global active_cluster server - set work_tree_id [.frm_work.tree_work selection] - set work_tree_values [.frm_work.tree_work item $work_tree_id -values] - set id [.frm_tree.tree selection] - #set values [.frm_tree.tree item $id -values] - set key [lindex [split $id "::"] 0] - set column_list [.frm_work.tree_work cget -columns] - set i 0 - # проверка соответсвия колонки в таблице и ключа в дереве - foreach l $column_list { - if {$l eq "rule" } { - set rule_id [lindex $work_tree_values $i] - } - incr i - } - if {[info exists rule_id] == 0 || $rule_id eq ""} { - return - } - - set answer [tk_messageBox -message "Удалить требование $rule_id?" \ - -icon question -type yesno ] - switch -- $answer { - yes { - set lst [RunCommand infobase::$values "rule remove --server=$server --rule=$rule_id --cluster=$active_cluster $host"] - #$tree delete "infobase::$values" - .frm_work.tree_work delete [ .frm_work.tree_work children {}] - } - no {return} - } -} - -proc Del::server {tree host values} { - global dir - set answer [tk_messageBox -message "Удалить сервер $values?" \ - -icon question -type yesno ] - switch -- $answer { - yes { - #set lst [RunCommand infobase::$values "cluster remove --cluster=$values $host"] - file copy [file join $dir(work) 1c_srv.cfg] [file join $dir(work) 1c_srv.cfg.bak] - set orig_file [open [file join $dir(work) 1c_srv.cfg.bak] "r"] - set file [open [file join $dir(work) 1c_srv.cfg] "w"] - while {[gets $orig_file line] >=0 } { - puts $line - if { $line ne "" && $line ne "$values"} { - puts $file $line - } - } - close $file - close $orig_file - #return "$host:$port" - $tree delete "server::$values" - .frm_work.tree_work delete [ .frm_work.tree_work children {}] - file delete [file join $dir(work) 1c_srv.cfg.bak] - } - no {return} - } -} proc Add {} { global active_cluster host set id [.frm_tree.tree selection] @@ -576,7 +493,7 @@ proc Add {} { set host [ Add::server ] return } - puts "$key, $id , $values" + #puts "$key, $id , $values" Add::$key .frm_tree.tree $host $values } @@ -603,6 +520,81 @@ proc AddToplevel {lbl img} { } namespace eval Add {} {} +proc Add::agent_admins {tree host value} { + Add::agent_admin $tree $host $value +} + +proc Add::agent_admin {tree host value} { + global default auth active_cluster + set frm [AddToplevel "Добавление администратора агента кластера" administrator_grey_64] + set auth [lindex $default(auth) 0] + label $frm.lbl_name -text "Имя пользователя" + entry $frm.ent_name + label $frm.lbl_pwd -text "Пароль" + entry $frm.ent_pwd + label $frm.lbl_descr -text "Примечание" + entry $frm.ent_descr + label $frm.lbl_auth -text "Способ аутентификации" + ttk::combobox $frm.cb_auth -textvariable auth -values $default(auth) + label $frm.lbl_os_user -text "Пользователь ОС" + entry $frm.ent_os_user + + grid $frm.lbl_name -row 0 -column 0 -sticky nw -padx 5 -pady 5 + grid $frm.ent_name -row 0 -column 1 -sticky nsew -padx 5 -pady 5 + grid $frm.lbl_pwd -row 1 -column 0 -sticky nw -padx 5 -pady 5 + grid $frm.ent_pwd -row 1 -column 1 -sticky nsew -padx 5 -pady 5 + grid $frm.lbl_descr -row 2 -column 0 -sticky nw -padx 5 -pady 5 + grid $frm.ent_descr -row 2 -column 1 -sticky nsew -padx 5 -pady 5 + grid $frm.lbl_auth -row 3 -column 0 -sticky nw -padx 5 -pady 5 + grid $frm.cb_auth -row 3 -column 1 -sticky nsew -padx 5 -pady 5 + grid $frm.lbl_os_user -row 4 -column 0 -sticky nw -padx 5 -pady 5 + grid $frm.ent_os_user -row 4 -column 1 -sticky nsew -padx 5 -pady 5 + + grid columnconfigure $frm 0 -weight 1 + grid rowconfigure $frm 0 -weight 1 + #set frm_btn [frame .add.frm_btn -border 0] + .add.frm_btn.btn_ok configure -command { + RunCommand "" "agent admin register \ + --name=[.add.frm.ent_name get] \ + --pwd=[.add.frm.ent_pwd get] \ + --descr=[.add.frm.ent_descr get] \ + --auth=$auth \ + --os-user=[.add.frm.ent_os_user get] $host" + #--cluster=$active_cluster $host" + Run::admins $tree $host $active_cluster + destroy .add + } + return $frm +} + +proc Add::admins {tree host value} { + Add::admin $tree $host $value +} + +proc Add::admin {tree host value} { + global default auth active_cluster agent_user agent_pwd cluster_uer cluster_pwd + set frm [Add::agent_admin $tree $host $value] + wm title .add "Добавление администратора кластера" + .add.frm configure -text "Добавление администратора кластера" + .add.frm_btn.btn_ok configure -command { + RunCommand "" "cluster admin register \ + --name=[.add.frm.ent_name get] \ + --pwd=[.add.frm.ent_pwd get] \ + --descr=[.add.frm.ent_descr get] \ + --auth=$auth \ + --os-user=[.add.frm.ent_os_user get] \ + --agent-user=$agent_user \ + --agent-pwd=$agent_pwd + --cluster-user=$cluster_user \ + --cluster-pwd=$cluster_pwd \ + --cluster=$active_cluster $host" + #--cluster=$active_cluster $host" + Run::admins $tree $host $active_cluster + destroy .add + } + return $frm +} + proc Add::server {} { global default set frm [AddToplevel "Добавление основного сервера" server_grey_64] @@ -628,7 +620,7 @@ proc Add::server {} { return $frm } proc Add::servers {tree host values} { - global default dedicate_managers using + global default dedicate_managers using active_cluster set dedicate_manager "none" set using_central_server "normal" #set active_cluster $values @@ -703,7 +695,7 @@ proc Add::servers {tree host values} { --memory-limit=[.add.frm.ent_memory_limit get] \ --connections-limit=[.add.frm.ent_connections_limit get] \ --cluster-port=[.add.frm.ent_cluster_port get] \ - --dedicate-managers=$dedicate_manager \ + --dedicate-managers=$dedicate_managers \ --safe-working-processes-memory-limit=[.add.frm.ent_safe_working_processes_memory_limit get] \ --safe-call-memory-limit=[.add.frm.ent_safe_call_memory_limit get] \ --cluster=$active_cluster $host" @@ -716,7 +708,7 @@ proc Add::work_server {tree host values} { return [Add::servers $tree $host $values] } proc Add::infobase {tree host values} { - Add::infobases $tree $host $values + return [Add::infobases $tree $host $values] } proc Add::infobases {tree host values} { global default active_cluster @@ -752,7 +744,7 @@ proc Add::infobases {tree host values} { entry $frm.ent_locale $frm.ent_locale insert end $default(locale) label $frm.lbl_date_offset -text "Смещение дат" - ttk::combobox $frm.cb_date_offset -textvariable date_offset -values $default(date_offset)]] + ttk::combobox $frm.cb_date_offset -textvariable date_offset -values $default(date_offset) label $frm.lbl_license_distribution -justify left -anchor nw -text "Разрешить выдачу лицензий\nсервером 1С" checkbutton $frm.cb_license_distribution -variable license_distribution -onvalue allow -offvalue deny label $frm.lbl_create_db -text "Создать БД в случае её отсутствия" @@ -822,8 +814,6 @@ proc Add::cluster {tree host values} { global max_memory_size max_memory_time_limit errors_count_threshold security_level global load_balancing_mode kill_problem_processes - puts "$tree $host $values" - set lifetime_limit $default(lifetime_limit) set expiration_timeout $default(expiration_timeout) set session_fault_tolerance_level $default(session_fault_tolerance_level) @@ -912,25 +902,23 @@ proc Add::cluster {tree host values} { } proc Add::rule {tree host values} { - global default active_cluster object infobase object_type server infobase_name rule_type + global default active_cluster infobase object_type server infobase_name rule_type set server $values set frm [AddToplevel "Требование назначения функциональности" functional_grey_64] #set type [lindex $default(obtype) 0] + set infobase_name "" label $frm.lbl_object_type -text "Объект требования" ttk::combobox $frm.cb_object_type -textvariable object_type \ - -values $default(object_type)] - + -values $default(object_type) label $frm.lbl_rule_type -text "Тип требования" ttk::combobox $frm.cb_rule_type -textvariable rule_type \ - -values $default(rule_type)] - + -values $default(rule_type) label $frm.lbl_infobase_name -text "Имя ИБ" ttk::combobox $frm.cb_infobase_name -textvariable infobase_name \ - -values [GetInfobases $active_cluster $host]] - + -values [GetInfobases $active_cluster $host] label $frm.lbl_application_ext -text "Значение доп. параметра" entry $frm.ent_application_ext label $frm.lbl_priority -text "Приоритет" @@ -964,28 +952,6 @@ proc Add::rule {tree host values} { return $frm } -proc GetInfobases {cluster host} { - set lst [RunCommand "" "infobase summary --cluster=$cluster list $host"] - set return_list "" - foreach info_bases_list $lst { - foreach i $info_bases_list { - set i [split $i ":"] - if {[string trim [lindex $i 0]] eq "name"} { - lappend return_list [string trim [lindex $i 1]] - } - } - } - return $return_list -} - -proc SaveMainServer {host port} { - global dir - set file [open [file join $dir(work) 1c_srv.cfg] "a+"] - puts $file "$host:$port" - close $file - return "$host:$port" -} - proc Edit {} { global active_cluster host set tree .frm_tree.tree @@ -997,7 +963,9 @@ proc Edit {} { } namespace eval Edit {} {} - +proc Edit::admins {tree host value} { + return +} proc Edit::server {tree host value} { global dir prev_address @@ -1043,27 +1011,11 @@ proc Edit::cluster {tree host values} { set active_cluster $values set lst [RunCommand cluster::$values "cluster info --cluster=$active_cluster $host"] - foreach i [lindex $lst 0] { - if [regexp -nocase -all -- {(\D+)(\s*?|)(:)(\s*?|)(.*)} $i match param v2 v3 v4 value] { - regsub -all -- "-" [string trim $param] "_" entry_name - if [winfo exists .add.frm.ent_$entry_name] { - .add.frm.ent_$entry_name delete 0 end - .add.frm.ent_$entry_name insert end [string trim $value "\""] - } - if [winfo exists .add.frm.cb_$entry_name] { - set $entry_name [string trim $value "\""] - } - if [winfo exists .add.frm.check_$entry_name] { - if {$value eq "0"} { - set $entry_name no - } elseif {$value eq "1"} { - set $entry_name yes - } - } - } - } - .add.frm.ent_host configure -state disable - .add.frm.ent_port configure -state disable + + FormFieldsDataInsert $frm $lst + + $frm.ent_host configure -state disable + $frm.ent_port configure -state disable .add.frm_btn.btn_ok configure -command { RunCommand "" "cluster update \ @@ -1105,9 +1057,9 @@ proc Edit::infobases {tree host values} { Edit::infobase $tree $host $infobase } proc Edit::infobase {tree host values} { - global default active_cluster infobase + global default active_cluster infobase global security_level dbms scheduled_jobs_deny license_distribution date_offset - global sessions_deny + global sessions_deny set infobase $values set frm [Add::infobases $tree $host $values] @@ -1170,28 +1122,7 @@ proc Edit::infobase {tree host values} { grid $frm.check_external_session_manager_required -row 9 -column 3 -sticky nw -padx 5 -pady 5 set lst [RunCommand infobase::$values "infobase info --cluster=$active_cluster --infobase=$values $host"] - puts $lst - foreach i [lindex $lst 0] { - if [regexp -nocase -all -- {(\D+)(\s*?|)(:)(\s*?|)(.*)} $i match param v2 v3 v4 value] { - regsub -all -- "-" [string trim $param] "_" entry_name - if [winfo exists .add.frm.ent_$entry_name] { - .add.frm.ent_$entry_name delete 0 end - .add.frm.ent_$entry_name insert end [string trim $value "\""] - } - if [winfo exists .add.frm.cb_$entry_name] { - set $entry_name [string trim $value "\""] - } - if [winfo exists .add.frm.check_$entry_name] { - if {$value eq "0"} { - set $entry_name no - } elseif {$value eq "1"} { - set $entry_name yes - } else { - set $entry_name $value - } - } - } - } + FormFieldsDataInsert $frm $lst .add.frm_btn.btn_ok configure -command { RunCommand "" "infobase update \ @@ -1250,29 +1181,16 @@ proc Edit::work_server {tree host values} { $frm configure -text "Редактирование рабочего сервера" set lst [RunCommand cluster::$values "server info --cluster=$active_cluster --server=$server $host"] - foreach i [lindex $lst 0] { - if [regexp -nocase -all -- {(\D+)(\s*?|)(:)(\s*?|)(.*)} $i match param v2 v3 v4 value] { - regsub -all -- "-" [string trim $param] "_" entry_name - if [winfo exists .add.frm.ent_$entry_name] { - .add.frm.ent_$entry_name delete 0 end - .add.frm.ent_$entry_name insert end [string trim $value "\""] - } - if [winfo exists .add.frm.cb_$entry_name] { - set $entry_name [string trim $value "\""] - } - if [winfo exists .add.frm.check_$entry_name] { - set $entry_name $value - } - } - } - .add.frm.lbl_agent_port configure -state disable - .add.frm.ent_agent_port configure -state disable - .add.frm.lbl_port_range configure -state disable - .add.frm.ent_port_range configure -state disable - .add.frm.lbl_name configure -state disable - .add.frm.ent_name configure -state disable - .add.frm.lbl_cluster_port configure -state disable - .add.frm.ent_cluster_port configure -state disable + FormFieldsDataInsert $frm $lst + + $frm.lbl_agent_port configure -state disable + $frm.ent_agent_port configure -state disable + $frm.lbl_port_range configure -state disable + $frm.ent_port_range configure -state disable + $frm.lbl_name configure -state disable + $frm.ent_name configure -state disable + $frm.lbl_cluster_port configure -state disable + $frm.ent_cluster_port configure -state disable .add.frm_btn.btn_ok configure -command { RunCommand "" "server update \ @@ -1310,27 +1228,13 @@ proc Edit::rule {tree host values} { } set frm [Add::rule $tree $host $server] - $frm configure -text "Редактирование требования назначения функциональности" - puts "cluster = $active_cluster\nserver=$server\nrule=$rule" + $frm configure -text "Редактирование требования назначения функциональности" set lst [RunCommand "" "rule info --cluster=$active_cluster --server=$server --rule=$rule $host"] - foreach i [lindex $lst 0] { - if [regexp -nocase -all -- {(\D+)(\s*?|)(:)(\s*?|)(.*)} $i match param v2 v3 v4 value] { - regsub -all -- "-" [string trim $param] "_" entry_name - if [winfo exists .add.frm.ent_$entry_name] { - .add.frm.ent_$entry_name delete 0 end - .add.frm.ent_$entry_name insert end [string trim $value "\""] - } - if [winfo exists .add.frm.cb_$entry_name] { - set $entry_name [string trim $value "\""] - } - if [winfo exists .add.frm.check_$entry_name] { - set $entry_name $value - } - } - } + FormFieldsDataInsert $frm $lst + .add.frm_btn.btn_ok configure -command { RunCommand "" "rule update \ --cluster=$active_cluster \ @@ -1347,3 +1251,252 @@ proc Edit::rule {tree host values} { } } +proc Del {} { + global active_cluster host + set tree .frm_tree.tree + set id [.frm_tree.tree selection] + set values [.frm_tree.tree item $id -values] + set key [lindex [split $id "::"] 0] + + Del::$key $tree $host $values +} + +namespace eval Del {} {} + +proc Del::admin {tree host values} { + global active_cluster agent_user agent_pwd + set answer [tk_messageBox -message "Удалить администратора $values?" \ + -icon question -type yesno ] + switch -- $answer { + yes { + set lst [RunCommand infobase::$values "agent admin remove --agent-user=$agent_user --agent-pwd=$agent_pwd --name=$values $host"] + #.frm_tree.tree delete "admin::$values" + .frm_work.tree_work delete [ .frm_work.tree_work children {}] + } + no {return} + } +} +proc Del::admins {tree host values} { + global active_cluster + set work_tree_id [.frm_work.tree_work selection] + set work_tree_values [.frm_work.tree_work item $work_tree_id -values] + #puts ">$work_tree_id >$work_tree_values" + set id [.frm_tree.tree selection] + #set values [.frm_tree.tree item $id -values] + set key [lindex [split $id "::"] 0] + set column_list [.frm_work.tree_work cget -columns] + set i 0 + # проверка соответсвия колонки в таблице и ключа в дереве + foreach l $column_list { + if {$l eq "name" } { + set admin_id [lindex $work_tree_values $i] + set tree .frm_work.tree_work + } + incr i + } + Del::admin $tree $host $admin_id +} + +proc Del::work_server {tree host values} { + global active_cluster + 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"] + .frm_tree.tree delete "work_server::$values" + .frm_work.tree_work delete [ .frm_work.tree_work children {}] + } + no {return} + } +} +proc Del::servers {tree host values} { + global active_cluster + set work_tree_id [.frm_work.tree_work selection] + set work_tree_values [.frm_work.tree_work item $work_tree_id -values] + #puts ">$work_tree_id >$work_tree_values" + set id [.frm_tree.tree selection] + #set values [.frm_tree.tree item $id -values] + set key [lindex [split $id "::"] 0] + set column_list [.frm_work.tree_work cget -columns] + set i 0 + # проверка соответсвия колонки в таблице и ключа в дереве + foreach l $column_list { + if {$l eq "server" } { + set work_server_id [lindex $work_tree_values $i] + set tree .frm_work.tree_work + } + incr i + } + Del::work_server $tree $host $work_server_id +} +proc Del::cluster {tree host values} { + set answer [tk_messageBox -message "Удалить кластер $values?" \ + -icon question -type yesno ] + switch -- $answer { + yes { + set lst [RunCommand infobase::$values "cluster remove --cluster=$values $host"] + $tree delete "cluster::$values" + .frm_work.tree_work delete [ .frm_work.tree_work children {}] + } + no {return} + } +} +proc Del::infobase {tree host values} { + global active_cluster + set answer [tk_messageBox -message "Удалить информационную базу $values?" \ + -icon question -type yesno ] + switch -- $answer { + yes { + set lst [RunCommand infobase::$values "infobase drop --infobase=$values --cluster=$active_cluster $host"] + $tree delete "infobase::$values" + .frm_work.tree_work delete [ .frm_work.tree_work children {}] + } + no {return} + } +} +proc Del::infobases {tree host values} { + global active_cluster + set work_tree_id [.frm_work.tree_work selection] + set work_tree_values [.frm_work.tree_work item $work_tree_id -values] + #puts ">$work_tree_id >$work_tree_values" + set id [.frm_tree.tree selection] + #set values [.frm_tree.tree item $id -values] + set key [lindex [split $id "::"] 0] + set column_list [.frm_work.tree_work cget -columns] + set i 0 + # проверка соответсвия колонки в таблице и ключа в дереве + foreach l $column_list { + if {$l eq "infobase" } { + set values [lindex $work_tree_values $i] + set tree .frm_work.tree_work + } + incr i + } + + #puts "$tree $host $values" + Del::infobase $tree $host $values +} +proc Del::connections {tree host values} { + global active_cluster + set work_tree_id [.frm_work.tree_work selection] + set work_tree_values [.frm_work.tree_work item $work_tree_id -values] + #puts ">$work_tree_id >$work_tree_values" + set id [.frm_tree.tree selection] + #set values [.frm_tree.tree item $id -values] + set key [lindex [split $id "::"] 0] + set column_list [.frm_work.tree_work cget -columns] + set i 0 + # проверка соответсвия колонки в таблице и ключа в дереве + foreach l $column_list { + if {$l eq "connection" } { + set connection_id [lindex $work_tree_values $i] + } + if {$l eq "process" } { + set process_id [lindex $work_tree_values $i] + } + incr i + } + + #puts "$connection_id $process_id" + + set answer [tk_messageBox -message "Удалить соединение $connection_id?" \ + -icon question -type yesno ] + switch -- $answer { + yes { + set lst [RunCommand infobase::$values "connection disconnect --process=$process_id --connection=$connection_id --cluster=$active_cluster $host"] + #$tree delete "infobase::$values" + .frm_work.tree_work delete [ .frm_work.tree_work children {}] + } + no {return} + } +} + +proc Del::sessions {tree host values} { + global active_cluster + set work_tree_id [.frm_work.tree_work selection] + set work_tree_values [.frm_work.tree_work item $work_tree_id -values] + set id [.frm_tree.tree selection] + set values [.frm_tree.tree item $id -values] + set key [lindex [split $id "::"] 0] + set column_list [.frm_work.tree_work cget -columns] + set i 0 + # проверка соответсвия колонки в таблице и ключа в дереве + foreach l $column_list { + if {$l eq "session" } { + set session_id [lindex $work_tree_values $i] + } + incr i + } + + set answer [tk_messageBox -message "Прервать сессию $session_id?" \ + -icon question -type yesno ] + switch -- $answer { + yes { + set lst [RunCommand infobase::$values "session terminate --session=$session_id --cluster=$active_cluster $host"] + #$tree delete "infobase::$values" + .frm_work.tree_work delete [ .frm_work.tree_work children {}] + } + no {return} + } +} + + +proc Del::rule {tree host values} { + global active_cluster server + set work_tree_id [.frm_work.tree_work selection] + set work_tree_values [.frm_work.tree_work item $work_tree_id -values] + set id [.frm_tree.tree selection] + #set values [.frm_tree.tree item $id -values] + set key [lindex [split $id "::"] 0] + set column_list [.frm_work.tree_work cget -columns] + set i 0 + # проверка соответсвия колонки в таблице и ключа в дереве + foreach l $column_list { + if {$l eq "rule" } { + set rule_id [lindex $work_tree_values $i] + } + incr i + } + if {[info exists rule_id] == 0 || $rule_id eq ""} { + return + } + + set answer [tk_messageBox -message "Удалить требование $rule_id?" \ + -icon question -type yesno ] + switch -- $answer { + yes { + set lst [RunCommand infobase::$values "rule remove --server=$server --rule=$rule_id --cluster=$active_cluster $host"] + #$tree delete "infobase::$values" + .frm_work.tree_work delete [ .frm_work.tree_work children {}] + } + no {return} + } +} + +proc Del::server {tree host values} { + global dir + set answer [tk_messageBox -message "Удалить сервер $values?" \ + -icon question -type yesno ] + switch -- $answer { + yes { + #set lst [RunCommand infobase::$values "cluster remove --cluster=$values $host"] + file copy [file join $dir(work) 1c_srv.cfg] [file join $dir(work) 1c_srv.cfg.bak] + set orig_file [open [file join $dir(work) 1c_srv.cfg.bak] "r"] + set file [open [file join $dir(work) 1c_srv.cfg] "w"] + while {[gets $orig_file line] >=0 } { + #puts $line + if { $line ne "" && $line ne "$values"} { + puts $file $line + } + } + close $file + close $orig_file + #return "$host:$port" + $tree delete "server::$values" + .frm_work.tree_work delete [ .frm_work.tree_work children {}] + file delete [file join $dir(work) 1c_srv.cfg.bak] + } + no {return} + } +} diff --git a/lib/images.tcl b/lib/images.tcl index 0a300bc..03fb5be 100644 --- a/lib/images.tcl +++ b/lib/images.tcl @@ -440,3 +440,24 @@ image create photo tcl -data { ciORj+Cohcyb1qprIrLm7r1HLaQSHUXRCq0p53HFUQsplBo5cVfJI49tPpr/2w/g98cu93L0jzuP Eo4BPyhSwbdj0OP/AXVG34ger73MAAAAAElFTkSuQmCC } +image create photo administrator_grey_64 -data { + iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAQAAAAAYLlVAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAA + CxMAAAsTAQCanBgAAAAHdElNRQfiBhEJHjl0KFkrAAADxUlEQVRo3r2YXWhURxSAv6xrCEtcVEqw + UNe4hiA1UNq6tn0wFIUgbVqq1lZLlVpoYaAPSvBJRBBB/IEaipmHlooIqZSWJCAllRp/kDaERUNK + 01hsCKtsFwkhbMMSlnXxxS5ad+6dM5l1HpY7e++c8zFz/ubU4TDUWt7lNZJEyTLBFQb1PI6jTqy8 + jZN0EHnizxyH+UaXnwGA+pxuGqq+6qGLGHO6WEMAtY8vA16XiFLgBsf0VXuZiwTqt3AuEDgCLGYN + e1LF9A3vO6Di/MEL1rRbdb/dhxFrkV0C9dCtGrwCqBhfiGwrwcd+d+B9lgv9a7dfgO1iB9+gYt4A + VJR2MUADa/3tQAtLHYJciz+AVqcwv8IfwAongLg/gEYngMX+AIpOAA/8Acw4AeT9AUw6AeT8AYzh + UvH85Q1AF/hVrL7EhL9IGKdZDBD1GYheJ+lwBO3+AOJORvi8P4CCE0DEH8AdJ4B/fAJkHACu+3PD + Mr1i9SN61GdFdEZoB2UOeC3J9D0+E6WkE/q6VwDQvWzG9vbXz8HaXM0us8lq+1frjFdfrYzv7Kxf + ZzwHi8r43irHf+U9WlXsIE9P6Eej9NcMADhONuwOKWtUCAH0LCrwgwt6SCZxkXAHSN9OtfGiMWl1 + pv+tQcb63/jd+OaizkqFuQC84bN6lnfJOhkwYk/zqs7UEEC1sJODBPU+snTzE+P2nmAFoOJs4W3e + JGEp9T5X+ZmL+v6CAVSEDvbSSczBVkoMcZb+4C5qXWBb4hO67NoMIYfSo+fEAGobxy0q+1mwaF7k + OMS31e2iqj2rJtXHj6Hqi5xiNas4QSm0v/A111TScgfUevoseoI53tHpRys66LOwkll26cHQUKza + ucRzFmf7ob5WCc9/p/K8FbqigQ9SE+nxQADVxi8ssTKul1J/pqcqO3CUZVaZ573UUPqu8QhUPbeM + iaZq7mMvEc6zTbBmknWPO+aTRviRSD206nldELawkuwxe8FWoY8fe+zXfuwwAyREgu49Kr4GhRe3 + hBlAFnAv6BKALvGDaF29GSAqEjRQ5WmBd3hJOZlnuPI87NhBeApAcvsb0ZUArIvcFGVJI8CsQMxo + wCwsEhgBJGd5O2AWrH6/GeC04FaTCZiZxjyneVmPGwF0kR0csOvxMh0wqzamOMIavV/nw9Pxcj5l + N20hJbui9z9hKspOzhtNboxLDDBSvSAxV0TNbGIjr9BqrILLzFEAosSeCmFlsoxxk98Y1jMLqopV + Pc0kSbCSJppYSiONVZDKzDHDNDnuMsUkd7SlRz0E+8H/VYKZPhwAAAAASUVORK5CYII= +} diff --git a/rac_gui.cfg b/rac_gui.cfg index c6742f6..63a1a1f 100644 --- a/rac_gui.cfg +++ b/rac_gui.cfg @@ -104,6 +104,12 @@ set default(load_balancing_mode) { memory } + +set default(auth) { + pwd + os +} # цвета строк в таблице set color(dark_table_bg) "#e2e2e2" set color(light_table_bg) "#ffffff" +