From 8a5a586a73a16d02559260f012e4a43a30468630 Mon Sep 17 00:00:00 2001 From: Sergey Date: Tue, 10 Sep 2019 19:06:48 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=B3=D1=80=D0=B0=D0=BC?= =?UTF-8?q?=D0=BC=D0=B0=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B2=D0=B5=D0=B4=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BD=D0=B0=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B9=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1c_srv_new.cfg | 1 + lib/config.tcl | 60 ++++++++++++++-- lib/function.tcl | 178 +++++++++++++++++++++++++++-------------------- rac_gui.cfg | 5 +- rac_gui.tcl | 22 ++---- 5 files changed, 166 insertions(+), 100 deletions(-) diff --git a/1c_srv_new.cfg b/1c_srv_new.cfg index b34913a..760dd3b 100644 --- a/1c_srv_new.cfg +++ b/1c_srv_new.cfg @@ -45,3 +45,4 @@ localhost:1545 { } + diff --git a/lib/config.tcl b/lib/config.tcl index c90e6a8..ad40d61 100644 --- a/lib/config.tcl +++ b/lib/config.tcl @@ -23,6 +23,33 @@ proc GetInfobasePassword {host cluster infobase} { } } +proc GetClusterAdmin {host cluster} { + global servers_list + if [dict exists $servers_list servers $host clusters $cluster cluster_user] { + return [dict get $servers_list servers $host clusters $cluster cluster_user] + } +} +proc GetClusterPassword {host cluster} { + global servers_list + if [dict exists $servers_list servers $host clusters $cluster cluster_pwd] { + return [dict get $servers_list servers $host clusters $cluster cluster_pwd] + } +} + +proc GetAgentAdmin {host} { + global servers_list + if [dict exists $servers_list servers $host agent_user] { + return [dict get $servers_list servers $host agent_user] + } +} +proc GetAgentPassword {host} { + global servers_list + if [dict exists $servers_list servers $host agent_pwd] { + return [dict get $servers_list servers $host agent_pwd] + } +} + + # Конвертация словаря в удобочитаемый формат @@ -61,6 +88,11 @@ proc dict2json {dictionary} { } +proc SetServersConfigDict {} { + global servers_list + +} + # Сохраянем конфиг proc SaveConfig {} { global dir servers_list @@ -69,10 +101,12 @@ proc SaveConfig {} { set dict [dict get $servers_list servers] #puts "\n\n[split $dict " "]\n\n" set dict [string map {"\{" "\{\n" "\}" "\n\}"} $dict] - regsub -- {(\} )} $dict "\}\n" dict - - #puts $dict - #DictFormatter [dict get $servers_list servers] "-" + regsub -- {(\})} $dict "\}\n" dict + puts "_________" + puts $servers_list + puts "2_________" + puts $dict + #ictFormatter [dict get $servers_list servers] "-" #DictFormatter $dict "-" #regexp -all -indices -line -- {\}(.+?)\{} $dict m #puts " \n $m" @@ -90,13 +124,13 @@ proc SaveConfig {} { if {$open_brace == 0} { append indent "" } else { - append indent " " + append indent " " } incr open_brace } if [regexp -- {\}} $line] { #incr open_brace -1 - set indent [string range $indent 0 end-2] + set indent [string range $indent 0 end-4] incr close_brace } if [regexp -nocase -all -- {(\})(.+?\{)} $line match brace phrase] { @@ -123,6 +157,15 @@ proc SaveConfig {} { append str $indent [string trim $line] "\n" } puts $f $str + close $f + set file [open [file join $dir(work) 1c_srv_new.cfg] "w"] + set f [open [file join $dir(work) 1c_srv_new_.cfg] "r"] + while {[gets $f line] >=0} { + if {$line ne ""} { + puts $file $line + } + } + #file copy -force [file join $dir(work) 1c_srv_new_.cfg] [file join $dir(work) 1c_srv_new.cfg] } proc GetDictFromString {str indent} { @@ -178,3 +221,8 @@ proc CopyNewConfig {} { } } + + + + + diff --git a/lib/function.tcl b/lib/function.tcl index f1ca3b4..f162032 100644 --- a/lib/function.tcl +++ b/lib/function.tcl @@ -32,37 +32,37 @@ proc TreePress {tree} { } proc SetGlobalVarFromTreeItems {tree id} { - global host server active_cluster infobase profile_name dir rac_cmd_for_host rac_cmd + global host server active_cluster infobase profile_name dir rac_cmd_for_host rac_cmd servers_list \ + cluster_user cluster_pwd agent_user agent_pwd set parent [$tree parent $id] set values [$tree item $id -values] set key [lindex [split $id "::"] 0] + puts "$parent $values $key" switch -- $key { server { set host $values - set orig_file [open [file join $dir(work) 1c_srv.cfg] "r"] - while {[gets $orig_file line] >=0 } { - if [string match "$host*" $line] { - set path_to_rac [string trim [lindex [split $line ","] 1]] - if {$path_to_rac eq ""} { - set rac_cmd_for_host($host) "$rac_cmd" - } else { - set rac_cmd_for_host($host) $path_to_rac - set rac_cmd $path_to_rac - } - } - } - close $orig_file + set rac_cmd_for_host($host) [dict get $servers_list servers $host rac_cmd] + } + work_server { + set server $values } - work_server {set server $values} cluster { - set active_cluster $values - #dict set servers_list $host $values + set active_cluster $values + #dict set servers_list servers $host clusters "$values {}" + set cluster_user [GetClusterAdmin $host $active_cluster] + set cluster_pwd [GetClusterPassword $host $active_cluster] } infobase { set infobase $values - #dict set servers_list $host $active_cluster infobases $values + #dict set servers_list servers $host clusters $active_cluster infobases $values + } + profile { + set profile_name $values + } + agent_admins { + set agent_user [GetAgentAdmin $host] + set agent_pwd [GetAgentPassword $host] } - profile {set profile_name $values} } if {$parent eq ""} { @@ -146,7 +146,7 @@ proc RunCommand {par} { } proc ErrorParcing {err opt} { - global cluster_user cluster_pwd agent_user agent_pwd + global cluster_user cluster_pwd agent_user agent_pwd servers_list switch -regexp -- $err { "Cluster administrator is not authenticated" { @@ -189,7 +189,7 @@ proc ErrorParcing {err opt} { } } proc AuthorisationDialog {txt} { - global active_cluster agent_user agent_pwd cluster_user cluster_pwd + global active_cluster agent_user agent_pwd cluster_user cluster_pwd servers_list .frm_work.tree_work delete [ .frm_work.tree_work children {}] set frm [AddToplevel "$txt" administrator_grey_64 .auth_win] @@ -383,7 +383,25 @@ proc SetRacCommand {} { if {$rac_cmd eq ""} { return } else { - return $rac_cmd + #puts $rac_cmd + if {[file tail $rac_cmd] ne "rac" && [file tail $rac_cmd] ne "rac.exe"} { + set rac [file tail $rac_cmd] + set path_to_rac [file rootname $rac_cmd] + append msg [::msgcat::mc "Command must be"] " 'rac' " \ + [::msgcat::mc "or"] " 'rac.exe'\n" \ + [::msgcat::mc "You entered"] " '$rac' - " \ + [::msgcat::mc "it's correct?"] + set answer [tk_messageBox -message [::msgcat::mc $msg] -icon question -type yesno] + switch -- $answer { + yes { + return $rac_cmd + } + no SetRacCommand + } + } else { + return $rac_cmd + } + } } @@ -392,7 +410,7 @@ namespace eval Run {} {} # Получение данных по кластерам proc Run::server {tree host values} { - global rac_cmd_for_host rac_cmd + global rac_cmd_for_host rac_cmd servers_list if {[info exists rac_cmd_for_host($host)] == 1 && $rac_cmd_for_host($host) ne "" } { set rac_cmd $rac_cmd_for_host($host) } @@ -417,10 +435,15 @@ proc Run::server {tree host values} { } foreach x [array names cluster] { set id [lindex $cluster($x) 0] + set cluster_name [lindex $cluster($x) 1] if { [$tree exists "cluster::$id"] == 0 } { - $tree insert "server::$host" end -id "cluster::$id" -text "[lindex $cluster($x) 1]" -values "$id" + $tree insert "server::$host" end -id "cluster::$id" -text "$cluster_name" -values "$id" InsertClusterItems $tree $id } + #dict replace servers_list [dict get servers_list servers $host clusters] + #dict set servers_list servers $host clusters $id name $cluster_name + #puts $cluster_name + #puts $servers_list } if { [$tree exists "agent_admins::$id"] == 0 } { $tree insert "server::$host" end -id "agent_admins::$id" -text [::msgcat::mc "Administrators"] -values "$id" @@ -478,6 +501,7 @@ proc Run::infobases {tree host values} { proc Run::infobase {tree host values} { global active_cluster cluster_user cluster_pwd default servers_list + if {$cluster_user ne "" && $cluster_pwd ne ""} { set auth "--cluster-user=$cluster_user --cluster-pwd=$cluster_pwd" } else { @@ -937,9 +961,11 @@ proc Add::admin {tree host value} { } proc Add::server {} { - global default rac_cmd_for_host + global default rac_cmd_for_host servers_list set frm [AddToplevel [::msgcat::mc "Main server"] server_grey_64] + ttk::label $frm.lbl_server_name -text [::msgcat::mc "Name"] + ttk::entry $frm.ent_server_name ttk::label $frm.lbl_host -text [::msgcat::mc "Address"] ttk::entry $frm.ent_host ttk::label $frm.lbl_port -text [::msgcat::mc "Port"] @@ -948,13 +974,15 @@ proc Add::server {} { ttk::entry $frm.ent_path_to_rac ttk::button $frm.btn_path_to_rac -text "..." -width 3 $frm.ent_port insert end $default(port) - grid $frm.lbl_host -row 0 -column 0 -sticky nsw -padx 5 -pady 5 - grid $frm.ent_host -row 0 -column 1 -columnspan 2 -sticky nsew -padx 5 -pady 5 - grid $frm.lbl_port -row 1 -column 0 -sticky nsw -padx 5 -pady 5 - grid $frm.ent_port -row 1 -column 1 -columnspan 2 -sticky nesw -padx 5 -pady 5 - grid $frm.lbl_path_to_rac -row 2 -column 0 -sticky nsw -padx 5 -pady 5 - grid $frm.ent_path_to_rac -row 2 -column 1 -sticky nsew -padx 5 -pady 5 - grid $frm.btn_path_to_rac -row 2 -column 2 -sticky new -padx 5 -pady 5 + grid $frm.lbl_server_name -row 0 -column 0 -sticky nsw -padx 5 -pady 5 + grid $frm.ent_server_name -row 0 -column 1 -columnspan 2 -sticky nsew -padx 5 -pady 5 + grid $frm.lbl_host -row 1 -column 0 -sticky nsw -padx 5 -pady 5 + grid $frm.ent_host -row 1 -column 1 -columnspan 2 -sticky nsew -padx 5 -pady 5 + grid $frm.lbl_port -row 2 -column 0 -sticky nsw -padx 5 -pady 5 + grid $frm.ent_port -row 2 -column 1 -columnspan 2 -sticky nesw -padx 5 -pady 5 + grid $frm.lbl_path_to_rac -row 3 -column 0 -sticky nsw -padx 5 -pady 5 + grid $frm.ent_path_to_rac -row 3 -column 1 -sticky nsew -padx 5 -pady 5 + grid $frm.btn_path_to_rac -row 3 -column 2 -sticky new -padx 5 -pady 5 grid columnconfigure $frm 0 -weight 1 grid rowconfigure $frm 0 -weight 1 @@ -964,17 +992,25 @@ proc Add::server {} { } .add.frm_btn.btn_ok configure -command { - set host [SaveMainServer [.add.frm.ent_host get] [.add.frm.ent_port get] [.add.frm.ent_path_to_rac get]] + set server_name "[.add.frm.ent_server_name get]" + set host "[.add.frm.ent_host get]:[.add.frm.ent_port get]" set rac_cmd_for_host($host) [.add.frm.ent_path_to_rac get] - .frm_tree.tree insert {} end -id "server::$host" -text "$host" -values "$host" + + dict set servers_list servers $host "name \"$server_name\" rac_cmd $rac_cmd_for_host($host) clusters {}" + + #set host [SaveMainServer [.add.frm.ent_host get] [.add.frm.ent_port get] [.add.frm.ent_path_to_rac get]] + #set rac_cmd_for_host($host) [.add.frm.ent_path_to_rac get] + #puts $servers_list + .frm_tree.tree insert {} end -id "server::$host" -text "$server_name" -values "$host" destroy .add + SaveConfig return $host } return $frm } proc Add::servers {tree host values} { global default dedicate_managers using active_cluster cluster_user cluster_pwd auth \ - + servers_list if {$cluster_user ne "" && $cluster_pwd ne ""} { set auth "--cluster-user=$cluster_user --cluster-pwd=$cluster_pwd" } else { @@ -1231,7 +1267,9 @@ proc Add::cluster {tree host values} { set errors_count_threshold $default(errors_count_threshold) set security_level [lindex $default(security_level) 0] set load_balancing_mode [lindex $default(load_balancing_mode) 0] - + set kill_problem_processes no + set kill_by_memory_with_dump no + set frm [AddToplevel [::msgcat::mc "Cluster"] cluster_grey_64] ttk::label $frm.lbl_host -text [::msgcat::mc "Host"] @@ -1303,7 +1341,7 @@ proc Add::cluster {tree host values} { RunCommand "cluster insert \ --host=[.add.frm.ent_host get] \ --port=[.add.frm.ent_port get] \ - --name=[.add.frm.ent_name get] \ + --name=[regsub -all -- " " [.add.frm.ent_name get] "\\ "] \ --expiration-timeout=$expiration_timeout \ --lifetime-limit=$lifetime_limit \ --max-memory-size=$max_memory_size \ @@ -1798,53 +1836,37 @@ proc Edit::managers {tree host values} { } proc Edit::server {tree host value} { - global dir prev_address rac_cmd rac_cmd_for_host + global dir prev_address rac_cmd rac_cmd_for_host servers_list set frm [Add::server] wm title .add [::msgcat::mc "Edit record"] set lst [split $value ":"] set prev_address $value - set orig_file [open [file join $dir(work) 1c_srv.cfg] "r"] - while {[gets $orig_file line] >=0 } { - if [string match "$prev_address*" $line] { - set path_to_rac [string trim [lindex [split $line ","] 1]] - if {$path_to_rac eq ""} { - set path_to_rac "$rac_cmd" - } - } - } - close $orig_file + .add.frm.ent_server_name delete 0 end .add.frm.ent_host delete 0 end .add.frm.ent_port delete 0 end .add.frm.ent_path_to_rac delete 0 end + + .add.frm.ent_server_name insert end [dict get $servers_list servers $prev_address name] + .add.frm.ent_host insert end [lindex $lst 0] .add.frm.ent_port insert end [lindex $lst 1] - .add.frm.ent_path_to_rac insert end $path_to_rac + .add.frm.ent_path_to_rac insert end [dict get $servers_list servers $prev_address rac_cmd] .add.frm_btn.btn_ok configure -command { set host "[.add.frm.ent_host get]:[.add.frm.ent_port get]" - #set rac_cmd [.add.frm.ent_path_to_rac get] + set server_name [.add.frm.ent_server_name get] set rac_cmd_for_host($host) [.add.frm.ent_path_to_rac get] .frm_tree.tree delete "server::$prev_address" .frm_work.tree_work delete [ .frm_work.tree_work children {}] - .frm_tree.tree insert {} end -id "server::$host" -text "$host" -values "$host" - if [file exists [file join $dir(work) 1c_srv.cfg.bak]] { - file delete [file join $dir(work) 1c_srv.cfg.bak] - } - 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 } { - if [string match "$prev_address*" $line] { - puts $file "$host,$rac_cmd_for_host($host)" - } else { - puts $file $line - } - } - close $file - close $orig_file - #return "$host:$port" - file delete [file join $dir(work) 1c_srv.cfg.bak] + .frm_tree.tree insert {} end -id "server::$host" -text "$server_name" -values "$host" + + set clusters [dict get $servers_list servers $prev_address clusters] + dict unset servers_list servers $prev_address + dict set servers_list servers $host "name \"$server_name\" rac_cmd $rac_cmd_for_host($host) clusters \{$clusters\}" + unset clusters server_name + #puts $servers_list destroy .add + SaveConfig return $host } } @@ -2396,6 +2418,7 @@ proc Del::sessions {tree host values} { } + proc Del::rule {tree host values} { global active_cluster server agent_user agent_pwd cluster_user cluster_pwd auth if {$cluster_user ne "" && $cluster_pwd ne ""} { @@ -2420,14 +2443,20 @@ proc Del::rule {tree host values} { no {return} } } - +# Удаление основного сервера кластера proc Del::server {tree host values} { - global dir + global dir servers_list set answer [tk_messageBox -message "[::msgcat::mc "Delete server"] $values?" \ -icon question -type yesno ] switch -- $answer { yes { - file copy [file join $dir(work) 1c_srv.cfg] [file join $dir(work) 1c_srv.cfg.bak] + dict unset servers_list servers $values + SaveConfig + $tree delete "server::$values" + .frm_work.tree_work delete [ .frm_work.tree_work children {}] + return + # данный код не используется. УДАЛИТЬ! + file copy [file join $dir(work) 1c_srv_new.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 } { @@ -2437,10 +2466,10 @@ proc Del::server {tree host values} { } 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] + #return "$host:$port" + ########## Конец Удаления ############# + } no {return} } @@ -2545,3 +2574,4 @@ proc Del::inet {tree host profile_name} { + diff --git a/rac_gui.cfg b/rac_gui.cfg index e338c38..9e7605c 100644 --- a/rac_gui.cfg +++ b/rac_gui.cfg @@ -122,10 +122,6 @@ set default(temporary_allowed_total_memory) 0 # предел превышения (секунд) допустимого объема памяти процессов set default(temporary_allowed_total_memory_time_limit) 300 - - - - ## Раскоментировать строки и прописать свои значения если ## для Информационных Баз используются эти параметры #set default(infobase_user) "ib_user" @@ -137,3 +133,4 @@ set default(theme) dark + diff --git a/rac_gui.tcl b/rac_gui.tcl index c3a930a..471307f 100755 --- a/rac_gui.tcl +++ b/rac_gui.tcl @@ -84,31 +84,21 @@ CheckVariablesSet # Читаем файл со списком серверов 1С #set serversList [dict create servers] - -if [file exists [file join $dir(work) 1c_srv.cfg]] { - set f [open [file join $dir(work) 1c_srv.cfg] "RDONLY"] - while {[gets $f line] >=0} { - set l [split $line ","] - set host [lindex $l 0] - if {[lindex $l 1] ne ""} { - set rac_cmd_for_host($host) [lindex $l 1] - } - .frm_tree.tree insert {} end -id "server::$host" -text "$host" -values "$host" - } - close $f -} - if [file exists [file join $dir(work) 1c_srv_new.cfg]] { set f_new [open [file join $dir(work) 1c_srv_new.cfg] "RDONLY"] while {[gets $f_new line] >=0} { append str " [string trim $line]" } set str [string map {"\{ " "\{" " \}" "\}"} $str] - close $f dict set servers_list servers $str + close $f_new puts $servers_list + puts [dict get $servers_list servers] + dict for {host host_data} [dict get $servers_list servers] { + .frm_tree.tree insert {} end -id "server::$host" -text [dict get $host_data name] -values "$host" + set rac_cmd_for_host($host) [dict get $host_data rac_cmd] + } } -