Слияние веток
This commit is contained in:
		
							
								
								
									
										40
									
								
								1c_srv_new.cfg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								1c_srv_new.cfg
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | ||||
| localhost:1545 { | ||||
|     name "Локальный сервер" | ||||
|      rac_cmd "/opt/1C/v8.3/x86_64/rac" | ||||
|      agent_user "" | ||||
|      agent_pwd "" | ||||
|     clusters { | ||||
|         3ed9081a-c5b0-11e9-cf8a-1c1b0d94027e { | ||||
|         cluster_name "eeee" | ||||
|          cluster_user "" | ||||
|          cluster_pwd "" | ||||
|     } | ||||
|         4581a966-a6bf-11e9-3c95-1c1b0d94027e { | ||||
|             cluster_name "Локальный кластер" | ||||
|              cluster_user "" | ||||
|              cluster_pwd "" | ||||
|             infobases { | ||||
|                 1e1d1cea-b856-11e9-748a-1c1b0d94027e { | ||||
|                 infobase_name "wewe" | ||||
|                  infobase_user "ibuser" | ||||
|                  infobase_pwd "ibpwd" | ||||
|                 } | ||||
|                  0129b2b2-b8d6-11e9-748a-1c1b0d94027e { | ||||
|                 infobase_name "testdb" | ||||
|                  infobase_user "testdb2-user" | ||||
|                  infobase_pwd "testdb2-pwd" | ||||
|                 } | ||||
|                  cac80302-b855-11e9-748a-1c1b0d94027e { | ||||
|                 infobase_name "testdb" | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| } | ||||
|  192.168.5.145:1545 { | ||||
|     name "1C test" | ||||
|      rac_cmd "/opt/1C/v8.3/x86_64/rac" | ||||
|     clusters { | ||||
|      | ||||
| } | ||||
| } | ||||
| @@ -13,3 +13,6 @@ | ||||
| http://nuk-svk.ru/soft/rac-gui/ | ||||
|  | ||||
| Иконки взяты с сайта https://www.iconsdb.com/royal-blue-icons/ | ||||
|  | ||||
|  | ||||
|  | ||||
|   | ||||
							
								
								
									
										18
									
								
								debian/changelog
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								debian/changelog
									
									
									
									
										vendored
									
									
								
							| @@ -1,9 +1,20 @@ | ||||
| rac-gui (1.1.0-1) stable; urgency=medium | ||||
|  | ||||
| * Added new rac command options | ||||
| * Added HELP dialog | ||||
| * Moved configuration files according to XDG standard | ||||
| * Change 1c-srv.cfg format | ||||
| * Fixed some errors | ||||
| * Added translated method for table headers | ||||
|  | ||||
| -- Sergey Kalinin <svk@nuk-svk.ru>  Wed, 25 Sep 2019 09:00:31 +0300 | ||||
|  | ||||
| rac-gui (1.0.3-1) stable; urgency=medium | ||||
|  | ||||
|   * CI/CD integration | ||||
|   * New server config added | ||||
| * CI/CD integration | ||||
| * New server config added | ||||
|  | ||||
|  -- Sergey Kalinin <svk@nuk-svk.ru>  Thu, 15 Jul 2019 09:20:31 +0300 | ||||
| -- Sergey Kalinin <svk@nuk-svk.ru>  Thu, 15 Jul 2019 09:20:31 +0300 | ||||
|  | ||||
| rac-gui (1.0.2-2) stable; urgency=medium | ||||
|  | ||||
| @@ -17,3 +28,4 @@ rac-gui (1.0.1-1) stable; urgency=medium | ||||
|  | ||||
|  -- Sergey Kalinin <svk@nuk-svk.ru>  Mon, 22 Jul 2019 14:56:31 +0300 | ||||
|  | ||||
|  | ||||
|   | ||||
							
								
								
									
										2
									
								
								debian/control
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								debian/control
									
									
									
									
										vendored
									
									
								
							| @@ -9,7 +9,7 @@ Vcs-Git: https://bitbucket.org/svk28/rac-gui.git | ||||
|  | ||||
| Package: rac-gui | ||||
| Architecture: any | ||||
| Depends: tcl(>=8.6), tk(>=8.6), ${misc:Depends} | ||||
| Depends: tcl(>=8.6), tk(>=8.6), tcllib, ${misc:Depends} | ||||
| Description: This program is a GUI for 1C RAC util. | ||||
|  Rac-GUI is a graphical user interface for 1C rac (remote access controll) programm. | ||||
|  1C RAC is a software for 1C-servers cluster management. | ||||
|   | ||||
							
								
								
									
										1
									
								
								debian/docs
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								debian/docs
									
									
									
									
										vendored
									
									
								
							| @@ -2,3 +2,4 @@ README.md | ||||
| doc/CHANGELOG | ||||
| doc/TODO | ||||
| doc/rac-manual.txt | ||||
| doc/racgui_manual.txt | ||||
| @@ -1435,3 +1435,4 @@ rac rule [command] [options] [arguments] | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|   | ||||
							
								
								
									
										91
									
								
								doc/racgui_manual.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								doc/racgui_manual.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,91 @@ | ||||
| ####################################################### | ||||
| #                RAC GUI | ||||
| #        Distributed under GNU Public License | ||||
| # Author: Sergey Kalinin svk@nuk-svk.ru | ||||
| # Copyright (c) "SVK", 2019, http://nuk-svk.ru | ||||
| ###################################################### | ||||
|  | ||||
| Программа Rac-GUI представляет собой мультиплатформенный графический интерфейс к консольной утилите 1С rac. | ||||
| Основной интерфейс программы состоит из: | ||||
| 1. Панели инструментов | ||||
| 2. Дерева для отображения структуры | ||||
| 3. Табличного поля | ||||
|  | ||||
| Для добавления, редактирования, удаления сущностей (сервера, информационные базы, сеансы) предназначены соответствующие кнопки, расположенные в панели инструментов слева. Кнопки контекстно-зависимые, т.е. в зависимости от того какой раздел активен для работы (сервер, информационные базы, кластер, сеансы и так далее), функции кнопок меняются. | ||||
|  | ||||
| После первого запуска программы следует добавить основной сервер кластера 1С (где запущен ras). Для этого надо нажать кнопку "+" в панели инструментов, или сочетание клавиш Control-Insert. И в открывшейся форме заполнить соответствующие поля. Так как каждый сервер управления и клиент могут работать только на одинаковой платформе 1С, то в RAC-GUI для каждого сервера указывается команда (файл rac) для соответствующей платформы. | ||||
|  | ||||
| = "Горячие" клавиши = | ||||
|  | ||||
| Insert - добавление нового | ||||
| Delete - удаление текущего раздела (сущности) | ||||
| Control-Enter -  редактирование текущего раздела (сущности) | ||||
| Control-Q - выход из программы | ||||
| F1 - вызов дилога помощи | ||||
|  | ||||
| = Формат файла конфигурации = | ||||
| Формат файла настроект серверов похож на JSON, но представляет собой несколько TCL-словарей вложенных друг в друга. | ||||
| Обязательными значениями являются адрес хоста, номер порта и путь к RAC. Остальные настройки опциональны. | ||||
| Опции сервера: | ||||
| name - наименование сервера | ||||
| rac_cmd - полный путь к утилите rac | ||||
| agent_user - имя администратора агента кластера | ||||
| agent_pwd  - пароль администратора агента кластера | ||||
|  | ||||
| Опции кластера: | ||||
| cluster_name - наименование кластера | ||||
| cluster_user - имя администратора кластера | ||||
| cluster_pwd - пароль администратора кластера | ||||
|  | ||||
| Опции инф. базы: | ||||
| infobase_name - наименование ИБ | ||||
| infobase_user - имя пользователя ИБ | ||||
| infobase_pwd - пароль пользователя ИБ | ||||
|  | ||||
| Адреса хостов, номера портов, идентификаторы кластеров и ИБ должны соответствовать реальным. | ||||
|  | ||||
| Пример настроек: | ||||
|  | ||||
| localhost:1545 { | ||||
|     name "Локальный сервер" | ||||
|     rac_cmd "/opt/1C/v8.3/x86_64/rac" | ||||
|     agent_user "" | ||||
|     agent_pwd "" | ||||
|     clusters { | ||||
|         3ed9081a-c5b0-11e9-cf8a-1c1b0d94027e { | ||||
|             cluster_name "eeee" | ||||
|         } | ||||
|         4581a966-a6bf-11e9-3c95-1c1b0d94027e { | ||||
|             cluster_name "Локальный кластер" | ||||
|             cluster_user "" | ||||
|             cluster_pwd "" | ||||
|             infobases { | ||||
|                 1e1d1cea-b856-11e9-748a-1c1b0d94027e { | ||||
|                     infobase_name "wewe" | ||||
|                     infobase_user "ibuser" | ||||
|                     infobase_pwd "ibpwd" | ||||
|                 } | ||||
|                 0129b2b2-b8d6-11e9-748a-1c1b0d94027e { | ||||
|                     infobase_name "testdb" | ||||
|                     infobase_user "testdb2-user" | ||||
|                     infobase_pwd "testdb2-pwd" | ||||
|                 } | ||||
|                 cac80302-b855-11e9-748a-1c1b0d94027e { | ||||
|                     infobase_name "testdb" | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 192.168.125.145:1545 { | ||||
|     name "Test" | ||||
|     rac_cmd /opt/1C/v8.3/x86_64/rac" | ||||
|     clusters { | ||||
|     } | ||||
| } | ||||
| 1c-srv:1545 { | ||||
|     name "Cервер для бухгалтерии" | ||||
|     rac_cmd "/opt/1C/v8.3.13_1644/x86_64/rac" | ||||
|     clusters { | ||||
|     } | ||||
| } | ||||
							
								
								
									
										214
									
								
								lib/config.tcl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										214
									
								
								lib/config.tcl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,214 @@ | ||||
| ############################################# | ||||
| #                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 | ||||
| ############################################# | ||||
| # Config file and dictionary working functions | ||||
| # global dict - $servers_list | ||||
| ############################################## | ||||
|  | ||||
| # Получаем юзера и пароль из конфига | ||||
| proc GetInfobaseUser {host cluster infobase} { | ||||
|     global servers_list | ||||
|     if [dict exists $servers_list servers $host clusters $cluster infobases $infobase infobase_user] { | ||||
|         return [dict get $servers_list servers $host clusters $cluster infobases $infobase infobase_user] | ||||
|     } | ||||
| } | ||||
| proc GetInfobasePassword {host cluster infobase} { | ||||
|     global servers_list | ||||
|     if [dict exists $servers_list servers $host clusters $cluster infobases $infobase infobase_pwd] { | ||||
|         return [dict get $servers_list servers $host clusters $cluster infobases $infobase infobase_pwd] | ||||
|     } | ||||
| } | ||||
| 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] | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| # Конвертация словаря в удобочитаемый формат | ||||
|  | ||||
| proc DictFormatter {dict {indent}} { | ||||
|     set str "" | ||||
|     set i 0 | ||||
|     foreach {k v} $dict { | ||||
|         #if {$v eq ""} {set v "NULL"} | ||||
|         #puts "\nkey - $k value - [string trim $v]" | ||||
|          | ||||
|         if [regexp {\{} $v] { | ||||
|             append indent "-" | ||||
|             DictFormatter $v $indent | ||||
|         } elseif [regexp {\}} $v] { | ||||
|             set indent [string trimright $indent "-"] | ||||
|             DictFormatter $v $indent | ||||
|         } else { | ||||
|             set str "$k $v" | ||||
|         } | ||||
|     } | ||||
|     puts "$indent$str" | ||||
| } | ||||
| proc dict2json {dictionary} { | ||||
|     dict for {key value} $dictionary { | ||||
|         puts "$key $value" | ||||
|         if {[string match {\{*\}} $value]} { | ||||
|             lappend Result "\"$key\":$value" | ||||
|         } elseif {![catch {dict size $value}]} { | ||||
|             lappend Result "\"$key\":\"[dict2json $value]\"" | ||||
|         } else { | ||||
|             lappend Result "\"$key\":\"$value\"" | ||||
|         } | ||||
|         puts $Result | ||||
|     } | ||||
|     return "\{[join $Result ",\n"]\}" | ||||
| } | ||||
|  | ||||
|  | ||||
| proc SetServersConfigDict {} { | ||||
|     global servers_list | ||||
|      | ||||
| } | ||||
|  | ||||
| # Сохраянем конфиг | ||||
| proc SaveConfig {} { | ||||
|     global dir servers_list | ||||
|     #puts ">>>>>>>>>>> $servers_list <<<<<<<<<<<<" | ||||
|     set file [open [file join $dir(work) 1c_srv_new.cfg] "w"] | ||||
|     set f [open [file join $dir(work) 1c_srv_new_.cfg] "w"] | ||||
|     if {![dict exists $servers_list servers]} { | ||||
|         return | ||||
|     } | ||||
|     set dict [dict get $servers_list servers] | ||||
|     set dict [string map {"\{" "\{\n" "\}" "\n\}"} $dict] | ||||
|     regsub -- {(\})} $dict "\}\n" dict | ||||
|     puts $file $dict | ||||
|     close $file | ||||
|     set file [open [file join $dir(work) 1c_srv_new.cfg] "r"] | ||||
|      | ||||
|     set str "" | ||||
|     seek $file 0 | ||||
|     set close_brace 0 | ||||
|     set open_brace 0 | ||||
|     set indent "" | ||||
|     while {[gets $file line] >=0} { | ||||
|         if [regexp -- {\{} $line] { | ||||
|             if {$open_brace == 0} { | ||||
|                 append indent "" | ||||
|             } else { | ||||
|                 append indent "    " | ||||
|             } | ||||
|             incr open_brace | ||||
|         } | ||||
|         if [regexp -- {\}} $line] { | ||||
|             #incr open_brace -1 | ||||
|             set indent [string range $indent 0 end-4] | ||||
|             incr close_brace | ||||
|         } | ||||
|         if [regexp -nocase -all -- {(\})(.+?\{)} $line match brace phrase] { | ||||
|             set line "$brace\n$indent$phrase" | ||||
|         }  | ||||
|         if {$open_brace > $close_brace} { | ||||
|             #set line "$indent$line" | ||||
|         } | ||||
|         if [regexp -nocase -indices -all  -- {((.*?)\s(".*?"))} $line match v1 v2 v3] { | ||||
|             set index [lindex [split $v3 " "] 1] | ||||
|             #puts $index | ||||
|             set last_pair [string trim [string range $line $index+1 end]] | ||||
|             set line [GetDictFromString $line $indent] | ||||
|             if {$last_pair ne ""} { | ||||
|                 append line "$indent[string trim $last_pair]" | ||||
|             } | ||||
|         } | ||||
|         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 | ||||
|         } | ||||
|     } | ||||
|     #puts $file $servers_list | ||||
|     #file delete -force [file join $dir(work) 1c_srv_new_.cfg]     | ||||
|     #file copy -force [file join $dir(work) 1c_srv_new_.cfg] [file join $dir(work) 1c_srv_new.cfg] | ||||
| } | ||||
|  | ||||
| proc GetDictFromString {str indent} { | ||||
|     puts $str | ||||
|     if [regexp -nocase -indices  -- {((.*?)\s(".*?"))} $str match v1 v2 v3] { | ||||
|         set index [lindex [split $v3 " "] 1] | ||||
|         set first_pair [string range $str 0 $index] | ||||
|         append res $indent $first_pair "\n" | ||||
|         append res [GetDictFromString [string range $str $index+1 end] $indent] "\n" | ||||
|         #append res [string range $str $index+1 end] "\n" | ||||
|         return $res     | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| # Проверка установки переменных в конфиге | ||||
| proc CheckVariablesSet {} { | ||||
|     global default dir | ||||
|     set lst_vars { | ||||
|         rac_dir | ||||
|         critical_total_memory | ||||
|         temporary_allowed_total_memory | ||||
|         temporary_allowed_total_memory_time_limit | ||||
|     } | ||||
|     set result [::msgcat::mc "The default variables is undefinied:"] | ||||
|     set var "" | ||||
|     foreach item $lst_vars { | ||||
|         if {![info exists default($item)]} { | ||||
|             append var "\ndefault($item)" | ||||
|         } | ||||
|     } | ||||
|     puts $var | ||||
|     append result $var "\n" [::msgcat::mc "New config file will be copying from RAC GUI distributive."] | ||||
|     if {$var ne ""} { | ||||
|         set answer [tk_messageBox -message $result \ | ||||
|         -icon warning -type yesno ] | ||||
|         switch -- $answer { | ||||
|             no return | ||||
|             yes { | ||||
|                 CopyNewConfig | ||||
|                 source [file join $dir(work) rac_gui.cfg] | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| proc CopyNewConfig {} { | ||||
|     global dir | ||||
|     if {[file exists [file join $dir(work) rac_gui.cfg]] ==1} { | ||||
|         file rename -force [file join $dir(work) rac_gui.cfg] [file join $dir(work) rac_gui.cfg.old] | ||||
|         file copy [file join $dir(root) rac_gui.cfg] [file join $dir(work) rac_gui.cfg] | ||||
|     }  | ||||
|      | ||||
| } | ||||
|  | ||||
							
								
								
									
										410
									
								
								lib/function.tcl
									
									
									
									
									
								
							
							
						
						
									
										410
									
								
								lib/function.tcl
									
									
									
									
									
								
							| @@ -7,6 +7,8 @@ | ||||
| ########################################### | ||||
|  | ||||
| proc Quit {} { | ||||
|     # Сохраняем конфиг | ||||
|     SaveConfig | ||||
|     exit | ||||
| } | ||||
|  | ||||
| @@ -30,37 +32,45 @@ 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 | ||||
|         } | ||||
|         cluster { | ||||
|             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 | ||||
|             #puts [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] | ||||
|         } | ||||
|         work_server {set server $values} | ||||
|         cluster {set active_cluster $values} | ||||
|         infobase {set infobase $values} | ||||
|         profile {set profile_name $values} | ||||
|     } | ||||
|      | ||||
|     if {$parent eq ""} { | ||||
|         return | ||||
|     } else { | ||||
|         SetGlobalVarFromTreeItems $tree $parent | ||||
|     } | ||||
|      | ||||
| } | ||||
|  | ||||
| proc InsertItemsWorkList {lst} { | ||||
| @@ -80,11 +90,29 @@ proc InsertItemsWorkList {lst} { | ||||
|     .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 | ||||
|         .frm_work.tree_work heading $j -text [::msgcat::mc [HumanReadableTextConvert $j]] | ||||
|     } | ||||
|     incr work_list_row_count | ||||
| } | ||||
|  | ||||
|  | ||||
| # Преобразование выражений (названий параметров) полученных из консоли | ||||
| # для отображания в графических элементах. | ||||
| # Т.е. выражение "session-fault-tolerance-level" | ||||
| # будет преобразовано в "Session fault tolerance level" | ||||
| proc HumanReadableTextConvert {txt} { | ||||
|     set lst [split $txt "-"] | ||||
|     if {[llength $lst] >0} { | ||||
|         foreach item $lst { | ||||
|             append str " " $item | ||||
|         } | ||||
|     } | ||||
|     set str [string trim $str] | ||||
|     set first_letter [string range $str 0 0] | ||||
|     set str "[string toupper $first_letter][string range $str 1 end]" | ||||
|     return $str | ||||
| } | ||||
|  | ||||
| proc RunCommand {par} { | ||||
|     global dir rac_cmd cluster work_list_row_count \ | ||||
|     agent_user agent_pwd cluster_user cluster_pwd server_platform | ||||
| @@ -118,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" { | ||||
| @@ -161,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] | ||||
| @@ -340,11 +368,77 @@ proc GetWorkTreeRow {} { | ||||
|     return $lst | ||||
| } | ||||
|  | ||||
| # Диалог указания пути до RAC | ||||
| proc SetRacCommand {} { | ||||
|     global env tcl_platform default | ||||
|      | ||||
|     if {$tcl_platform(os) eq "Windows NT"} { | ||||
|         set init_dir $env(COMMONPROGRAMFILES) | ||||
|     } elseif {$tcl_platform(os) eq "Linux"} { | ||||
|         set init_dir $default(rac_dir) | ||||
|     } else { | ||||
|         set init_dir $env(HOME) | ||||
|     } | ||||
|     set rac_cmd "[tk_getOpenFile -initialdir $init_dir -parent .add \ | ||||
|     -title [::msgcat::mc "Show where is a RAC command"] -initialfile rac]" | ||||
|     if {$rac_cmd eq ""} { | ||||
|         return | ||||
|     } else { | ||||
|         #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 | ||||
|         } | ||||
|          | ||||
|     } | ||||
| } | ||||
|  | ||||
| proc ShowHelpDialog {} { | ||||
|     global default dir racgui_version racgui_release | ||||
|     set frm [AddToplevel [::msgcat::mc "About"] help_grey_64] | ||||
|     wm title .add [::msgcat::mc "About"] | ||||
|     ttk::label $frm.lbl_version -text "[::msgcat::mc "Version"]: $racgui_version" | ||||
|     ttk::label $frm.lbl_release -text "[::msgcat::mc "Release"]: $racgui_release" | ||||
|      | ||||
|     text $frm.txt -wrap word | ||||
|     ttk::scrollbar $frm.hsb -orient horizontal -command [list $frm.t xview] | ||||
|     ttk::scrollbar $frm.vsb -orient vertical -command [list $frm.t yview] | ||||
|     text $frm.t -xscrollcommand [list $frm.hsb set] -yscrollcommand [list $frm.vsb set] | ||||
|     grid $frm.lbl_version -row 0 -column 0 -sticky nsew -padx 5 -pady 2 | ||||
|     grid $frm.lbl_release -row 1 -column 0 -sticky nsew  -padx 5 -pady 2 | ||||
|     grid $frm.t -row 2 -column 0 -sticky nsew | ||||
|     grid $frm.vsb -row 2 -column 1 -sticky nsew | ||||
|     grid $frm.hsb -row 3 -column 0 -sticky nsew | ||||
|     grid columnconfigure $frm 0 -weight 1 | ||||
|     grid rowconfigure $frm 0 -weight 1 | ||||
|      | ||||
|     set file_help [open [file join $dir(doc) racgui_manual.txt] "RDONLY"] | ||||
|     while {[gets $file_help line] >=0} { | ||||
|         $frm.t insert end "$line\n" | ||||
|     } | ||||
|     close $file_help | ||||
|     destroy .add.frm_btn.btn_ok | ||||
|     return $frm     | ||||
| } | ||||
|  | ||||
| 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) | ||||
|     } | ||||
| @@ -369,10 +463,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" | ||||
| @@ -396,7 +495,7 @@ proc Run::services {tree host values} { | ||||
| } | ||||
|  | ||||
| proc Run::infobases {tree host values} { | ||||
|     global active_cluster cluster_user cluster_pwd | ||||
|     global active_cluster cluster_user cluster_pwd servers_list | ||||
|     .frm_work.tree_work delete  [ .frm_work.tree_work children {}] | ||||
|     if {$cluster_user ne "" && $cluster_pwd ne ""} { | ||||
|         set auth "--cluster-user=$cluster_user --cluster-pwd=$cluster_pwd" | ||||
| @@ -423,21 +522,31 @@ proc Run::infobases {tree host values} { | ||||
|         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" | ||||
|             if {![dict exists $servers_list servers $host clusters $active_cluster infobases $id]} { | ||||
|                 dict set servers_list servers $host clusters $active_cluster \ | ||||
|                 infobases $id "name \"[lindex $base($x) 1]\"" | ||||
|             } | ||||
|         } | ||||
|         InsertBaseItems $tree $id | ||||
|     } | ||||
|     #dict update dictionaryVariable key varName ?key varName ...? body | ||||
|      | ||||
| } | ||||
|  | ||||
| proc Run::infobase {tree host values} { | ||||
|     global active_cluster cluster_user cluster_pwd default | ||||
|     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 { | ||||
|         set auth "" | ||||
|     } | ||||
|     #### Временный костыль #### | ||||
|     if {[info exists default(infobase_user)] == 1 && [info exists default(infobase_pwd)] == 1} { | ||||
|         set ib_auth "--infobase-user=$default(infobase_user) --infobase-pwd=$default(infobase_pwd)" | ||||
|     #### Проверяем наличие юзера и пароля в конфиге и если есть то используем #### | ||||
|     set infobase_user [GetInfobaseUser $host $active_cluster $values]     | ||||
|     set infobase_pwd [GetInfobasePassword $host $active_cluster $values] | ||||
|      | ||||
|     if {$infobase_user ne "" && $infobase_pwd ne ""} { | ||||
|         set ib_auth "--infobase-user=$infobase_user --infobase-pwd=$infobase_pwd" | ||||
|     } else { | ||||
|         set ib_auth "" | ||||
|     } | ||||
| @@ -457,7 +566,6 @@ proc Run::List:Base {tree host values par} { | ||||
|     } else { | ||||
|         set auth "" | ||||
|     } | ||||
|      | ||||
|     .frm_work.tree_work delete  [ .frm_work.tree_work children {}] | ||||
|     set lst [RunCommand "$par list --cluster=$active_cluster $auth --infobase=$values $host"] | ||||
|      | ||||
| @@ -803,7 +911,7 @@ proc AddToplevel {lbl img {win_name .add}} { | ||||
|     grid $frm_btn -row 1 -column 1 -sticky sew -padx 0 -pady 0 | ||||
|     pack  $frm_btn.btn_cancel $frm_btn.btn_ok -side right -padx 5 -pady 5 | ||||
|     #pack  $frm_btn.btn_ok  -side right -padx 2 | ||||
|      | ||||
|     bind .add <Escape> $cmd | ||||
|     return $frm | ||||
| } | ||||
|  | ||||
| @@ -887,36 +995,63 @@ 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"] | ||||
|     ttk::entry $frm.ent_port  | ||||
|     ttk::label $frm.lbl_path_to_rac -text [::msgcat::mc "Path to RAC"] | ||||
|     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 nw -padx 5 -pady 5 | ||||
|     grid $frm.ent_host -row 0 -column 1 -sticky new -padx 5 -pady 5 | ||||
|     grid $frm.lbl_port -row 1 -column 0 -sticky nw -padx 5 -pady 5 | ||||
|     grid $frm.ent_port -row 1 -column 1 -sticky new -padx 5 -pady 5 | ||||
|     grid $frm.lbl_path_to_rac -row 2 -column 0 -sticky nw -padx 5 -pady 5 | ||||
|     grid $frm.ent_path_to_rac -row 2 -column 1 -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 | ||||
|     #set frm_btn [frame .add.frm_btn -border 0] | ||||
|      | ||||
|     $frm.btn_path_to_rac configure -command { | ||||
|         .add.frm.ent_path_to_rac delete 0 end | ||||
|         .add.frm.ent_path_to_rac insert end [SetRacCommand] | ||||
|     } | ||||
|      | ||||
|     .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 rac_cmd_for_host($host) [.add.frm.ent_path_to_rac get] | ||||
|         .frm_tree.tree insert {} end -id "server::$host" -text "$host" -values "$host" | ||||
|         set msg "" | ||||
|         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]" | ||||
|         if {$rac_cmd_for_host($host) eq ""} { | ||||
|             append msg [::msgcat::mc "Command must be"] " 'rac' " \ | ||||
|             [::msgcat::mc "or"] " 'rac.exe'\n" | ||||
|             tk_messageBox -message [::msgcat::mc $msg] -icon question -type ok | ||||
|             return | ||||
|         } | ||||
|         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 | ||||
|         unset msg  | ||||
|         #SaveConfig | ||||
|         return $host | ||||
|     } | ||||
|     return $frm | ||||
| } | ||||
| proc Add::servers {tree host values} { | ||||
|     global default dedicate_managers using active_cluster cluster_user cluster_pwd auth | ||||
|     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 { | ||||
| @@ -935,32 +1070,47 @@ proc Add::servers {tree host values} { | ||||
|     ttk::label $frm.lbl_agent_port -text [::msgcat::mc "Port"] | ||||
|     ttk::entry $frm.ent_agent_port  | ||||
|     $frm.ent_agent_port  insert end $default(port) | ||||
|     ttk::label $frm.lbl_port_range -text [::msgcat::mc "Ports range"] | ||||
|     ttk::label $frm.lbl_port_range -text [::msgcat::mc "Port range"] | ||||
|     ttk::entry $frm.ent_port_range | ||||
|     $frm.ent_port_range  insert end $default(port_range) | ||||
|     ttk::label $frm.lbl_safe_working_processes_memory_limit -text [::msgcat::mc "Maximum memory in working processes"] | ||||
|     ttk::label $frm.lbl_safe_working_processes_memory_limit \ | ||||
|     -text [::msgcat::mc "Safe working processes memory limit"] | ||||
|     ttk::entry $frm.ent_safe_working_processes_memory_limit | ||||
|     $frm.ent_safe_working_processes_memory_limit  insert end $default(safe_working_processes_memory_limit) | ||||
|     ttk::label $frm.lbl_safe_call_memory_limit -text [::msgcat::mc "Safe memory consuption per call"] | ||||
|     ttk::label $frm.lbl_safe_call_memory_limit -text [::msgcat::mc "Safe call memory limit"] | ||||
|     ttk::entry $frm.ent_safe_call_memory_limit | ||||
|     $frm.ent_safe_call_memory_limit  insert end $default(safe_call_memory_limit) | ||||
|     ttk::label $frm.lbl_memory_limit -text [::msgcat::mc "Memory use limit per working process"] | ||||
|     ttk::label $frm.lbl_memory_limit -text [::msgcat::mc "Memory limit"] | ||||
|     ttk::entry $frm.ent_memory_limit | ||||
|     $frm.ent_memory_limit insert end $default(ram_work) | ||||
|     ttk::label $frm.lbl_infobases_limit -text [::msgcat::mc "Maximum number of infobases per working process"] | ||||
|     ttk::label $frm.lbl_infobases_limit -text [::msgcat::mc "Infobases limit"] | ||||
|     ttk::entry $frm.ent_infobases_limit | ||||
|     $frm.ent_infobases_limit  insert end $default(infobases_limit) | ||||
|     ttk::label $frm.lbl_connections_limit -text [::msgcat::mc "Maximum nuber of connections per working process"] | ||||
|     ttk::label $frm.lbl_connections_limit -text [::msgcat::mc "Connections limit"] | ||||
|     ttk::entry $frm.ent_connections_limit | ||||
|     $frm.ent_connections_limit  insert end $default(connections_limit) | ||||
|     ttk::label $frm.lbl_cluster_port -text [::msgcat::mc "Main cluster manager port number"] | ||||
|     ttk::label $frm.lbl_cluster_port -text [::msgcat::mc "Сluster port"] | ||||
|     ttk::entry $frm.ent_cluster_port | ||||
|     $frm.ent_cluster_port insert end $default(port) | ||||
|     ttk::label $frm.lbl_dedicate_managers -text [::msgcat::mc "Service manager allocation"] | ||||
|     ttk::label $frm.lbl_dedicate_managers -text [::msgcat::mc "Dedicate managers"] | ||||
|     ttk::checkbutton $frm.check_dedicate_managers -variable dedicate_managers -onvalue all -offvalue none | ||||
|     ttk::label $frm.lbl_using -text [::msgcat::mc "Working server use variant"] | ||||
|     ttk::checkbutton $frm.check_using -variable using -onvalue main -offvalue normal | ||||
|      | ||||
|     ttk::label $frm.lbl_critical_total_memory -text [::msgcat::mc "Critical total memory"] | ||||
|     ttk::entry $frm.ent_critical_total_memory | ||||
|     $frm.ent_critical_total_memory insert end $default(critical_total_memory) | ||||
|      | ||||
|     ttk::label $frm.lbl_temporary_allowed_total_memory \ | ||||
|     -text [::msgcat::mc "Temporary allowed total memory"] | ||||
|     ttk::entry $frm.ent_temporary_allowed_total_memory | ||||
|     $frm.ent_temporary_allowed_total_memory insert end $default(temporary_allowed_total_memory) | ||||
|      | ||||
|     ttk::label $frm.lbl_temporary_allowed_total_memory_time_limit \ | ||||
|     -text [::msgcat::mc "Temporary allowed total memory time limit"] | ||||
|     ttk::entry $frm.ent_temporary_allowed_total_memory_time_limit | ||||
|     $frm.ent_temporary_allowed_total_memory_time_limit insert end $default(temporary_allowed_total_memory_time_limit) | ||||
|      | ||||
|     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_agent_host -row 1 -column 0 -sticky nw -padx 5 -pady 5 | ||||
| @@ -969,8 +1119,12 @@ proc Add::servers {tree host values} { | ||||
|     grid $frm.ent_agent_port -row 2 -column 1 -sticky new -padx 5 -pady 5 | ||||
|     grid $frm.lbl_port_range -row 3 -column 0 -sticky nw -padx 5 -pady 5 | ||||
|     grid $frm.ent_port_range -row 3 -column 1 -sticky nsew -padx 5 -pady 5 | ||||
|     grid $frm.lbl_safe_working_processes_memory_limit -row 4 -column 0 -sticky nw -padx 5 -pady 5 | ||||
|     grid $frm.ent_safe_working_processes_memory_limit -row 4 -column 1 -sticky nsew -padx 5 -pady 5 | ||||
|     grid $frm.lbl_cluster_port -row 12 -column 0 -sticky nw -padx 5 -pady 5 | ||||
|     grid $frm.ent_cluster_port -row 12 -column 1 -sticky nsew -padx 5 -pady 5 | ||||
|     grid $frm.lbl_safe_working_processes_memory_limit \ | ||||
|     -row 4 -column 0 -sticky nw -padx 5 -pady 5 | ||||
|     grid $frm.ent_safe_working_processes_memory_limit \ | ||||
|     -row 4 -column 1 -sticky nsew -padx 5 -pady 5 | ||||
|     grid $frm.lbl_safe_call_memory_limit -row 5 -column 0 -sticky nw -padx 5 -pady 5 | ||||
|     grid $frm.ent_safe_call_memory_limit -row 5 -column 1 -sticky nsew -padx 5 -pady 5 | ||||
|     grid $frm.lbl_memory_limit -row 6 -column 0 -sticky nw -padx 5 -pady 5 | ||||
| @@ -979,12 +1133,20 @@ proc Add::servers {tree host values} { | ||||
|     grid $frm.ent_infobases_limit -row 7 -column 1 -sticky nsew -padx 5 -pady 5 | ||||
|     grid $frm.lbl_connections_limit -row 8 -column 0 -sticky nw -padx 5 -pady 5 | ||||
|     grid $frm.ent_connections_limit -row 8 -column 1 -sticky nsew -padx 5 -pady 5 | ||||
|     grid $frm.lbl_cluster_port -row 9 -column 0 -sticky nw -padx 5 -pady 5 | ||||
|     grid $frm.ent_cluster_port -row 9 -column 1 -sticky nsew -padx 5 -pady 5 | ||||
|     grid $frm.lbl_dedicate_managers -row 10 -column 0 -sticky nw -padx 5 -pady 5 | ||||
|     grid $frm.check_dedicate_managers -row 10 -column 1 -sticky nw -padx 5 -pady 5 | ||||
|     grid $frm.lbl_using -row 11 -column 0 -sticky nw -padx 5 -pady 5 | ||||
|     grid $frm.check_using -row 11 -column 1 -sticky nw -padx 5 -pady 5 | ||||
|      | ||||
|     grid $frm.lbl_critical_total_memory -row 9 -column 0 -sticky nw -padx 5 -pady 5 | ||||
|     grid $frm.ent_critical_total_memory -row 9 -column 1 -sticky nsew -padx 5 -pady 5 | ||||
|     grid $frm.lbl_temporary_allowed_total_memory -row 10 -column 0 -sticky nw -padx 5 -pady 5 | ||||
|     grid $frm.ent_temporary_allowed_total_memory -row 10 -column 1 -sticky nsew -padx 5 -pady 5 | ||||
|     grid $frm.lbl_temporary_allowed_total_memory_time_limit \ | ||||
|     -row 11 -column 0 -sticky nw -padx 5 -pady 5 | ||||
|     grid $frm.ent_temporary_allowed_total_memory_time_limit \ | ||||
|     -row 11 -column 1 -sticky nsew -padx 5 -pady 5 | ||||
|      | ||||
|     grid $frm.lbl_dedicate_managers -row 13 -column 0 -sticky nw -padx 5 -pady 5 | ||||
|     grid $frm.check_dedicate_managers -row 13 -column 1 -sticky nw -padx 5 -pady 5 | ||||
|     grid $frm.lbl_using -row 14 -column 0 -sticky nw -padx 5 -pady 5 | ||||
|     grid $frm.check_using -row 14 -column 1 -sticky nw -padx 5 -pady 5 | ||||
|      | ||||
|     .add.frm_btn.btn_ok configure -command { | ||||
|         RunCommand "server insert \ | ||||
| @@ -1000,6 +1162,9 @@ proc Add::servers {tree host values} { | ||||
|         --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] \ | ||||
|         --critical-total-memory=[.add.frm.ent_critical_total_memory get] \ | ||||
|         --temporary-allowed-total-memory=[.add.frm.ent_temporary_allowed_total_memory get] \ | ||||
|         --temporary-allowed-total-memory-time-limit=[.add.frm.ent_temporary_allowed_total_memory_time_limit get] \ | ||||
|         --cluster=$active_cluster $auth $host" | ||||
|         Run::servers $tree $host $active_cluster | ||||
|         destroy .add | ||||
| @@ -1127,7 +1292,7 @@ proc Add::infobases {tree host values} { | ||||
| proc Add::cluster {tree host values} { | ||||
|     global default lifetime_limit expiration_timeout session_fault_tolerance_level | ||||
|     global max_memory_size max_memory_time_limit errors_count_threshold security_level | ||||
|     global load_balancing_mode kill_problem_processes \ | ||||
|     global load_balancing_mode kill_problem_processes kill_by_memory_with_dump \ | ||||
|     agent_user agent_pwd cluster_user cluster_pwd auth_agent | ||||
|     if {$agent_user ne "" && $agent_pwd ne ""} { | ||||
|         set auth_agent "--agent-user=$agent_user --agent-pwd=$agent_pwd" | ||||
| @@ -1143,10 +1308,12 @@ 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 "Main server address"] | ||||
|     ttk::label $frm.lbl_host -text [::msgcat::mc "Host"] | ||||
|     ttk::entry  $frm.ent_host | ||||
|     ttk::label $frm.lbl_port -text [::msgcat::mc "Port"] | ||||
|     ttk::entry $frm.ent_port  | ||||
| @@ -1154,27 +1321,34 @@ proc Add::cluster {tree host values} { | ||||
|     ttk::label $frm.lbl_name -text [::msgcat::mc "Name"] | ||||
|      | ||||
|     ttk::entry  $frm.ent_name | ||||
|     ttk::label $frm.lbl_secure_connect -text [::msgcat::mc "Secure level"] | ||||
|     ttk::label $frm.lbl_security_level -text [::msgcat::mc "Security level"] | ||||
|     ttk::combobox $frm.cb_security_level -textvariable security_level -values $default(security_level) | ||||
|     ttk::label $frm.lbl_expiration_timeout -text [::msgcat::mc "Forced termination time"] | ||||
|     ttk::label $frm.lbl_expiration_timeout -text [::msgcat::mc "Expiration timeout"] | ||||
|     ttk::entry  $frm.ent_expiration_timeout -textvariable expiration_timeout | ||||
|     ttk::label $frm.lbl_session_fault_tolerance_level -text [::msgcat::mc "Fault-tolerance level"] | ||||
|     ttk::entry  $frm.ent_session_fault_tolerance_level -textvariable session_fault_tolerance_level | ||||
|     ttk::label $frm.lbl_session_fault_tolerance_level \ | ||||
|     -text [::msgcat::mc "Session fault tolerance level"] | ||||
|     ttk::entry  $frm.ent_session_fault_tolerance_level \ | ||||
|     -textvariable session_fault_tolerance_level | ||||
|     ttk::label $frm.lbl_load_balancing_mode -text [::msgcat::mc "Load balancing mode"] | ||||
|     ttk::combobox $frm.cb_load_balancing_mode -textvariable load_balancing_mode \ | ||||
|     -values $default(load_balancing_mode) | ||||
|     ttk::label $frm.lbl_errors_count_threshold -text [::msgcat::mc "Server errors threshold"] | ||||
|     ttk::label $frm.lbl_errors_count_threshold -text [::msgcat::mc "Errors count threshold"] | ||||
|     ttk::entry  $frm.ent_errors_count_threshold -textvariable errors_count_threshold | ||||
|     ttk::label $frm.lbl_processes -text [::msgcat::mc "Working process"] | ||||
|     ttk::label $frm.lbl_lifetime_limit -text [::msgcat::mc "Restart time"] | ||||
|     ttk::label $frm.lbl_processes -text [::msgcat::mc "Processes"] | ||||
|     ttk::label $frm.lbl_lifetime_limit -text [::msgcat::mc "Lifetime limit"] | ||||
|     ttk::entry  $frm.ent_lifetime_limit -textvariable lifetime_limit | ||||
|     ttk::label $frm.lbl_max_memory_size -text [::msgcat::mc "Maximum virtual address space"] | ||||
|     ttk::label $frm.lbl_max_memory_size -text [::msgcat::mc "Max memory size"] | ||||
|     ttk::entry  $frm.ent_max_memory_size -textvariable max_memory_size | ||||
|     ttk::label $frm.lbl_max_memory_time_limit -text [::msgcat::mc "Maximum period of memori size exeeding"] | ||||
|     ttk::label $frm.lbl_max_memory_time_limit -text [::msgcat::mc "Max memory time limit"] | ||||
|     ttk::entry  $frm.ent_max_memory_time_limit -textvariable max_memory_time_limit | ||||
|     ttk::label $frm.lbl_kill_problem_processes -justify left -anchor nw -text [::msgcat::mc "Terminate corrupted processes"] | ||||
|     ttk::checkbutton $frm.check_kill_problem_processes -variable kill_problem_processes -onvalue yes -offvalue no | ||||
|      | ||||
|     ttk::label $frm.lbl_kill_problem_processes -justify left -anchor nw \ | ||||
|     -text [::msgcat::mc "Kill problem processes"] | ||||
|     ttk::checkbutton $frm.check_kill_problem_processes \ | ||||
|     -variable kill_problem_processes -onvalue yes -offvalue no | ||||
|     ttk::checkbutton $frm.check_kill_by_memory_with_dump \ | ||||
|     -variable kill_by_memory_with_dump -onvalue yes -offvalue no | ||||
|     ttk::label $frm.lbl_kill_by_memory_with_dump -justify left -anchor nw \ | ||||
|     -text [::msgcat::mc "Kill by memory with dump"] | ||||
|      | ||||
|     grid $frm.lbl_host -row 0 -column 0 -sticky nw -padx 5 -pady 5 | ||||
|     grid $frm.ent_host -row 0 -column 1 -sticky nsew -padx 5 -pady 5 | ||||
| @@ -1182,7 +1356,7 @@ proc Add::cluster {tree host values} { | ||||
|     grid $frm.ent_port -row 1 -column 1 -sticky nsew -padx 5 -pady 5 | ||||
|     grid $frm.lbl_name -row 2 -column 0 -sticky nw -padx 5 -pady 5 | ||||
|     grid $frm.ent_name -row 2 -column 1 -sticky nsew -padx 5 -pady 5 | ||||
|     grid $frm.lbl_secure_connect -row 3 -column 0 -sticky nw -padx 5 -pady 5 | ||||
|     grid $frm.lbl_security_level -row 3 -column 0 -sticky nw -padx 5 -pady 5 | ||||
|     grid $frm.cb_security_level -row 3 -column 1 -sticky nsew -padx 5 -pady 5 | ||||
|     grid $frm.lbl_expiration_timeout -row 4 -column 0 -sticky nw -padx 5 -pady 5 | ||||
|     grid $frm.ent_expiration_timeout -row 4 -column 1 -sticky nsew -padx 5 -pady 5 | ||||
| @@ -1201,12 +1375,14 @@ proc Add::cluster {tree host values} { | ||||
|     grid $frm.ent_max_memory_time_limit -row 11 -column 1 -sticky nsew -padx 5 -pady 5 | ||||
|     grid $frm.lbl_kill_problem_processes -row 12 -column 0 -sticky nw -padx 5 -pady 5 | ||||
|     grid $frm.check_kill_problem_processes -row 12 -column 1 -sticky nw -padx 5 -pady 5 | ||||
|     grid $frm.lbl_kill_by_memory_with_dump -row 13 -column 0 -sticky nw -padx 5 -pady 5 | ||||
|     grid $frm.check_kill_by_memory_with_dump -row 13 -column 1 -sticky nw -padx 5 -pady 5 | ||||
|      | ||||
|     .add.frm_btn.btn_ok configure -command { | ||||
|         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 \ | ||||
| @@ -1216,6 +1392,7 @@ proc Add::cluster {tree host values} { | ||||
|         --load-balancing-mode=$load_balancing_mode \ | ||||
|         --errors-count-threshold=$errors_count_threshold \ | ||||
|         --kill-problem-processes=$kill_problem_processes \ | ||||
|         --kill-by-memory-with-dump=$kill_by_memory_with_dump \ | ||||
|         $auth_agent $host" | ||||
|         Run::server $tree $host "" | ||||
|         destroy .add | ||||
| @@ -1700,60 +1877,45 @@ 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 | ||||
|     } | ||||
| } | ||||
|  | ||||
| proc Edit::cluster {tree host values} { | ||||
|     global default lifetime_limit expiration_timeout session_fault_tolerance_level | ||||
|     global max_memory_size max_memory_time_limit errors_count_threshold security_level | ||||
|     global max_memory_size max_memory_time_limit errors_count_threshold security_level \ | ||||
|     kill_by_memmory_with_dump | ||||
|     global load_balancing_mode kill_problem_processes active_cluster \ | ||||
|     agent_user agent_pwd cluster_user cluster_pwd auth | ||||
|     if {$cluster_user ne "" && $cluster_pwd ne ""} { | ||||
| @@ -1787,6 +1949,7 @@ proc Edit::cluster {tree host values} { | ||||
|         --load-balancing-mode=$load_balancing_mode \ | ||||
|         --errors-count-threshold=$errors_count_threshold \ | ||||
|         --kill-problem-processes=$kill_problem_processes \ | ||||
|         --kill-by-memory-with-dump=$kill_by_memory_with_dump \ | ||||
|         $auth $host" | ||||
|         $tree delete "cluster::$active_cluster" | ||||
|         Run::server $tree $host "" | ||||
| @@ -1956,6 +2119,9 @@ proc Edit::work_server {tree host values} { | ||||
|         --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] \ | ||||
|         --critical-total-memory=[.add.frm.ent_critical_total_memory get] \ | ||||
|         --temporary-allowed-total-memory=[.add.frm.ent_temporary_allowed_total_memory get] \ | ||||
|         --temporary-allowed-total-memory-time-limit=[.add.frm.ent_temporary_allowed_total_memory_time_limit get] \ | ||||
|         --cluster=$active_cluster $auth $host" | ||||
|         Run::servers $tree $host $active_cluster | ||||
|         destroy .add | ||||
| @@ -2293,6 +2459,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 ""} { | ||||
| @@ -2317,14 +2484,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 } { | ||||
| @@ -2334,10 +2507,9 @@ 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} | ||||
|     } | ||||
| @@ -2424,15 +2596,3 @@ proc Del::app {tree host profile_name} { | ||||
| proc Del::inet {tree host profile_name} { | ||||
|     Del::acl $host inet [GetWorkTreeItems "name"] $profile_name | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|   | ||||
							
								
								
									
										27
									
								
								lib/gui.tcl
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								lib/gui.tcl
									
									
									
									
									
								
							| @@ -22,13 +22,24 @@ wm protocol . WM_DELETE_WINDOW Quit | ||||
| wm overrideredirect . 0 | ||||
| wm positionfrom . user | ||||
|  | ||||
| bind . <Control-q> Quit | ||||
| bind . <Control-Q> Quit | ||||
| bind . <Control-eacute> Quit | ||||
| bind . <Insert> Add | ||||
| bind . <Delete> Del | ||||
| bind . <Control-Return> Edit | ||||
| bind . <F1> ShowHelpDialog | ||||
|  | ||||
| #ttk::style configure TPanedwindow -background blue | ||||
| #ttk::style configure Sash -sashthickness 5 | ||||
| #ttk::style configure TButton  -padding 60  -relief flat -bg black | ||||
| #ttk::style configure Custom.Treeview -foreground red | ||||
| #ttk::style configure Custom.Treeview -rowheight 20 | ||||
|  | ||||
| ttk::style theme use dark | ||||
|  | ||||
| if [info exists default(theme)] { | ||||
|     ttk::style theme use $default(theme) | ||||
| } | ||||
|  | ||||
| # Панель инсрументов | ||||
| set frm_tool [ttk::frame .frm_tool] | ||||
| @@ -40,11 +51,12 @@ pack propagate .panel false | ||||
| ttk::button $frm_tool.btn_add  -command Add  -image add_grey_32 | ||||
| ttk::button $frm_tool.btn_del  -command Del -image del_grey_32 | ||||
| ttk::button $frm_tool.btn_edit  -command Edit -image edit_grey_32 | ||||
| ttk::button $frm_tool.btn_help -command ShowHelpDialog -image question_grey_32 | ||||
| ttk::button $frm_tool.btn_quit -command Quit -image quit_grey_32 | ||||
|  | ||||
| pack $frm_tool.btn_add $frm_tool.btn_del $frm_tool.btn_edit -side top -padx 5 -pady 5 | ||||
| pack $frm_tool.btn_add $frm_tool.btn_del $frm_tool.btn_edit $frm_tool.btn_help -side top -padx 5 -pady 5 | ||||
| #label $frm_tool.lbl_logo -image tcl | ||||
| pack $frm_tool.btn_quit  -side bottom -padx 5 -pady 5 | ||||
| pack $frm_tool.btn_quit -side bottom -padx 5 -pady 5 | ||||
| #pack $frm_tool.lbl_logo -side bottom -padx 5 -pady 5 | ||||
|  | ||||
| # Дерево с полосами прокрутки | ||||
| @@ -76,8 +88,11 @@ set tree_work [ | ||||
|     -yscrollcommand [list $frm_work.vsb set] | ||||
| ] | ||||
| # table rows background colors | ||||
| $tree_work tag configure dark -background $color(dark_table_bg) | ||||
| $tree_work tag configure light -background $color(light_table_bg) | ||||
|  | ||||
| if {[info exists default(theme)] == 1} { | ||||
|     $tree_work tag configure dark -background $color(dark_table_bg) | ||||
|     $tree_work tag configure light -background $color(light_table_bg) | ||||
| } | ||||
| bind $tree_work <Double-ButtonPress-1> Edit | ||||
|  | ||||
| $tree tag configure selected -background white  -foreground black | ||||
| @@ -88,6 +103,7 @@ bind $tree_work <ButtonRelease-1> { | ||||
|     $tree_work item [.frm_work.tree_work selection] -tags selected | ||||
| } | ||||
|  | ||||
|  | ||||
| #$tree_work heading par -text "Параметр" -anchor center | ||||
| #$tree_work heading val -text "Значение" -anchor center | ||||
| #set tree_work [ttk::treeview $frm_work.tree_work \ | ||||
| @@ -107,4 +123,3 @@ pack $frm_tree $frm_work -side left -expand true -fill both | ||||
| .panel add $frm_tree -weight 1  | ||||
| .panel add $frm_work -weight 1 | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -621,3 +621,94 @@ image create photo app_grey_64 -data { | ||||
|     ZhhOnihW5Ql725851hOPesCgxn4/bfEYVJ5mwlTT7EDyT2bwR4yyTf3d6bFcLIPtYoR++ujBwUmV | ||||
|     mhdPl2vMUeYmt/VyyQtF7jBPKF0n5wAAAABJRU5ErkJggg== | ||||
| } | ||||
| image create photo help_grey_64 -data { | ||||
|     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 | ||||
| } | ||||
|  | ||||
| image create photo question_grey_64 -data { | ||||
|     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 | ||||
|     QmCC | ||||
| } | ||||
| image create photo question_grey_32 -data { | ||||
|     iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAA | ||||
|     CxMAAAsTAQCanBgAAAAHdElNRQfjCRAKKwvtOFdVAAADe0lEQVRIx4XVbWiVZRwG8N/z7CST6TA3 | ||||
|     Sc1sGS56Q7KtUiRi1BIjP2QhWCyVoXsUJEKkwiTCbBVoFHmf5CD7YAjRp0SlkBW+fKiOYZhoZiai | ||||
|     lrpy1nIqbk8fznFubkfvT/fLdf3/98t1X//IkC2ZoEGdScpddsGf9mkPR4dCRoOow8yzyCPKBmH3 | ||||
|     ymkLF28YIHne++5Sup20MrSVCJCMkPVi3/CgnQ7rQLVa0z3Yt7JFU+gcFCCptk09uGSj9eHn6/ZW | ||||
|     a4lmFeCAmeHEgABJpW89BHZZGI4kscc1mWaM2Bl7tNkTepMaWU+DX80IZyAuJthUpH+sIRxJKrSm | ||||
|     WxxP51rsvHsstMOapCIcM8s7YLLPkwwKd520eBWsC6/ke6lf6u3ooGXZo/mD9bs1ySjzmI78d/k0 | ||||
|     317fowE1LuV3EZOMtgZstxySSWan0inpoy0xYW+6O5VKM+mzSQ2E1TaDN5IJhSMscyvOaQ69kFYb | ||||
|     G4l4znBayhyORCLRnen44oGX+AMVVhAnGYvA2nCquHwmLfSuSEFvKpVKr0Q9BUDotBrMT0bEnjAO | ||||
|     3dZffbDsMe/ZnG6KsvFFUkYXd/B7erLvVdv8hZFmZjwJvg5/X3vz3h1l+6Kewkx8S1Edl23NnriK | ||||
|     CBeSLy1AY0YdaO8vmg2ps32DxnQyen0SDZCwdgtQl1EDDpdU/5uRtCt6N10XugfMFxgTMyrBhRLf | ||||
|     epa69Kjm8M2gpcKvjDNu3FbYlc7+tLM0IKPLGJQPmX+Uez1Qgj6scN+xgs/UDgmqSr8PZ0ukLjCO | ||||
|     x/KgYUjQxeiLknsvMPJR0ugrdJvQXwk3a0m5E6owN9buNIYXBT0QNjGZmowaMkKTKvxrWxyuyIHl | ||||
|     SfVATMtcORvlFt83KHClVQUXCV0xPnQeVbL9QYvHRa95yhRz4rcG5f/I7ejWSkzosBLMSdZcw8R3 | ||||
|     G1vsTmkZYPHJci+D1nD8qqWttx28nqxNiiYX7U/PFRk/ZXv60Vf6AOwp2FAZ5NP6rZ5xG6aZUb8z | ||||
|     38kPl+r2RfertMXSfFHoyfj6z7SA38wM/wy09bG2FY31Pxtkw3XfK6nRYomR4Bczw7HBhaVSzgt9 | ||||
|     w/12O6RDr9FqTTe1r9ht99I1zVxf2uZpdccNFHTaKrmCd5YqruXma/bwEOQDcnKh6ybVuRhmkkZ1 | ||||
|     xivHZaf8aEc4NBTyf7MOJUH/zPUoAAAAAElFTkSuQmCC | ||||
| } | ||||
|   | ||||
| @@ -27,21 +27,25 @@ | ||||
| ::msgcat::mcset ru "OS user name" "Пользователь ОС" | ||||
| ::msgcat::mcset ru "Authentication method" "Способ аутентификации" | ||||
| ::msgcat::mcset ru "Add record" "Добавить запись" | ||||
| ::msgcat::mcset ru "Main server" "Основной сервер" | ||||
| ::msgcat::mcset ru "Main server address" "Адрес основного сервера" | ||||
| ::msgcat::mcset ru "Host" "Основной сервер" | ||||
| ::msgcat::mcset ru "Host address" "Адрес основного сервера" | ||||
| ::msgcat::mcset ru "Address" "Адрес сервера" | ||||
| ::msgcat::mcset ru "Port" "Порт" | ||||
| ::msgcat::mcset ru "Ports range" "Диапазон портов" | ||||
| ::msgcat::mcset ru "Cluster port" "Порт кластера" | ||||
| ::msgcat::mcset ru "Port range" "Диапазон портов" | ||||
| ::msgcat::mcset ru "Agent host" "Адрес сервера" | ||||
| ::msgcat::mcset ru "Agent port" "Порт сервера" | ||||
| ::msgcat::mcset ru "Protocol" "Протокол" | ||||
| ::msgcat::mcset ru "Working processes" "Рабочие процессы" | ||||
| ::msgcat::mcset ru "Processes" "Рабочие процессы" | ||||
| ::msgcat::mcset ru "Cluster managers" "Менеджеры кластера" | ||||
| ::msgcat::mcset ru "Maximum memory in working processes" "Максимальный объём памяти раб. процессов" | ||||
| ::msgcat::mcset ru "Safe memory consuption per call" "Безопасный расход памяти за вызов" | ||||
| ::msgcat::mcset ru "Memory use limit per working process" "Предел использования памяти рабочим процессом" | ||||
| ::msgcat::mcset ru "Maximum number of infobases per working process" "Количество ИБ на процесс" | ||||
| ::msgcat::mcset ru "Maximum nuber of connections per working process" "Количество соединений на процесс" | ||||
| ::msgcat::mcset ru "Main cluster manager port number" "Порт главного менеджера кластера" | ||||
| ::msgcat::mcset ru "Service manager allocation" "Менеджер под каждый сервис" | ||||
| ::msgcat::mcset ru "Safe working processes memory limit" "Максимальный объём памяти раб. процессов" | ||||
| ::msgcat::mcset ru "Safe call memory limit" "Безопасный расход памяти за вызов" | ||||
| ::msgcat::mcset ru "Memory limit" "Предел использования памяти рабочим процессом" | ||||
| ::msgcat::mcset ru "Infobases limit" "Количество ИБ на процесс" | ||||
| ::msgcat::mcset ru "Connections limit" "Количество соединений на процесс" | ||||
| ::msgcat::mcset ru "Сluster port" "Порт главного менеджера кластера" | ||||
| ::msgcat::mcset ru "Dedicate managers" "Менеджер под каждый сервис" | ||||
| ::msgcat::mcset ru "Working server use variant" "Вариант использования рабочего сервера" | ||||
| ::msgcat::mcset ru "Work servers" "Рабочие серверы" | ||||
| ::msgcat::mcset ru "Work server" "Рабочий сервер" | ||||
| @@ -54,15 +58,16 @@ | ||||
| ::msgcat::mcset ru "Create database" "Создать БД в случае её отсутствия" | ||||
| ::msgcat::mcset ru "Sheduled jobs deny" "Блокировка регламентных заданий" | ||||
| ::msgcat::mcset ru "Date offset" "Смещение дат" | ||||
| ::msgcat::mcset ru "Secure level" "Безопасное соединение" | ||||
| ::msgcat::mcset ru "Forced termination time" "Останавливать выключенные процессы через:" | ||||
| ::msgcat::mcset ru "Fault-tolerance level" "Уровень отказоустойчивости" | ||||
| ::msgcat::mcset ru "Security level" "Безопасное соединение" | ||||
| ::msgcat::mcset ru "Expiration timeout" "Останавливать выключенные процессы через:" | ||||
| ::msgcat::mcset ru "Session fault tolerance level" "Уровень отказоустойчивости" | ||||
| ::msgcat::mcset ru "Load balancing mode" "Режим распределения нагрузки" | ||||
| ::msgcat::mcset ru "Server errors threshold" "Допустимое отклонение количества ошибок сервера, %" | ||||
| ::msgcat::mcset ru "Restart time" "Период перезапуска, сек." | ||||
| ::msgcat::mcset ru "Maximum virtual address space" "Допустимый объём памяти, КБ" | ||||
| ::msgcat::mcset ru "Maximum period of memori size exeeding" "Интервал превышения допустимого объёма памяти, сек." | ||||
| ::msgcat::mcset ru "Terminate corrupted processes" "Принудительно завершать проблемные процессы" | ||||
| ::msgcat::mcset ru "Errors count threshold" "Допустимое отклонение количества ошибок сервера, %" | ||||
| ::msgcat::mcset ru "Lifetime limit" "Период перезапуска, сек." | ||||
| ::msgcat::mcset ru "Max memory size" "Допустимый объём памяти, КБ" | ||||
| ::msgcat::mcset ru "Max memory time limit" "Интервал превышения допустимого объёма памяти, сек." | ||||
| ::msgcat::mcset ru "Kill problem processes" "Принудительно завершать проблемные процессы" | ||||
| ::msgcat::mcset ru "Kill by memory with dump" "Формировать дамп процесса при превышении объема памяти" | ||||
| ::msgcat::mcset ru "Object type" "Объект требования" | ||||
| ::msgcat::mcset ru "Rule type" "Тип требования" | ||||
| ::msgcat::mcset ru "Application with an ajustment" "Значение доп. параметра" | ||||
| @@ -112,3 +117,34 @@ | ||||
| ::msgcat::mcset ru "Session lock mode management" "Режим блокировки сеансов" | ||||
| ::msgcat::mcset ru "External session management required" "Внешнее управление сеансами" | ||||
| ::msgcat::mcset ru "Path to RAC" "Путь до RAC" | ||||
| ::msgcat::mcset ru "Using" "Использование" | ||||
| ::msgcat::mcset ru "Critical total memory" "Макс. объём памяти процессов рабочего сервера" | ||||
| ::msgcat::mcset ru "Temporary allowed total memory" "Предел превышения допустимого объёма памяти процессов (сек.)" | ||||
| ::msgcat::mcset ru "Temporary allowed total memory time limit" "Допустимый объем памяти процессов рабочего сервера" | ||||
| ::msgcat::mcset ru "Server" "Сервер" | ||||
| ::msgcat::mcset ru "Main server" "Основной сервер" | ||||
| ::msgcat::mcset ru "The default variables is undefinied:" "Не установлены значения по умолчанию для следующих перменных:" | ||||
| ::msgcat::mcset ru "New config file will be copying from RAC GUI distributive." "Скопирoвать новый файл настроек из дистрибутива программы?" | ||||
| ::msgcat::mcset ru "All files from old working dir will be moved into new location:" "Все файлы из текущего рабочего каталога перенсены в:" | ||||
| ::msgcat::mcset ru "Command must be" "Команда должна быть" | ||||
| ::msgcat::mcset ru "or" "или" | ||||
| ::msgcat::mcset ru "You entered" "Вы ввели" | ||||
| ::msgcat::mcset ru "it's correct?" "это правильно?" | ||||
| ::msgcat::mcset ru "Manager" "Менеджер" | ||||
| ::msgcat::mcset ru "Descr" "Описание" | ||||
| ::msgcat::mcset ru "Process" "Процесс" | ||||
| ::msgcat::mcset ru "Is enable" "Включен" | ||||
| ::msgcat::mcset ru "Running" "Запущен" | ||||
| ::msgcat::mcset ru "Started at" "Время запуска" | ||||
| ::msgcat::mcset ru "Use" "Использование" | ||||
| ::msgcat::mcset ru "Started at" "Время запуска" | ||||
| ::msgcat::mcset ru "Memory size" "Размер памяти" | ||||
| ::msgcat::mcset ru "Connection" "Соединение" | ||||
| ::msgcat::mcset ru "Session" "Сессия" | ||||
| ::msgcat::mcset ru "Object" "Объект" | ||||
| ::msgcat::mcset ru "Locked" "Заблокировано" | ||||
| ::msgcat::mcset ru "Connected at" "Подключено в" | ||||
| ::msgcat::mcset ru "Session number" "Номер сессии" | ||||
| ::msgcat::mcset ru "About" "О программе" | ||||
| ::msgcat::mcset ru "Version" "Версия" | ||||
| ::msgcat::mcset ru "Release" "Выпуск" | ||||
|   | ||||
							
								
								
									
										40
									
								
								lib/theme.tcl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								lib/theme.tcl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | ||||
| ###################################################### | ||||
| #        Rac GUI | ||||
| # Graphical theme settings | ||||
| # | ||||
| # Distributed under GNU Public License | ||||
| # Author: Sergey Kalinin svk@nuk-svk.ru | ||||
| # Home page: https://nuk-svk.ru | ||||
| # Git repos: https://bitbucket.org/svk28/rac-gui | ||||
|  | ||||
|  | ||||
| ###################################################### | ||||
|  | ||||
| # set editor(fg) grey | ||||
| # set editor(bg) black | ||||
| # option add *Entry.Foreground $editor(fg) interactive | ||||
| # option add *Entry.Background $editor(bg) interactive | ||||
| # option add *Label.Foreground $editor(fg) interactive | ||||
| # option add *Label.Background $editor(bg) interactive | ||||
| # option add *Checkbox.Foreground $editor(fg) interactive | ||||
| # option add *Checkbox.Background $editor(bg) interactive | ||||
| # option add *Checkbutton.Foreground $editor(fg) interactive | ||||
| # option add *Checkbutton.Background $editor(bg) interactive | ||||
| # option add *Combobox.Foreground $editor(fg) interactive | ||||
| # option add *Combobox.Background $editor(bg) interactive | ||||
| # option add *Listbox.Foreground $editor(fg) interactive | ||||
| # option add *Listbox.Background $editor(bg) interactive | ||||
| # option add *TreeView.Background $editor(bg) interactive | ||||
| #option add *Treeview.Foreground red interactive | ||||
| # #option add *Frame.Background $editor(bg) interactive | ||||
| # option add *ScrollableFrame.Background $editor(bg) interactive | ||||
| # option add *ScrolledWindow.Background $editor(bg) interactive | ||||
|  | ||||
|  | ||||
| if {[info exists default(theme)] == 1  && $default(theme) eq "dark"} { | ||||
|     set color(dark_table_bg) "#6f6f6f" | ||||
|     set color(light_table_bg) "#424242" | ||||
| } else { | ||||
|     set color(dark_table_bg) "#e2e2e2" | ||||
|     set color(light_table_bg) "#ffffff" | ||||
| } | ||||
| @@ -91,11 +91,18 @@ namespace eval ttk::theme::dark { | ||||
|         -background $colors(-lightframe) -itembackground {gray60 gray50} \ | ||||
|         -itemfill #ffffff -itemaccentfill yellow \ | ||||
|         -fieldbackground $colors(-lightframe) | ||||
|          | ||||
|         ttk::style configure Text \ | ||||
|         -background [list active $colors(-lighter)] \ | ||||
|         -foreground [list disabled $colors(-disabledfg)] | ||||
|          | ||||
|         #         ttk::style configure TreeCtrl \ | ||||
|         #         -background gray30 -itembackground {gray60 gray50} \ | ||||
|         #         -itemfill #ffffff -itemaccentfill yellow | ||||
|         option add *Toplevel.Background $colors(-dark) interactive | ||||
|         option add *Text.Foreground $colors(-foreground) interactive | ||||
|         option add *Text.Background $colors(-frame) interactive | ||||
|     } | ||||
|     option add *Toplevel.Background $colors(-dark) interactive | ||||
|     #option add *Treeview.Background red interactive | ||||
|     #     option add *Frame.Background $colors(-frame) interactive | ||||
|     #     option add *Label.Background $colors(-frame) interactive | ||||
| @@ -139,3 +146,5 @@ namespace eval ::tablelist:: { | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|   | ||||
							
								
								
									
										23
									
								
								rac_gui.cfg
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								rac_gui.cfg
									
									
									
									
									
								
							| @@ -10,7 +10,7 @@ | ||||
| # | ||||
| ###################################################### | ||||
|  | ||||
| set rac_cmd "/opt/1C/v8.3/x86_64/rac" | ||||
| set default(rac_dir) "/opt/1C/v8.3/x86_64" | ||||
|  | ||||
| set default(locale) "ru" | ||||
| # Порт RAS | ||||
| @@ -108,24 +108,25 @@ set default(load_balancing_mode) { | ||||
|     memory | ||||
| } | ||||
|  | ||||
|  | ||||
| set default(auth) { | ||||
|     pwd | ||||
|     os | ||||
| } | ||||
|  | ||||
| # максимальный объем памяти процессов рабочего сервера | ||||
| set default(critical_total_memory) 0 | ||||
|  | ||||
| # допустимый объем памяти процессов рабочего сервера <bytes> | ||||
| set default(temporary_allowed_total_memory) 0 | ||||
|  | ||||
| # предел превышения (секунд) допустимого объема памяти процессов <seconds> | ||||
| set default(temporary_allowed_total_memory_time_limit) 300 | ||||
|  | ||||
| ## Раскоментировать строки и прописать свои значения если | ||||
| ## для Информационных Баз используются эти параметры | ||||
| #set default(infobase_user) "ib_user" | ||||
| #set default(infobase_pwd) "ib_password" | ||||
|  | ||||
| # цвета строк в таблице | ||||
| #set color(dark_table_bg) "#e2e2e2" | ||||
| #set color(light_table_bg) "#ffffff" | ||||
| set color(dark_table_bg) "#6f6f6f" | ||||
| set color(light_table_bg) "#424242" | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| # Используемая тема | ||||
| # доступны: dark, clam, classic, default, alt | ||||
| set default(theme) dark | ||||
|   | ||||
| @@ -59,6 +59,13 @@ install -p -m644 lib/msg/*.* $RPM_BUILD_ROOT%_datadir/%name/lib/msg/ | ||||
|  | ||||
|  | ||||
| %changelog | ||||
| * Wed Sep 25 2019 Sergey Kalinin <svk@nuk-svk.ru> 1.1.0 | ||||
| - Added new rac command options | ||||
| - Added HELP dialog | ||||
| - Moved configuration files according to XDG standard | ||||
| - Change 1c-srv.cfg format | ||||
| - Fixed some errors | ||||
| - Added translated method for table headers | ||||
|  | ||||
| * Thu Aug 15 2019 Sergey Kalinin <svk@nuk-svk.ru> 1.0.3 | ||||
| - New server config | ||||
|   | ||||
							
								
								
									
										148
									
								
								rac_gui.tcl
									
									
									
									
									
								
							
							
						
						
									
										148
									
								
								rac_gui.tcl
									
									
									
									
									
								
							| @@ -2,69 +2,83 @@ | ||||
| # Tcl ignores the next line -*- tcl -*- \ | ||||
| exec wish "$0" -- "$@" | ||||
|  | ||||
| package require msgcat | ||||
|  | ||||
|  | ||||
| ###################################################### | ||||
| #        Rac GUI | ||||
| # 1C RAC (tm) grafical user interface | ||||
| # Distributed under GNU Public License | ||||
| # Author: Sergey Kalinin svk@nuk-svk.ru | ||||
| # Home page: https://bitbucket.org/svk28/rac-gui | ||||
| # Home page: https://nuk-svk.ru | ||||
| # Git repos: https://bitbucket.org/svk28/rac-gui | ||||
| # | ||||
| # version: 1.0.3 | ||||
| # version: 1.1.0 | ||||
| # release: 1 | ||||
| # | ||||
| ###################################################### | ||||
|  | ||||
|  | ||||
| # определим текущую версию и релиз | ||||
| set f [open $argv0 "RDONLY"] | ||||
| while {[gets $f line] >=0} { | ||||
|     if [regexp -nocase -all -- {version: ([0-9]+?.[0-9]+?.[0-9]+?)} $line match v1] { | ||||
|         set racgui_version $v1 | ||||
|     } | ||||
|     if [regexp -nocase -all -- {release: ([0-9]+?)} $line match v1] { | ||||
|         set racgui_release $v1 | ||||
|     } | ||||
| } | ||||
| close $f | ||||
|  | ||||
| package require msgcat | ||||
|  | ||||
| # Устанавливаем текущий каталог | ||||
| set dir(root) [pwd] | ||||
|  | ||||
| # Устанавливаем рабочий каталог, если его нет то создаём | ||||
| set dir(work) [file join $env(HOME) .rac_gui] | ||||
| if {[file exists $dir(work)] == 0 } { | ||||
| set dir(doc) [file join $dir(root) doc] | ||||
|  | ||||
| # Устанавливаем рабочий каталог, если его нет то создаём. | ||||
| # Согласно спецификации XDG проверяем наличие переменных и каталогов | ||||
| if [info exists env(XDG_CONFIG_HOME)] { | ||||
|     set dir(work) [file join $env(XDG_CONFIG_HOME) rac_gui] | ||||
| } elseif [file exists [file join $env(HOME) .config]] { | ||||
|     set dir(work) [file join $env(HOME) .config rac_gui] | ||||
| } else { | ||||
|     set dir(work) [file join $env(HOME) .rac_gui] | ||||
| } | ||||
|  | ||||
| if {[file exists $dir(work)] == 0} { | ||||
|     file mkdir $dir(work)     | ||||
| } | ||||
| # Проверяем старые конфиги и при наличии переносим | ||||
| if {[file exists [file join $env(HOME) .rac_gui]] ==1 && $dir(work) ne [file join $env(HOME) .rac_gui]} { | ||||
|     cd [file join $env(HOME) .rac_gui] | ||||
|     foreach f [glob -type f *] { | ||||
|         if {![file exists [file join $dir(work) $f]]} { | ||||
|             puts "File copy - [file copy $f $dir(work)]" | ||||
|             file rename $f [list $f old] | ||||
|         } | ||||
|     } | ||||
|     cd $env(HOME) | ||||
|     #file rename -force [file join $env(HOME) .rac_gui] [file join $env(HOME) .rac_gui.old] | ||||
|     file delete -force [file join $env(HOME) .rac_gui] | ||||
|     tk_messageBox -message "[::msgcat::mc "All files from old working dir will be moved into new location:"]\n$dir(work)" -icon info -type ok  | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| puts "Work dir is $dir(work)" | ||||
|  | ||||
| # каталог с модулями | ||||
| set dir(lib) "[file join $dir(root) lib]" | ||||
|  | ||||
| # загружаем пользовательский конфиг, если он отсутствует, то копируем дефолтный | ||||
| if {[file exists [file join $dir(work) rac_gui.cfg]] ==0} { | ||||
|     file copy [file join [pwd] rac_gui.cfg] [file join $dir(work) rac_gui.cfg] | ||||
|     file copy [file join $dir(root) rac_gui.cfg] [file join $dir(work) rac_gui.cfg] | ||||
| }  | ||||
| source [file join $dir(work) rac_gui.cfg] | ||||
|  | ||||
| ::msgcat::mclocale $default(locale) | ||||
| ::msgcat::mcload [file join $dir(lib) msg] | ||||
|  | ||||
| # Код проверки наличия rac и правильности указания пути в конфиге | ||||
| # если программа не найдена то будет выведен диалог для указанием корректного пути | ||||
| # и этот путь будет записан в пользовательский конфиг | ||||
| if {[file exists $rac_cmd] == 0} { | ||||
|     set rac_cmd "[tk_getOpenFile -initialdir $env(HOME) -parent . \ | ||||
|     -title [::msgcat::mc "Show where is a RAC command"] -initialfile rac]" | ||||
|     if {$rac_cmd eq ""} {exit} | ||||
|     file copy [file join $dir(work) rac_gui.cfg] [file join $dir(work) rac_gui.cfg.bak]  | ||||
|     set orig_file [open [file join $dir(work) rac_gui.cfg.bak] "r"] | ||||
|     set file [open [file join $dir(work) rac_gui.cfg] "w"] | ||||
|     while {[gets $orig_file line] >=0 } { | ||||
|         if {[string match "set rac_cmd*" $line]} { | ||||
|             puts $file "set rac_cmd \"$rac_cmd\"" | ||||
|         } else { | ||||
|             puts $file $line | ||||
|         } | ||||
|     } | ||||
|     #puts $rac_cmd | ||||
|     close $file | ||||
|     close $orig_file | ||||
|     #return "$host:$port" | ||||
|     file delete [file join $dir(work) rac_gui.cfg.bak] | ||||
|     if {$tcl_platform(platform) == "windows"} { | ||||
|         tk_messageBox -message "[::msgcat::mc "Reexecute the programm"]!" \ | ||||
|         -icon info -type ok | ||||
|         exit | ||||
|     } | ||||
| } else { | ||||
|     puts "Found $rac_cmd" | ||||
| } | ||||
|  | ||||
| set cluster_user "" | ||||
| set cluster_pwd "" | ||||
| @@ -81,36 +95,32 @@ foreach modFile [lsort [glob -nocomplain [file join $dir(lib) *.tcl]]] { | ||||
| source [file join $dir(lib) gui.tcl] | ||||
| source [file join $dir(work) rac_gui.cfg] | ||||
|  | ||||
| CheckVariablesSet | ||||
|  | ||||
| # Читаем файл со списком серверов 1С | ||||
| 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] | ||||
| #set serversList [dict create servers] | ||||
| if [file exists [file join $dir(work) 1c_srv_new.cfg]] { | ||||
|     set f_new [open [file join $dir(work) 1c_srv_new.cfg] "RDONLY"] | ||||
|     set str "" | ||||
|     while {[gets $f_new line] >=0} { | ||||
|         append str " [string trim $line]" | ||||
|     } | ||||
|     if {$str ne ""} { | ||||
|         set str [string map {"\{ " "\{" " \}" "\}"} $str] | ||||
|         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" | ||||
|             puts "$host > $host_data" | ||||
|             puts [dict get $host_data name] | ||||
|             set rac_cmd_for_host($host) [dict get $host_data rac_cmd] | ||||
|         } | ||||
|         .frm_tree.tree insert {} end -id "server::$host" -text "$host" -values "$host" | ||||
|     }     | ||||
|     } else { | ||||
|         set servers_list "" | ||||
|     } | ||||
| } else { | ||||
|     set servers_list "" | ||||
| } | ||||
|  | ||||
| # set editor(fg) grey | ||||
| # set editor(bg) black | ||||
| # option add *Entry.Foreground $editor(fg) interactive | ||||
| # option add *Entry.Background $editor(bg) interactive | ||||
| # option add *Label.Foreground $editor(fg) interactive | ||||
| # option add *Label.Background $editor(bg) interactive | ||||
| # option add *Checkbox.Foreground $editor(fg) interactive | ||||
| # option add *Checkbox.Background $editor(bg) interactive | ||||
| # option add *Checkbutton.Foreground $editor(fg) interactive | ||||
| # option add *Checkbutton.Background $editor(bg) interactive | ||||
| # option add *Combobox.Foreground $editor(fg) interactive | ||||
| # option add *Combobox.Background $editor(bg) interactive | ||||
| # option add *Listbox.Foreground $editor(fg) interactive | ||||
| # option add *Listbox.Background $editor(bg) interactive | ||||
| # option add *TreeView.Background $editor(bg) interactive | ||||
| #option add *Treeview.Foreground red interactive | ||||
| # #option add *Frame.Background $editor(bg) interactive | ||||
| # option add *ScrollableFrame.Background $editor(bg) interactive | ||||
| # option add *ScrolledWindow.Background $editor(bg) interactive | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Sergey Kalinin
					Sergey Kalinin