××׊ר ×תע××§× × ×× ××Š× ××× ×××Ś×¨× 1C ע××××× ×ץ×××ת ××× ×קץ, ×ת××× ××ץר×× ××× - ××ע×ר ××× ××¨×¤× ×ר××× ×¤××פ×ר××ת × ×× ×× ×××× ×׊××× ×Š×¨×Ş× 1C. ×××××× ××Ş×§× ×ת ×××ץר×× ××× ×˘× ××× ×ת××ת GUI ע××ר ××× ×׊×ר×ת ×Š× ×§×× ×Ą××ת ×-rac. Tcl/tk × ×××¨× ×׊פת ×פ×ת×× ×ת×ר, ××עת×, ××ת×××× ×××תר ××׊××× ××. ××××, ×× × ×¨××Ś× ××׌×× ××× ×××××× ××˘× ××× ×× ×Š× ×פתר×× ××××ר ××.
××× ×ע××× ×Ş××קק ××פ׌×ת tcl/tk ×-1C. ××××××× ×Š×××××Ş× ××פ×ק ×ת ×××¨× ×××××××ת ×Š× ×׊××× tcl/tk ××ץ××Ą× ×××× ××׊ת×׊ ××××××ת ×Š× ×Ś× ×Š××׊×, ×××קק ×××¨×Ą× 8.6.7 ×××××ת ttk - ××××× ×˘× ×××× ××× ×רפ××× × ×ץפ××, ׊××× ×× ×× × ×Ś×¨×××× ×ע×קר ttk ::TreeView, ××פ׊ר ××׌×× × ×Ş×× ×× ×× ×׌×רת ××× × ×˘×Ľ ××× ×׌×רת ×××× (ר׊×××). ××× ××, ×××¨×Ą× ×××׊×, ×ע×××× ×˘× ×ר×××× ×˘×××× ×××׊ (פק××ת try, ××׊×׊ת ×פר×××§× ×עת ×פע×ת פק×××ת ××׌×× ××ת).
×פר×××§× ××ר×× ××ץפר ק×׌×× (××ר×ת ׊׊×× ××ר ×× ××× ×˘ ××× ×ע׊×ת ××× ××××):
rac_gui.cfg - ת׌×רת ×ר×רת ××××
rac_gui.tcl - ץקר××¤× ××Š×§× ×¨×׊×
ץפר××ת lib ××××× ×§×׌×× ×Š× ××˘× ×× ×××××××ת ×עת ××פע××:
function.tcl - ק××׼ ×˘× × ××××
gui.tcl - ××׊ק ××¨×¤× ×¨×׊×
images.tcl - ץפר××ת ת××× ×ת base64
×ק××׼ rac_gui.tcl, ××ע׊×, ×ת××× ×ת ××ת×ר×××, ××ת×× ××Š×Ş× ××, ×××˘× ×××××××, ×××ר×ת ×××'. ת××× ×ק××׼ ×˘× ×ער×ת:
rac_gui.tcl
#!/bin/sh
exec wish "$0" -- "$@"
# ĐŁŃŃанавНиваоП ŃокŃŃиК каŃаНОг
set dir(root) [pwd]
# ĐŁŃŃанавНиваоП ŃайОŃиК каŃаНОг, ĐľŃНи огО Đ˝ĐľŃ ŃĐž ŃОСдаŃĐź
set dir(work) [file join $env(HOME) .rac_gui]
if {[file exists $dir(work)] == 0 } {
file mkdir $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]
}
source [file join $dir(work) rac_gui.cfg]
# ĐОд ĐżŃОвоŃки наНиŃĐ¸Ń rac и ĐżŃавиНŃнОŃŃи ŃĐşĐ°ĐˇĐ°Đ˝Đ¸Ń ĐżŃŃи в кОнŃиго
# ĐľŃНи ĐżŃОгŃаППа но наКдона ŃĐž ĐąŃĐ´ĐľŃ Đ˛Ńводон диаНОг Đ´ĐťŃ ŃĐşĐ°ĐˇĐ°Đ˝Đ¸Ń ĐşĐžŃŃокŃнОгО ĐżŃŃи
# и ŃŃĐžŃ ĐżŃŃŃ ĐąŃĐ´ĐľŃ ĐˇĐ°ĐżĐ¸ŃĐ°Đ˝ в пОНŃСОваŃоНŃŃкиК кОнŃиг
if {[file exists $rac_cmd] == 0} {
set rac_cmd [tk_getOpenFile -initialdir $env(HOME) -parent . -title "УкаМиŃĐľ ĐżŃŃŃ Đ´Đž rac" -initialfile rac]
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
}
}
close $file
close $orig_file
#return "$host:$port"
file delete [file join $dir(work) 1c_srv.cfg.bak]
} else {
puts "Found $rac_cmd"
}
set cluster_user ""
set cluster_pwd ""
set agent_user ""
set agent_pwd ""
## LOAD FILE ##
# ĐĐ°ĐłŃŃМаоП ПОдŃНи ĐşŃОПо gui.tcl ŃĐ°Đş как огО надО СагŃŃСиŃŃ ĐżĐžŃНодниП
foreach modFile [lsort [glob -nocomplain [file join $dir(lib) *.tcl]]] {
if {[file tail $modFile] ne "gui.tcl"} {
source $modFile
puts "Loaded module $modFile"
}
}
source [file join $dir(lib) gui.tcl]
source [file join $dir(work) rac_gui.cfg]
# ЧиŃаоП ŃаКН ŃĐž ŃпиŃкОП ŃĐľŃвоŃОв 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} {
.frm_tree.tree insert {} end -id "server::$line" -text "$line" -values "$line"
}
}
×××ר ××ר×ת ×× ×× ×Š× ×ר׊ ××××קת × ××××ת ××× ×׊×ר×ת rac, ×××¤×˘× ×××× ×רפ×. ××׊ק ×ת××× ×ת ××ר×× ×׊×××Š× ×××× ×××:
ץר×× ××××, ע׼ ×ר׊×××
ע׊××Ş× ×ת ×ת××× ×Š× "×ע׼" ×××× ××× ××פ׊ר ×׌××× Windows ×ץ×× ×ר×× ×-1C.
×ק×× ×ר××Š× ×Š××׌ר ×××× ×× ×××× ×ק××׼
lib/gui.tcl
# ŃŃŃанОвка ŃаСПоŃĐ° и ĐżĐžĐťĐžĐśĐľĐ˝Đ¸Ń ĐžŃнОвнОгО Окна
# ПОМнО ŃŃŃанОвиŃŃ Đ˛ поŃоПоннŃŃ topLevelGeometry в кОнŃиг ĐżŃОгŃаППŃ
if {[info exists topLevelGeometry]} {
wm geometry . $topLevelGeometry
} else {
wm geometry . 1024x768
}
# ĐагОНОвОк Окна
wm title . "1C Rac GUI"
wm iconname . "1C Rac Gui"
# икОнка Окна (йоŃĐľŃŃŃ Đ¸Đˇ ŃаКНа lib/imges.tcl)
wm iconphoto . tcl
wm protocol . WM_DELETE_WINDOW Quit
wm overrideredirect . 0
wm positionfrom . user
ttk::style theme use clam
# ĐĐ°Đ˝ĐľĐťŃ Đ¸Đ˝ŃŃŃПонŃОв
set frm_tool [frame .frm_tool]
pack $frm_tool -side left -fill y
ttk::panedwindow .panel -orient horizontal -style TPanedwindow
pack .panel -expand true -fill both
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_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_quit -side bottom -padx 5 -pady 5
# ĐĐľŃовО Ń ĐżĐžĐťĐžŃаПи ĐżŃОкŃŃŃки
set frm_tree [frame .frm_tree]
ttk::scrollbar $frm_tree.hsb1 -orient horizontal -command [list $frm_tree.tree xview]
ttk::scrollbar $frm_tree.vsb1 -orient vertical -command [list $frm_tree.tree yview]
set tree [ttk::treeview $frm_tree.tree -show tree
-xscrollcommand [list $frm_tree.hsb1 set] -yscrollcommand [list $frm_tree.vsb1 set]]
grid $tree -row 0 -column 0 -sticky nsew
grid $frm_tree.vsb1 -row 0 -column 1 -sticky nsew
grid $frm_tree.hsb1 -row 1 -column 0 -sticky nsew
grid columnconfigure $frm_tree 0 -weight 1
grid rowconfigure $frm_tree 0 -weight 1
# наСнаŃонио ОйŃайОŃŃика наМаŃĐ¸Ń ĐşĐ˝ĐžĐżĐşĐžĐš ĐźŃŃи
bind $frm_tree.tree <ButtonRelease> "TreePress $frm_tree.tree"
# ХпиŃОк Đ´ĐťŃ Đ´Đ°Đ˝Đ˝ŃŃ
(ŃайНиŃĐ°)
set frm_work [frame .frm_work]
ttk::scrollbar $frm_work.hsb -orient horizontal -command [list $frm_work.tree_work xview]
ttk::scrollbar $frm_work.vsb -orient vertical -command [list $frm_work.tree_work yview]
set tree_work [
ttk::treeview $frm_work.tree_work
-show headings -columns "par val" -displaycolumns "par val"
-xscrollcommand [list $frm_work.hsb set]
-yscrollcommand [list $frm_work.vsb set]
]
# ĐŁŃŃанОвка ŃвоŃОв Đ´ĐťŃ ŃĐľŃĐľĐ´ĐžĐ˛Đ°Đ˝Đ¸Ń Đ˛ ŃайНиŃĐľ
$tree_work tag configure dark -background $color(dark_table_bg)
$tree_work tag configure light -background $color(light_table_bg)
# РаСПоŃонио ŃНоПонŃОв на ŃĐžŃПо
grid $tree_work -row 0 -column 0 -sticky nsew
grid $frm_work.vsb -row 0 -column 1 -sticky nsew
grid $frm_work.hsb -row 1 -column 0 -sticky nsew
grid columnconfigure $frm_work 0 -weight 1
grid rowconfigure $frm_work 0 -weight 1
pack $frm_tree $frm_work -side left -expand true -fill both
#.panel add $frm_tool -weight 1
.panel add $frm_tree -weight 1
.panel add $frm_work -weight 1
×××××ר××Ş× ×ע×××× ×˘× ×ת××× ×ת ××× ×××ק××:
1. ר×׊×ת, ע××× ×××ץ×ף ×ת ׊רת ××׊××××ת ×ר××Š× (××××ר, ׊רת × ×××× ××׊××××ת (×-Linux, ×× ×××× ×××¤×˘× ×˘× ×פק××× "/opt/1C/v8.3/x86_64/ras cluster âdaemon")).
××× ×ע׊×ת ××ת, ××׼ ×˘× ×פת×ר "+" ×××××× ×Š× ×¤×Ş×, ××× ×ת ×ת××ת ×׊רת ×××׌×××:
×××ר ×××, ×׊רת ׊×× × ××פ×ע ×ע׼ ×××××Ś× ×˘×××, ת××¤×Ş× ×¨×Š××× ×Š× ×׊××××ת ×× ×Ş××Ś× ×Š×××ת ××××ר.
2. ××××Ś× ×˘× ×Š× ××׊××× ×Ş×¤×Ş× ×¨×Š××× ×Š× ×¤×× ×§×Ś××ת ××××× ×ת ע××ר×.
3. ...
××× ××××, ××××ר. ××× ×××ץ×ף ×׊××× ××׊, ××ר ×× ××× ×××× ×ר׊××× ×××׼ ×˘× ××××Ś× "+" ×ץר×× ××××× ×ת××ת ×××-׊×× ××ץף ××׊ ת×׌×:
××פת×ר×× ×ץר×× ××××× ××׌ע×× ×¤×× ×§×Ś××ת ××ת×× ××ק׊ר, ××××ר. ××ת×× ×ר××× ×ע׼ ×× ×ר׊××× ×Š× ××ר, ×××׌ע ×××× ××× ×× ××ר.
×××× × ×Ą×Ş×× ×˘× ×××××× ×Š× ×פת×ר ××××Ą×¤× ("+"):
ק×× ×׌×רת ×פת×ר××:
ttk::button $frm_tool.btn_add -command Add -image add_grey_32
××× ×× × ×¨×××× ×Š××׊ר ××פת×ר × ××׼, ×××× "××ץף" ×××׌ע, ×ק×× ×Š××:
proc Add {} {
global active_cluster host
# ĐĐżŃодоНŃоП идонŃиŃикаŃĐžŃ Đ˛ŃдоНоннОгО ŃНоПонŃĐ°
set id [.frm_tree.tree selection]
# ĐĐżŃодоНŃоП СнаŃонио ŃŃОгО ŃНоПонŃĐ°
set values [.frm_tree.tree item [.frm_tree.tree selection] -values]
set key [lindex [split $id "::"] 0]
# в СавиŃиПОŃŃи ĐžŃ ŃОгО ŃŃĐž вŃдоНиНи ĐąŃĐ´ĐľŃ ĐˇĐ°ĐżŃŃона Đ˝ŃĐśĐ˝Đ°Ń ĐżŃĐžŃодŃŃĐ°
if {$key eq "" || $key eq "server"} {
set host [ Add::server ]
return
}
Add::$key .frm_tree.tree $host $values
}
×× × ××× ××תר×× ×ת ×Š× tickle: ××Ş× ×××× ××ע××ר ×ת ××˘×¨× ×Š× ××Š×Ş× × ××Š× ×¤×¨×׌××ר×:
Add::$key .frm_tree.tree $host $values
××××ר, ××׊×, ×× × ×Ś××ע ×˘× ×׊רת ×ר××Š× ×× ××׼ ×˘× "+", ×× ×××¤×˘× ×××× Add::server, ×× ×˘× ××׊××× - Add::cluster ××× ×××× (×× × ××ת×× ×××× "×פת××ת" × ××׌×× ×××ע×× ×§×Ś×Ş ××××), ××××××× ××פ×ר××× ×׌××ר×× ×××× ××× ×רפ××× ××ת××××× ××ק׊ר.
××¤× ×Š×××× ××ר ׊××Ş× ××, ××פץ×× ××××× ×ץ×× ×× - ×× ×× ×פת×ע, ×× ×× ××׌××× ×˘× ××× ×××× ×××, ××תר ×××ק ××ץ×רת ×ר×׊×ת ×Š× ×××פץ (××××, ×פת×ר××, ת××× ×, ת×××ת), ×Š× ××××× AddTopLevel
proc AddToplevel {lbl img {win_name .add}} {
set cmd "destroy $win_name"
if [winfo exists $win_name] {destroy $win_name}
toplevel $win_name
wm title $win_name $lbl
wm iconphoto $win_name tcl
# ПоŃка Ń Đ¸ĐşĐžĐ˝ĐşĐžĐš
ttk::label $win_name.lbl -image $img
# ŃŃоКП Ń ĐżĐžĐťŃПи ввОда
set frm [ttk::labelframe $win_name.frm -text $lbl -labelanchor nw]
grid columnconfigure $frm 0 -weight 1
grid rowconfigure $frm 0 -weight 1
# ŃŃоКП и кнОпки
set frm_btn [frame $win_name.frm_btn -border 0]
ttk::button $frm_btn.btn_ok -image ok_grey_24 -command { }
ttk::button $frm_btn.btn_cancel -command $cmd -image quit_grey_24
grid $win_name.lbl -row 0 -column 0 -sticky nw -padx 5 -pady 10
grid $frm -row 0 -column 1 -sticky nw -padx 5 -pady 5
grid $frm_btn -row 1 -column 1 -sticky se -padx 5 -pady 5
pack $frm_btn.btn_cancel -side right
pack $frm_btn.btn_ok -side right -padx 10
return $frm
}
פר×××¨× ×Š×××: ××תרת, ×Š× ×Ş××× × ××××ק×× ××ץפר××× (lib/images.tcl) ×פר××ר ××פ׌××× ×× ×Š× ×Š× ×××× (×ר×רת ×××× .add). ×פ×××, ×× × ××§× ×ת ×××××××ת ×ע×× ×××ץפת ×׊רת ×ר××Š× ×××׊×××, ×קר××× ×Ş××× ××ת××:
AddToplevel "ĐОйавНонио ĐžŃнОвнОгО ŃĐľŃвоŃĐ°" server_grey_64
××
AddToplevel "ĐОйавНонио кНаŃŃĐľŃĐ°" cluster_grey_64
××××, ××××Š× ×××××××ת ××××, ×× × ×ר×× ×ת ××××××× ××׌×××× ×××××××× ×Š× ××ץף ע××ר ׊רת ×× ×׊×××.
××ץף::׊רת
proc Add::server {} {
global default
# вŃвОдиП ĐžŃнОвнŃŃ ŃĐžŃĐźŃ
set frm [AddToplevel "ĐОйавНонио ĐžŃнОвнОгО ŃĐľŃвоŃĐ°" server_grey_64]
# дОйавНŃоП ĐľŃки и ĐżĐžĐťŃ Đ˛Đ˛ĐžĐ´Đ° на ŃŃŃ ŃĐžŃĐźŃ
label $frm.lbl_host -text "ĐĐ´ŃĐľŃ ŃĐľŃвоŃĐ°"
entry $frm.ent_host
label $frm.lbl_port -text "ĐĐžŃŃ"
entry $frm.ent_port
$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 nsew -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 nsew -padx 5 -pady 5
grid columnconfigure $frm 0 -weight 1
grid rowconfigure $frm 0 -weight 1
#set frm_btn [frame .add.frm_btn -border 0]
# поŃоОпŃодоНŃоП ОйŃайОŃŃик наМаŃĐ¸Ń ĐşĐ˝ĐžĐżĐşĐ¸
.add.frm_btn.btn_ok configure -command {
set host [SaveMainServer [.add.frm.ent_host get] [.add.frm.ent_port get]]
.frm_tree.tree insert {} end -id "server::$host" -text "$host" -values "$host"
destroy .add
return $host
}
return $frm
}
××ץף::cluster
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
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"
} else {
set auth_agent ""
}
# ŃŃŃанавНиваоП гНОйаНŃĐ˝ŃĐľ поŃоПоннŃĐľ ()
set lifetime_limit $default(lifetime_limit)
set expiration_timeout $default(expiration_timeout)
set session_fault_tolerance_level $default(session_fault_tolerance_level)
set max_memory_size $default(max_memory_size)
set max_memory_time_limit $default(max_memory_time_limit)
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 frm [AddToplevel "ĐОйавНонио кНаŃŃĐľŃĐ°" cluster_grey_64]
label $frm.lbl_host -text "ĐĐ´ŃĐľŃ ĐžŃнОвнОгО ŃĐľŃвоŃĐ°"
entry $frm.ent_host
label $frm.lbl_port -text "ĐĐžŃŃ"
entry $frm.ent_port
$frm.ent_port insert end $default(port)
label $frm.lbl_name -text "ĐаСванио кНаŃŃĐľŃĐ°"
entry $frm.ent_name
label $frm.lbl_secure_connect -text "ĐĐ°ŃиŃŃннОо ŃОодинонио"
ttk::combobox $frm.cb_security_level -textvariable security_level -values $default(security_level)
label $frm.lbl_expiration_timeout -text "ĐŃŃанавНиваŃŃ Đ˛ŃкНŃŃоннŃĐľ ĐżŃĐžŃĐľŃŃŃ ŃĐľŃоС:"
entry $frm.ent_expiration_timeout -textvariable expiration_timeout
label $frm.lbl_session_fault_tolerance_level -text "ĐŁŃĐžĐ˛ĐľĐ˝Ń ĐžŃкаСОŃŃŃОКŃивОŃŃи"
entry $frm.ent_session_fault_tolerance_level -textvariable session_fault_tolerance_level
label $frm.lbl_load_balancing_mode -text "РоМиП ŃĐ°ŃĐżŃĐľĐ´ĐľĐťĐľĐ˝Đ¸Ń Đ˝Đ°ĐłŃŃСки"
ttk::combobox $frm.cb_load_balancing_mode -textvariable load_balancing_mode
-values $default(load_balancing_mode)
label $frm.lbl_errors_count_threshold -text "ĐОпŃŃŃиПОо ĐžŃкНОнонио кОНиŃĐľŃŃва ĐžŃийОк ŃĐľŃвоŃĐ°, %"
entry $frm.ent_errors_count_threshold -textvariable errors_count_threshold
label $frm.lbl_processes -text "РайОŃио ĐżŃĐžŃĐľŃŃŃ:"
label $frm.lbl_lifetime_limit -text "ĐĐľŃиОд поŃоСапŃŃка, Ńок."
entry $frm.ent_lifetime_limit -textvariable lifetime_limit
label $frm.lbl_max_memory_size -text "ĐОпŃŃŃиПŃĐš ОйŃŃĐź паПŃŃи, ĐĐ"
entry $frm.ent_max_memory_size -textvariable max_memory_size
label $frm.lbl_max_memory_time_limit -text "ĐĐ˝ŃĐľŃваН ĐżŃовŃŃĐľĐ˝Đ¸Ń Đ´ĐžĐżŃŃŃиПОгО ОйŃŃПа паПŃŃи, Ńок."
entry $frm.ent_max_memory_time_limit -textvariable max_memory_time_limit
label $frm.lbl_kill_problem_processes -justify left -anchor nw -text "ĐŃинŃдиŃоНŃнО СавоŃŃĐ°ŃŃ ĐżŃОйНоПнŃĐľ ĐżŃĐžŃĐľŃŃŃ"
checkbutton $frm.check_kill_problem_processes -variable kill_problem_processes -onvalue yes -offvalue no
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
grid $frm.lbl_port -row 1 -column 0 -sticky nw -padx 5 -pady 5
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.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
grid $frm.lbl_session_fault_tolerance_level -row 5 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_session_fault_tolerance_level -row 5 -column 1 -sticky nsew -padx 5 -pady 5
grid $frm.lbl_load_balancing_mode -row 6 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.cb_load_balancing_mode -row 6 -column 1 -sticky nsew -padx 5 -pady 5
grid $frm.lbl_errors_count_threshold -row 7 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_errors_count_threshold -row 7 -column 1 -sticky nsew -padx 5 -pady 5
grid $frm.lbl_processes -row 8 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.lbl_lifetime_limit -row 9 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_lifetime_limit -row 9 -column 1 -sticky nsew -padx 5 -pady 5
grid $frm.lbl_max_memory_size -row 10 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_max_memory_size -row 10 -column 1 -sticky nsew -padx 5 -pady 5
grid $frm.lbl_max_memory_time_limit -row 11 -column 0 -sticky nw -padx 5 -pady 5
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
# поŃоОпŃодоНŃоП ОйŃайОŃŃик
.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]
--expiration-timeout=$expiration_timeout
--lifetime-limit=$lifetime_limit
--max-memory-size=$max_memory_size
--max-memory-time-limit=$max_memory_time_limit
--security-level=$security_level
--session-fault-tolerance-level=$session_fault_tolerance_level
--load-balancing-mode=$load_balancing_mode
--errors-count-threshold=$errors_count_threshold
--kill-problem-processes=$kill_problem_processes
$auth_agent $host"
Run::server $tree $host ""
destroy .add
}
return $frm
}
××׊ר ×׊×××× ×ת ×ק×× ×Š× × ×××× ×××, ××××× ×××× ×ע×× ×××Ş× ××××× ×Ş; ×× × ×ת××§× ××××¤× ××××Ś× "××׊×ר". ×-Tk, × ××Ş× ×עק×ף ×ת ×××פ××× ×× ×Š× ×××× ××× ×רפ××× ××××× ×פע×ת ×ת××× ×ת ×××׌ע×ת ××פ׊ר×ת ×××××ר. ××××××, ×פק××× ×ר×׊×× ×ת ××׌×ת ××פת×ר:
ttk::button $frm_btn.btn_ok -image ok_grey_24 -command { }
××× ××פץ×× ×Š×× ×, ×פק××× ×Ş×××× ×פ×× ×§×Ś××× ×××ת ×× ×ר׊ת:
.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]
--expiration-timeout=$expiration_timeout
--lifetime-limit=$lifetime_limit
--max-memory-size=$max_memory_size
--max-memory-time-limit=$max_memory_time_limit
--security-level=$security_level
--session-fault-tolerance-level=$session_fault_tolerance_level
--load-balancing-mode=$load_balancing_mode
--errors-count-threshold=$errors_count_threshold
--kill-problem-processes=$kill_problem_processes
$auth_agent $host"
Run::server $tree $host ""
destroy .add
}
×××××× ×Š××ע××, ××פת×ר "ץת××" ×ת××× ×ת ××××× ×××ץפת ×׊×××.
××× ×××× ×ע׊×ת ץ××× ×ע×××× ×˘× ×××× ××× ×רפ××× ×-Tk - ע××ר ר×××× ×§×× × ×Ş×× ×× ×Š×× ×× (×× ×ץ×, combobox, checkbutton ×××') ×××× ×Ą פר××ר ×××Š×Ş× × ×קץ×:
entry $frm.ent_lifetime_limit -textvariable lifetime_limit
××Š×Ş× × ×× ××××ר ××ר×× ×׊××ת ××××××× ××××× ×ת ××˘×¨× ×Š×××× ×עת. ×Ö¸×Öľ×. ××× ×ק×× ×ת ×××§×Ą× ×Š×××× ××׊××, ××Ş× ×¨×§ ׌ר×× ×קר×× ×ת ××˘×¨× ××ת××× ×××Š×Ş× × (×××××, ××Ş× ×× ×Š××× ××××ר ×עת ×׌×רת ××××× ×).
×׊××× ××Š× ××× ×××××ר ×××§×Ą× ×Š×××× (ע××ר ר××××× ×ץ×× ×˘×¨×) ××× ××׊ת×׊ ×פק××× get:
.add.frm.ent_name get
× ××Ş× ×ר××ת ×ת ×Š×Ş× ×׊×××ת ×××× ×ק×× ×ע××.
××××Ś× ×˘× ×פת×ר ××, ×××§×¨× ××, ×פע××× ×ת ×××× RunCommand ×˘× ×Š×רת ×פק××× ×Š× ××Ś×¨× ×××ץפת ×׊××× ×××× ××× ×Š× rac:
/opt/1C/v8.3/x86_64/rac cluster insert --host=localhost --port=1540 --name=dsdsds --expiration-timeout=0 --lifetime-limit=0 --max-memory-size=0 --max-memory-time-limit=0 --security-level=0 --session-fault-tolerance-level=0 --load-balancing-mode=performance --errors-count-threshold=0 --kill-problem-processes=no localhost:1545
×עת ×××˘× × ×פק××× ×ר×׊×ת, ×׊×××ת ××פע×× ×Š× rac ×˘× ×פר××ר×× ××ר×׊×× ×× ×, ×× ×Ş×ת ×× ×ת ×פ×× ×Š× ×פק×××ת ×ר׊×××ת ×××××ר×, ×× × ×ר׊:
RunCommand
proc RunCommand {root par} {
global dir rac_cmd cluster work_list_row_count agent_user agent_pwd cluster_user cluster_pwd
puts "$rac_cmd $par"
set work_list_row_count 0
# ĐžŃĐşŃŃваоП канаН в нойНОкиŃŃŃŃоП ŃоМиПо
# $rac - кОПанда Ń ĐżĐžĐťĐ˝ŃĐź ĐżŃŃŃĐź
# $par - ŃŃĐžŃПиŃОваннŃĐľ кНŃŃи СапŃŃка и ОпŃии
set pipe [open "|$rac_cmd $par" "r"]
try {
set lst ""
set l ""
# вŃвОд ĐşĐžĐźĐ°Đ˝Đ´Ń Đ´ĐžĐąĐ°Đ˛ĐťŃоП в ŃпиŃОк ŃпиŃкОв
while {[gets $pipe line]>=0} {
#puts $line
if {$line eq ""} {
lappend l $lst
set lst ""
} else {
lappend lst [string trim $line]
}
}
close $pipe
return $l
} on error {result options} {
# ĐĐ°ĐżŃŃĐş ОйŃайОŃŃика ĐžŃийОк
ErrorParcing $result $options
return ""
}
}
×××ר ××× ×Ş × ×Ş×× × ×׊רת ×ר×׊×, ××× ×ת××ץף ×ע׼, ××Š× ××, ××××× ××ץף:׊רת ×ע××, ××ר×× ×ק×× ×××:
.frm_tree.tree insert {} end -id "server::$host" -text "$host" -values "$host"
×עת, ×˘× ××× ××××Ś× ×˘× ×Š× ×׊רת ×ע׼, × ×§×× ×¨×Š××× ×Š× ×׊××××ת ××× ××××× ×˘× ××× ×××Ş× ×Š×¨×Ş, ××××××Ś× ×˘× ×׊×××, × ×§×× ×¨×Š××× ×Š× ×¨×××× ×׊××× (׊רת××, ××××¨× ×××ע ×××'). ×× ××××Š× ×× ××× TreePress (ק××׼ lib/function.tcl):
proc TreePress {tree} {
global host server active_cluster infobase
# ОпŃодоНŃоП вŃдоНоннŃĐš ŃНоПонŃ
set id [$tree selection]
# ŃŃŃанавНиваоП Đ˝ŃМнŃĐľ гНОйаНŃĐ˝ŃĐľ поŃоПоннŃĐľ
SetGlobalVarFromTreeItems $tree $id
# ĐĐżŃодоНŃоП кНŃŃ Đ¸ СнаŃонио, Ń.Đľ. иПоннО Ńип вŃĐąŃаннОгО ŃНоПонŃĐ°
set values [$tree item $id -values]
set key [lindex [split $id "::"] 0]
# и в СавиŃиПОŃŃи ĐžŃ ŃОгО ŃŃĐž вŃĐąŃаНи ĐąŃĐ´ĐľŃ ĐˇĐ°ĐżŃŃона ŃООŃвоŃŃŃвŃŃŃĐ°Ń ĐżŃĐžŃодŃŃĐ°
# в ĐżŃĐžŃŃŃĐ°Đ˝ŃŃво иПŃĐ˝ Run
Run::$key $tree $host $values
}
××ת×× ×××, Run::server ×××¤×˘× ×˘××ר ×׊רת ×ר××Š× (ע××ר ×׊××× - Run::cluster, ע××ר ׊רת ע××× - Run::work_server ×××'). ×Ö¸×Öľ×. ××˘×¨× ×Š× ×××Š×Ş× × $key ××× ××ק ×××Š× ×Š× ×××× × ×ע׼ ׊׌××× ×˘× ××× ××פ׊ר×ת -.
×××× × ×Š×× ×× ×× ×××
×פע×::server
proc Run::server {tree host values} {
# пОНŃŃаоП ŃпиŃОк кНаŃŃĐľŃОв ŃŃойŃоПОгО ŃĐľŃвоŃĐ°
set lst [RunCommand server::$host "cluster list $host"]
if {$lst eq ""} {return}
set l [lindex $lst 0]
#puts $lst
# ŃĐ´Đ°ĐťŃоП НиŃноо иС ŃпиŃка
.frm_work.tree_work delete [ .frm_work.tree_work children {}]
# ŃиŃаоП ŃпиŃОк
foreach cluster_list $lst {
# ĐапОНнŃоП ŃпиŃОк пОНŃŃоннŃПи СнаŃониŃПи
InsertItemsWorkList $cluster_list
# ОйŃайаŃŃваоП вŃвОд (ŃпиŃОк) Đ´ĐťŃ Đ´ĐžĐąĐ°Đ˛ĐťĐľĐ˝Đ¸Ń Đ´Đ°Đ˝Đ˝ŃŃ
в Đ´ĐľŃовО
foreach i $cluster_list {
#puts $i
set cluster_list [split $i ":"]
if {[string trim [lindex $cluster_list 0]] eq "cluster"} {
set cluster_id [string trim [lindex $cluster_list 1]]
lappend cluster($cluster_id) $cluster_id
}
if {[string trim [lindex $cluster_list 0]] eq "name"} {
lappend cluster($cluster_id) [string trim [lindex $cluster_list 1]]
}
}
}
# дОйавНŃоП кНаŃŃĐľŃŃ Đ˛ Đ´ĐľŃовО
foreach x [array names cluster] {
set id [lindex $cluster($x) 0]
if { [$tree exists "cluster::$id"] == 0 } {
$tree insert "server::$host" end -id "cluster::$id" -text "[lindex $cluster($x) 1]" -values "$id"
# дОйавНŃоП ŃНоПонŃŃ Đ˛ кНаŃŃĐľŃ
InsertClusterItems $tree $id
}
}
if { [$tree exists "agent_admins::$id"] == 0 } {
$tree insert "server::$host" end -id "agent_admins::$id" -text "ĐдПиниŃŃŃĐ°ŃĐžŃŃ" -values "$id"
#InsertClusterItems $tree $id
}
}
×פר×׌×××¨× ××× ×ע××ת ×ת ×× ×Š×תק×× ××׊רת ××¨× ×פק××× RunCommand ×××ץ××¤× ×× ××× × ××ר×× ×ע׼ - ×׊××××ת, ×××× ××× ×Š×ר׊××× ×Š×× ×× (×ץ×ץ××, ׊רת×× ×˘×××××, ×Ą×Š× ×× ××××××). ×× ×Ş×Ą×Ş×× ×קר××, ת×××× ×קר××× ×× ××× InsertItemsWorkList ××¤× ××. ××× ×׊×׊ ×××ץפת ×××× ××× ×ר׊××× ×רפ×ת ×˘× ××× ×˘×××× ×פ×× ×Š× ××× ×׊×ר×ת rac console, ׊××××ר ×ע×ר ×ר׊××× ×××Š×Ş× × $lst. ×××× ×¨×Š××× ×Š× ×¨×Š×××ת ××××××ת ××××ת ×Š× ×××× ××× ××פר××× ×× ×§××ת×××.
××××××, ר׊××× ×Š× ×××××¨× ×׊×××:
svk@svk ~]$ /opt/1C/v8.3/x86_64/rac connection list --cluster=783d2170-56c3-11e8-c586-fc75165efbb2 localhost:1545
connection : dcf5991c-7d24-11e8-1690-fc75165efbb2
conn-id : 0
host : svk.home
process : 79de2e16-56c3-11e8-c586-fc75165efbb2
infobase : 00000000-0000-0000-0000-000000000000
application : "JobScheduler"
connected-at : 2018-07-01T14:49:51
session-number : 0
blocked-by-ls : 0
connection : b993293a-7d24-11e8-1690-fc75165efbb2
conn-id : 0
host : svk.home
process : 79de2e16-56c3-11e8-c586-fc75165efbb2
infobase : 00000000-0000-0000-0000-000000000000
application : "JobScheduler"
connected-at : 2018-07-01T14:48:52
session-number : 0
blocked-by-ls : 0
×׌××¨× ×רפ×ת ×× ××ר×× ××˘×¨× ××:
××××× ×Š××ע×× ×××ר ×ת ׊××ת ××××× ××× ×˘××ר ×××תרת ××× ×Ş×× ×× ×××××× ×××××:
InsertItemsWorkList
proc InsertItemsWorkList {lst} {
global work_list_row_count
# ŃŃŃанОвка ŃĐľŃĐľĐ´ĐžĐ˛Đ°Đ˝Đ¸Ń ŃвоŃĐ° Đ´ĐťŃ ŃŃŃОки
if [expr $work_list_row_count % 2] {
set tag dark
} else {
set tag light
}
# ŃĐ°ĐˇĐąĐžŃ ŃŃŃОк на паŃŃ ĐşĐťŃŃ - СнаŃонио
foreach i $lst {
if [regexp -nocase -all -- {(D+)(s*?|)(:)(s*?|)(.*)} $i match param v2 v3 v4 value] {
lappend column_list [string trim $param]
lappend value_list [string trim $value]
}
}
# СапОНнонио ŃайНиŃŃ
.frm_work.tree_work configure -columns $column_list -displaycolumns $column_list
.frm_work.tree_work insert {} end -values $value_list -tags $tag
.frm_work.tree_work column #0 -stretch
# ŃŃŃанОвка СагОНОвкОв
foreach j $column_list {
.frm_work.tree_work heading $j -text $j
}
incr work_list_row_count
}
×××, ××ק×× ×¤×§××× ×¤×Š××× [split $str ":"], ×׊ר ×פ׌×ת ×ת ×××ר××ת ××××× ××× ×××פר××× ×˘× ××× ":" ××××××¨× ×¨×Š×××, × ×˘×Š× ×Š×××׊ ×××××× ×¨×××ר×, ׊×× ××ק ×××××× ××× ×××××× ×× × ×§××ת×××.
×××× InsertClusterItems (××× ×××× ×××××) פ׊×× ××ץ×ף ר׊××× ×Š× ×¨×××× ×Ś××Ś× ×˘× ××××× ×Ş××××× ×ע׼ ×Š× ×¨××× ××׊××× ×× ×ר׊
InsertClusterItems
proc InsertClusterItems {tree id} {
set parent "cluster::$id"
$tree insert $parent end -id "infobases::$id" -text "ĐĐ˝ŃĐžŃПаŃиОннŃĐľ йаСŃ" -values "$id"
$tree insert $parent end -id "servers::$id" -text "РайОŃио ŃĐľŃвоŃŃ" -values "$id"
$tree insert $parent end -id "admins::$id" -text "ĐдПиниŃŃŃĐ°ŃĐžŃŃ" -values "$id"
$tree insert $parent end -id "managers::$id" -text "ĐонодМоŃŃ ĐşĐťĐ°ŃŃĐľŃĐ°" -values $id
$tree insert $parent end -id "processes::$id" -text "РайОŃио ĐżŃĐžŃĐľŃŃŃ" -values "workprocess-all"
$tree insert $parent end -id "sessions::$id" -text "ХоанŃŃ" -values "sessions-all"
$tree insert $parent end -id "locks::$id" -text "ĐНОкиŃОвки" -values "blocks-all"
$tree insert $parent end -id "connections::$id" -text "ХОодинониŃ" -values "connections-all"
$tree insert $parent end -id "profiles::$id" -text "ĐŃĐžŃиНи йоСОпаŃнОŃŃи" -values $id
}
××Ş× ×××× ×׊ק×× ×Š×Ş× ×פ׊ר×××ת × ×ץפ×ת ×××׊×× ×××× ××××, ׊×× × ××Ş× ×××× ×ר××ת ×××ר×ר ×××Ś× ×Ş××× ××××˘× ××××פ×ר ×פק×××ת ׊×××ר×ת ×˘× ×˘×Ś××:
××××× ××, ×××Ą×¤× ×××××§× × ×¤×Ş×¨×ת ×××ת×ת:
InsertBaseItems
proc InsertBaseItems {tree id} {
set parent "infobase::$id"
if { [$tree exists "sessions::$id"] == 0 } {
$tree insert $parent end -id "sessions::$id" -text "ХоанŃŃ" -values "$id"
}
if { [$tree exists "locks::$id"] == 0 } {
$tree insert $parent end -id "locks::$id" -text "ĐНОкиŃОвки" -values "$id"
}
if { [$tree exists "connections::$id"] == 0 } {
$tree insert $parent end -id "connections::$id" -text "ХОодинониŃ" -values "$id"
}
}
×× × ×××Š× × ××× × ××תר:
InsertProfileItems
proc InsertProfileItems {tree id} {
set parent "profile::$id"
set lst {
{dir "ĐиŃŃŃĐ°ĐťŃĐ˝ŃĐľ каŃаНОги"}
{com "РаСŃĐľŃŃннŃĐľ COM-кНаŃŃŃ"}
{addin "ĐноŃнио кОПпОнонŃŃ"}
{module "ĐноŃнио ĐžŃŃŃŃŃ Đ¸ ОйŃайОŃки"}
{app "РаСŃĐľŃŃннŃĐľ ĐżŃиНОМониŃ"}
{inet "Đ ĐľŃŃŃŃŃ Đ¸Đ˝ŃĐľŃноŃ"}
}
foreach i $lst {
append item [lindex $i 0] "::$id"
if { [$tree exists $item] == 0 } {
$tree insert $parent end -id $item -text [lindex $i 1] -values "$id"
}
unset item
}
}
××××× ××× ××× ××× ×׊×××׊ ××××××, ׊×× ×××׌ע×ת ×פק×××ת ××××ר×ת ×× ×Š× ×ת. ×××× ×××Š× ××׊ת×׊ × ×Ş×× × ×׊×ק×× ××˘×Ş× ×Š× ××××.
×Ą×§×¨× × ××ץפת ×××× ××× ×××××ר × ×Ş×× ××, ע×׊×× ×××ע ×××× ××ת××§× ×ער×××. ×××××× ×Š×ע׌×, ×××Ş× ×¤×¨××ר×× ×׊×׊×× ×ער××× ××××Ą×¤× (×××˘× ×ץ×ץ ××××ע), × ×˘×Š× ×Š×××׊ ××××Ş× ××¤×Ą× ××××××. ×××××ר××Ş× ×קר××× ×××××× ×××Ą×¤× × ×¨×× ××:
××ץף::$key->AddToplevel
××ער××× ×××:
ער×××::$key->××ץף::$key->AddTopLevel
××××××, × ××§× ×˘×¨××× ×Š× ×׊×××, ××××ר. ×××ר ××××Ś× ×˘× ×Š× ××׊××× ×ע׼, ××׼ ×˘× ×פת×ר ×ער××× ×ץר×× ××××× (ע×פר××) ××××פץ ××ת××× ×××Ś× ×˘× ××ץ×:
ער×××::cluster
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 load_balancing_mode kill_problem_processes active_cluster
agent_user agent_pwd cluster_user cluster_pwd auth
if {$cluster_user ne "" && $cluster_pwd ne ""} {
set auth "--cluster-user=$cluster_user --cluster-pwd=$cluster_pwd"
} else {
set auth ""
}
# ŃиŃŃоП ŃĐžŃĐźŃ Đ´ĐťŃ ĐşĐťĐ°ŃŃĐľŃĐ°
set frm [Add::cluster $tree $host $values]
# ПонŃоП ŃокŃŃ Đ˝Đ° ПоŃко
$frm configure -text "РодакŃиŃОванио кНаŃŃĐľŃĐ°"
set active_cluster $values
# пОНŃŃаоП даннŃĐľ пО вŃĐ´ĐľĐťĐľĐ˝Đ˝ĐžĐźŃ ĐşĐťĐ°ŃŃĐľŃŃ
set lst [RunCommand cluster::$values "cluster info --cluster=$active_cluster $host"]
# СапОНнŃоП пОНŃ
FormFieldsDataInsert $frm $lst
# вŃкНŃŃаоП пОНŃ, ŃодакŃиŃОванио кОŃĐžŃŃŃ
СапŃĐľŃонО
$frm.ent_host configure -state disable
$frm.ent_port configure -state disable
# поŃонаСнаŃаоП ОйŃайОŃŃик
.add.frm_btn.btn_ok configure -command {
RunCommand "" "cluster update
--cluster=$active_cluster $auth
--name=[.add.frm.ent_name get]
--expiration-timeout=$expiration_timeout
--lifetime-limit=$lifetime_limit
--max-memory-size=$max_memory_size
--max-memory-time-limit=$max_memory_time_limit
--security-level=$security_level
--session-fault-tolerance-level=$session_fault_tolerance_level
--load-balancing-mode=$load_balancing_mode
--errors-count-threshold=$errors_count_threshold
--kill-problem-processes=$kill_problem_processes
$auth $host"
$tree delete "cluster::$active_cluster"
Run::server $tree $host ""
destroy .add
}
}
××ת×ץץ ×˘× ××ער×ת ×ק××, ××××¤× ×˘×§×¨×× ×, ××× ×ר×ר, ××׼ ××× ×Š×§×× ××××¤× ××פת×ר×× × ××ק ×××Š× × ×××× FormFieldsDataInsert ׊×××× ×ת ×׊××ת ×× ×Ş×× ×× ×××ת×× ×ת ×××Š×Ş× ××:
FormFieldsDataInsert
proc FormFieldsDataInsert {frm lst} {
foreach i [lindex $lst 0] {
# пОНŃŃаоП ŃпиŃОк паŃаПоŃŃОв и СнаŃониК
if [regexp -nocase -all -- {(D+)(s*?|)(:)(s*?|)(.*)} $i match param v2 v3 v4 value] {
# ПонŃоП ŃиПвОНŃ
regsub -all -- "-" [string trim $param] "_" entry_name
# СапОНнŃоП даннŃПи
if [winfo exists $frm.ent_$entry_name] {
$frm.ent_$entry_name delete 0 end
$frm.ent_$entry_name insert end [string trim $value """]
}
if [winfo exists $frm.cb_$entry_name] {
global $entry_name
set $entry_name [string trim $value """]
}
# Đ´ĐťŃ ŃокйОкŃОв ПонŃоП СнаŃониŃ
if [winfo exists $frm.check_$entry_name] {
global $entry_name
if {$value eq "0"} {
set $entry_name no
} elseif {$value eq "1"} {
set $entry_name yes
} else {
set $entry_name $value
}
}
}
}
}
××××× ××, ע×× ×תר×× × ×ץף ×Š× tcl - ×ער××× ×Š× ××Š×Ş× ×× ××ר×× ××××פ×× ×ת×ר ׊××ת ××Š×Ş× ××. ×Ö¸×Öľ×. ××× ××פ×× ×ת ××××× ××פץ×× ××ת××× ×××Š×Ş× ×× ××××××××××, ׊××ת ×׊××ת ××××Š×Ş× ×× ×Ş××××× ××ת×× ×Š×רת ×פק××× ×Š× ××× ×׊×ר×ת rac ××׊××ת ×Š× ×¤×¨×××¨× ×¤×× ×פק××× ×××˘× ×ר×× - ××קף ××××ף ××§× ×Ş×ת××. ×Ö°×ָ׊×Ö¸× ×ת×××× ××-ע××××ת-××××ת ×ת××× ×ת××× ent_scheduled_jobs_deny ×××Š×Ş× × ××××ת_ע××××ת_×ת×××× ×ת.
×פץ×× ××××Ą×¤× ×ער××× ×˘×Š×××× ××××ת ׊×× ×× ××ר×× ×׊××ת, ×××Š× ×˘×××× ×˘× ×ץ×ץ ×××ע:
××ץפת ××××ת ×××ע
ער××ת ××××ת ×××ע
××××× ×ער××× Edit::infobase ×ת××ץפ×× ×××פץ ×׊××ת ×× ×ר׊××, ×ק×× ××× × ×¨×× ×××× ××× × ×׌×× ×××Ş× ×××.
××× ×××××, × ×××× ×××ץפ×, ער×××, ××××§× ×××׊××× ×˘××ר ×××× ××× ××ר××.
×××××× ×Š×Ş×¤×˘×× ×׊×ר×ת ×ר×× ×˘× ×ץפר ×××Ş× ××××× ×Š× ×Š×¨×Ş××, ×׊××××ת, ×ץ××Ą× ×××ע ×××', ××× ×ק××ע ×××× ×׊××× ×Š××× ××××× ×Š×¨×Ş ×× ×ער×ת ××××ת ×××ע, ×××× ×Ą× ×ץפר ××Š×Ş× ×× ××××××××, ׊ער×× × ×§×ע×× ××× ×××. ×¤×˘× ×Š××Ş× ×××׼ ×˘× ××××× ××× ×Š× ×ע׼. ×Ö¸×Öľ×. ××××× ×¨×Ľ ××××¤× ×¨×§×רץ××× ××¨× ×× ×¨×××× ××× ×××××ר ×ת ×××Š×Ş× ××:
SetGlobalVarFromTreeItems
proc SetGlobalVarFromTreeItems {tree id} {
global host server active_cluster infobase
set parent [$tree parent $id]
set values [$tree item $id -values]
set key [lindex [split $id "::"] 0]
switch -- $key {
server {set host $values}
work_server {set server $values}
cluster {set active_cluster $values}
infobase {set infobase $values}
}
if {$parent eq ""} {
return
} else {
SetGlobalVarFromTreeItems $tree $parent
}
}
×׊××× 1C ××פ׊ר ×× ×ע××× ×˘× ×× ××× ××׊×ר. ××Š× × ×Š× × ×Ą×××× ×Š× ×× ××× ×ער×ת - ×× ×× ×Ą××× ×׊××× ××× ×× ×׊×××. ××ת×× ×××, ×׌××¨× ×¤×˘××× × ××× ×, ×××× ×Ą× 4 ××Š×Ş× ×× ×××××××× × ×ץפ×× ××××××× ×ת ××× ××Ą× ××ץ×ץ×× ×Š× ×× ×× ××ער×ת. ×Ö¸×Öľ×. ×× ×׊ ×׊××× ×× ×× ××׊×××, ת××Ś× ×Ş××ת ××-׊×× ×××× ×Ş פר×× ××× ××Ą× ××ץ×ץ×× ×Š××, ×× ×Ş×× ×× ××׊××¨× ××××ר×× ××××× ×Ą× ××× ×¤×§××× ×˘××ר ××׊××× ××ת×××.
×× ×××ר××ת ×××× ×××פ×× ×׊××××ת.
ErrorParcing
proc ErrorParcing {err opt} {
global cluster_user cluster_pwd agent_user agent_pwd
switch -regexp -- $err {
"Cluster administrator is not authenticated" {
AuthorisationDialog "ĐдПиниŃŃŃĐ°ŃĐžŃ ĐşĐťĐ°ŃŃĐľŃĐ°"
.auth_win.frm_btn.btn_ok configure -command {
set cluster_user [.auth_win.frm.ent_name get]
set cluster_pwd [.auth_win.frm.ent_pwd get]
destroy .auth_win
}
#RunCommand $root $par
}
"Central server administrator is not authenticated" {
AuthorisationDialog "ĐдПиниŃŃŃĐ°ŃĐžŃ Đ°ĐłĐľĐ˝ŃĐ° кНаŃŃĐľŃĐ°"
.auth_win.frm_btn.btn_ok configure -command {
set agent_user [.auth_win.frm.ent_name get]
set agent_pwd [.auth_win.frm.ent_pwd get]
destroy .auth_win
}
}
"ĐдПиниŃŃŃĐ°ŃĐžŃ ĐşĐťĐ°ŃŃĐľŃĐ° но Đ°ŃŃонŃиŃиŃиŃОван" {
AuthorisationDialog "ĐдПиниŃŃŃĐ°ŃĐžŃ ĐşĐťĐ°ŃŃĐľŃĐ°"
.auth_win.frm_btn.btn_ok configure -command {
set cluster_user [.auth_win.frm.ent_name get]
set cluster_pwd [.auth_win.frm.ent_pwd get]
destroy .auth_win
}
#RunCommand $root $par
}
"ĐдПиниŃŃŃĐ°ŃĐžŃ ŃонŃŃĐ°ĐťŃнОгО ŃĐľŃвоŃĐ° но Đ°ŃŃонŃиŃиŃиŃОван" {
AuthorisationDialog "ĐдПиниŃŃŃĐ°ŃĐžŃ Đ°ĐłĐľĐ˝ŃĐ° кНаŃŃĐľŃĐ°"
.auth_win.frm_btn.btn_ok configure -command {
set agent_user [.auth_win.frm.ent_name get]
set agent_pwd [.auth_win.frm.ent_pwd get]
destroy .auth_win
}
}
(.+) {
tk_messageBox -type ok -icon error -message "$err"
}
}
}
×Ö¸×Öľ×. ××ת×× ××× ×Š×פק××× ××××ר×, ×ת×××× ×Ş××× ××ת××.
× ××× ×ע×׊××, ×-95 ×××× ××פ×× ×§×Ś××× ×××ת ××׊××, ×× ×Š× ×תר ××× ××××Š× ×˘×××× ×˘× ×¤×¨×פ××× ××××× ×××××ק ×××Ş× =). ×× ×××. ×× × ××Ş× ×Ś× ×˘× ×ץ×פ×ר ××ק×××.
×ק×× ×××× ××××¤× ×ץ×רת×
ע××××: ץ××××Ş× ×ע××× ×˘× ×¤×¨×פ××× ×××××. ×עת ×פ×× ×§×Ś××× ×××ת ×××׊×ת ×-100%.
ע×××× 2: ××ק×××׌×× ××× ×××ת ×ר×ץ×ת × ×ץפ×, ×ע×××× ×-win7 × ××ק×
×ק×ר: www.habr.com