เชเซเชฎ เชเซเชฎ เชเชชเชฃเซ Linux เชชเชฐเซเชฏเชพเชตเชฐเชฃเชฎเชพเช 1C เชเชคเซเชชเชพเชฆเชจเซ เชเซเชตเซ เชฐเซเชคเซ เชเชพเชฐเซเชฏ เชเชฐเซ เชเซ เชคเซเชจเชพ เชตเชฟเชทเชฏเชฎเชพเช เชคเชชเชพเชธ เชเชฐเซ, เชเช เชเชพเชฎเซ เชฎเชณเซ - 1C เชธเชฐเซเชตเชฐเชจเชพ เชเซเชฒเชธเซเชเชฐเชจเซ เชธเชเชเชพเชฒเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซ เช
เชจเซเชเซเชณ เชเซเชฐเชพเชซเชฟเชเชฒ เชฎเชฒเซเชเซ-เชชเซเชฒเซเชเชซเซเชฐเซเชฎ เชเซเชฒเชจเซ เช
เชญเชพเชต. เช
เชจเซ เชฐเซเช เชเชจเซเชธเซเชฒ เชเชชเชฏเซเชเชฟเชคเชพ เชฎเชพเชเซ GUI เชฒเชเซเชจเซ เช เชเชพเชฎเซเชจเซ เชธเซเชงเชพเชฐเชตเชพเชจเซ เชจเชฟเชฐเซเชฃเชฏ เชฒเซเชตเชพเชฎเชพเช เชเชตเซเชฏเซ เชนเชคเซ. Tcl/tk เชจเซ เชตเชฟเชเชพเชธ เชญเชพเชทเชพ เชคเชฐเซเชเซ เชชเชธเชเชฆ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชนเชคเซ, เชเชพเชฐเชฃ เชเซ เชฎเชพเชฐเชพ เชฎเชคเซ, เช เชเชพเชฐเซเชฏ เชฎเชพเชเซ เชธเซเชฅเซ เชฏเซเชเซเชฏ เชเซ. เช
เชจเซ เชคเซเชฅเซ, เชนเซเช เช เชธเชพเชฎเชเซเชฐเซเชฎเชพเช เชเชเซเชฒเชจเชพ เชเซเชเชฒเชพเช เชฐเชธเชชเซเชฐเชฆ เชชเชพเชธเชพเช เชฐเชเซ เชเชฐเชตเชพ เชฎเชพเชเชเซ เชเซเช.
เชเชพเชฎ เชเชฐเชตเชพ เชฎเชพเชเซ เชคเชฎเชพเชฐเซ tcl/tk เช
เชจเซ 1C เชตเชฟเชคเชฐเชฃเชจเซ เชเชฐเซเชฐ เชชเชกเชถเซ. เช
เชจเซ เชฎเซเช เชคเซเชคเซเชฏ-เชชเชเซเชท เชชเซเชเซเชเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเชฏเชพ เชตเชฟเชจเชพ เชฎเซเชณเชญเซเชค tcl/tk เชกเชฟเชฒเชฟเชตเชฐเซเชจเซ เชฎเชนเชคเซเชคเชฎ เชเซเชทเชฎเชคเชพเช เชฌเชจเชพเชตเชตเชพเชจเซเช เชจเชเซเชเซ เชเชฐเซเชฏเซเช เชนเซเชตเชพเชฅเซ, เชฎเชจเซ เชธเชเชธเซเชเชฐเชฃ 8.6.7 เชจเซ เชเชฐเซเชฐ เชชเชกเชถเซ, เชเซเชฎเชพเช ttk - เชตเชงเชพเชฐเชพเชจเชพ เชเซเชฐเชพเชซเชฟเช เชเชเชเซ เชธเชพเชฅเซเชจเซเช เชชเซเชเซเช เชถเชพเชฎเซเชฒ เชเซ, เชเซเชฎเชพเชเชฅเซ เช
เชฎเชจเซ เชฎเซเชเซเชฏเชคเซเชตเซ ttk เชจเซ เชเชฐเซเชฐ เชเซ. ::TreeView, เชคเซ เชตเซเชเซเชทเชจเชพ เชฌเชเชงเชพเชฐเชฃเชจเชพ เชธเซเชตเชฐเซเชชเชฎเชพเช เช
เชจเซ เชเซเชฌเชฒ (เชธเซเชเชฟ)เชจเชพ เชฐเซเชชเชฎเชพเช เชฌเชเชจเซ เชฐเซเชคเซ เชกเซเชเชพ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เชเชฐเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ. เชเชชเชฐเชพเชเชค, เชจเชตเชพ เชธเชเชธเซเชเชฐเชฃเชฎเชพเช, เช
เชชเชตเชพเชฆเซ เชธเชพเชฅเซเชจเซเช เชเชพเชฐเซเชฏ เชซเชฐเซเชฅเซ เชเชพเชฐเซเชฏ เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชเซ (เชเซเชฐเชพเชฏ เชเชฎเชพเชจเซเชก, เชเซ เชฌเชพเชนเซเชฏ เชเชฆเซเชถเซ เชเชฒเชพเชตเชคเซ เชตเชเชคเซ เชชเซเชฐเซเชเซเชเซเชเชฎเชพเช เชตเชชเชฐเชพเชฏ เชเซ).
เชชเซเชฐเซเชเซเชเซเชเชฎเชพเช เชเชฃเซ เชซเชพเชเชฒเซเชจเซ เชธเชฎเชพเชตเซเชถ เชฅเชพเชฏ เชเซ (เชเซเชเซ เชเชเชเชชเชฃ เชคเชฎเชจเซ เชเชเชฎเชพเช เชฌเชงเซเช เชเชฐเชตเชพเชฅเซ เช เชเชเชพเชตเชคเซเช เชจเชฅเซ):
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"
}
}
เชเชฐเซเชฐเซ เชเซ เชคเซ เชฌเชงเซเช เชกเชพเชเชจเชฒเซเชก เชเชฐเซเชฏเชพ เชชเชเซ เช เชจเซ เชฐเซเช เชฏเซเชเชฟเชฒเชฟเชเซเชจเซ เชนเชพเชเชฐเซ เชฎเชพเชเซ เชคเชชเชพเชธ เชเชฐเซเชฏเชพ เชชเชเซ, เชเซเชฐเชพเชซเชฟเชเชฒ เชตเชฟเชจเซเชกเซ เชถเชฐเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ. เชชเซเชฐเซเชเซเชฐเชพเชฎ เชเชจเซเชเชฐเชซเซเชธเชฎเชพเช เชคเซเชฐเชฃ เชเชเชเซเชจเซ เชธเชฎเชพเชตเซเชถ เชฅเชพเชฏ เชเซ:
เชเซเชฒเชฌเชพเชฐ, เชตเซเชเซเชท เช เชจเซ เชฏเชพเชฆเซ
เชฎเซเช "เชตเซเชเซเชท" เชจเซ เชธเชพเชฎเชเซเชฐเซเชจเซ 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 โdeemon") เชเชฆเซเชถ เชธเชพเชฅเซ เชถเชฐเซ เชฅเชพเชฏ เชเซ).
เช เชเชฐเชตเชพ เชฎเชพเชเซ, โ+โ เชฌเชเชจ เชชเชฐ เชเซเชฒเชฟเช เชเชฐเซ เช เชจเซ เชเซเชฒเชคเซ เชตเชฟเชเชกเซเชฎเชพเช, เชธเชฐเซเชตเชฐ เชธเชฐเชจเชพเชฎเซเช เช เชจเซ เชชเซเชฐเซเช เชฆเชพเชเชฒ เชเชฐเซ:
เชชเชเซเชฅเซ, เช
เชฎเชพเชฐเซเช เชธเชฐเซเชตเชฐ เชคเซเชจเชพ เชชเชฐ เชเซเชฒเชฟเช เชเชฐเซเชจเซ เชตเซเชเซเชทเชฎเชพเช เชฆเซเชเชพเชถเซ, เชเซเชฒเชธเซเชเชฐเซเชจเซ เชธเซเชเชฟ เชเซเชฒเชถเซ เช
เชฅเชตเชพ เชเชจเซเชเซเชถเชจ เชญเซเชฒ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เชฅเชถเซ.
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
}
เช เชนเซเช เชเชฟเชเชฒเชจเซ เชเช เชซเชพเชฏเชฆเซ เชเซ: เชคเชฎเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเชพ เชจเชพเชฎ เชคเชฐเซเชเซ เชเชฒเชจเซ เชเชฟเชเชฎเชค เชชเชธเชพเชฐ เชเชฐเซ เชถเชเซ เชเซ:
Add::$key .frm_tree.tree $host $values
เชเชเชฒเซ เชเซ, เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชเซ เชเชชเชฃเซ เชฎเซเชเซเชฏ เชธเชฐเซเชตเชฐ เชคเชฐเชซ เชจเชฟเชฐเซเชฆเซเชถ เชเชฐเซเช เช เชจเซ "+" เชฆเชฌเชพเชตเซเช, เชคเซ เชเชฎเซเชฐเซ::เชธเชฐเซเชตเชฐ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชถเชฐเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ, เชเซ เชเซเชฒเชธเซเชเชฐ เชชเชฐ - เชเชฎเซเชฐเซ::เชเซเชฒเชธเซเชเชฐ เช เชจเซ เชคเซเชฅเซ เชตเชงเซ (เชนเซเช เชคเซ เชตเชฟเชถเซ เชฒเชเซเชถ เชเซเชฏเชพเช เชเชฐเซเชฐเซ "เชเซเช" เชฅเซเชกเซ เชจเซเชเซเชฅเซ เชเชตเซ เชเซ), เชธเซเชเชฟเชฌเชฆเซเชง เชชเซเชฐเชเซเชฐเชฟเชฏเชพเช เชธเชเชฆเชฐเซเชญเชจเซ เช เชจเซเชฐเซเชช เชเซเชฐเชพเชซเชฟเช เชเชเชเซ เชฆเซเชฐเซ เชเซ.
เชเซเชฎ เชคเชฎเซ เชชเชนเซเชฒเซเชฅเซ เช เชจเซเชเชงเซเชฏเซเช เชนเชถเซ, เชธเซเชตเชฐเซเชชเซ เชถเซเชฒเซเชฎเชพเช เชธเชฎเชพเชจ เชเซ - เช เชเชถเซเชเชฐเซเชฏเชเชจเช เชจเชฅเซ, เชเชพเชฐเชฃ เชเซ เชคเซ เชเช เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เชฅเชพเชฏ เชเซ, เชตเชงเซ เชเซเชเซเชเชธเชชเชฃเซ เชซเซเชฐเซเชฎเชจเซ เชฎเซเชเซเชฏ เชซเซเชฐเซเชฎ (เชตเชฟเชเชกเซ, เชฌเชเชจเซ, เชเชฌเซ, เชฒเซเชฌเชฒ), เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซเช เชจเชพเชฎ เชเซเชช เชฒเซเชตเชฒ เชเชฎเซเชฐเซ
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
}
เชเชฎเซเชฐเซ::เชเซเชฒเชธเซเชเชฐ
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 เชฎเชพเช เชเซเชฐเชพเชซเชฟเช เชเชเชเซ เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชตเชพ เชคเชฐเชซ เชเช เชตเชฟเชทเชฏเชพเชเชคเชฐ เชเชฐเชตเชพ เชฏเซเชเซเชฏ เชเซ - เชตเชฟเชตเชฟเชง เชกเซเชเชพ เชเชจเชชเซเช เชคเชคเซเชตเซ (เชเชจเซเชเซเชฐเซ, เชเซเชฎเซเชฌเซเชฌเซเชเซเชธ, เชเซเชเชฌเชเชจ, เชตเชเซเชฐเซ) เชฎเชพเชเซ เชเช เชชเซเชฐเชพเชฎเซเชเชฐ เชเซเชเซเชธเซเช เชตเซเชฐเซเชเชฌเชฒ เชคเชฐเซเชเซ เชฐเชเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชเซ:
entry $frm.ent_lifetime_limit -textvariable lifetime_limit
เช เชเชฒ เชตเซเชถเซเชตเชฟเช เชจเซเชฎเชธเซเชชเซเชธเชฎเชพเช เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชฅเชฏเซเชฒ เชเซ เช เชจเซ เชนเชพเชฒเชฎเชพเช เชฆเชพเชเชฒ เชเชฐเซเชฒ เชฎเซเชฒเซเชฏ เชงเชฐเชพเชตเซ เชเซ. เชคเซ. เชซเซเชฒเซเชกเชฎเชพเชเชฅเซ เชฆเชพเชเชฒ เชเชฐเซเชฒ เชเซเชเซเชธเซเช เชฎเซเชณเชตเชตเชพ เชฎเชพเชเซ, เชคเชฎเชพเชฐเซ เชซเชเซเชค เชเชฒเชจเซ เช เชจเซเชฐเซเชช เชฎเซเชฒเซเชฏ เชตเชพเชเชเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ (เช เชฒเชฌเชคเซเชค, เชเซ เชคเซ เชเชเช เชฌเชจเชพเชตเชคเซ เชตเชเชคเซ เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชเชฐเชตเชพเชฎเชพเช เชเชตเซ).
เชฆเชพเชเชฒ เชเชฐเซเชฒ เชเซเชเซเชธเซเชเชจเซ เชชเซเชจเชเชชเซเชฐเชพเชชเซเชค เชเชฐเชตเชพเชจเซ เชฌเซเชเซ เชชเชฆเซเชงเชคเชฟ (เชเชจเซเชเซเชฐเซ เชชเซเชฐเชเชพเชฐเชจเชพ เชคเชคเซเชตเซ เชฎเชพเชเซ) เช get เชเชฆเซเชถเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชจเซ เชเซ:
.add.frm.ent_name get
เช เชฌเชเชจเซ เชชเชฆเซเชงเชคเชฟเช เชเชชเชฐเซเชเซเชค เชเซเชกเชฎเชพเช เชเซเช เชถเชเชพเชฏ เชเซ.
เช เชฌเชเชจเชจเซ เชเซเชฒเชฟเช เชเชฐเชตเชพเชฅเซ, เช เชเชฟเชธเซเชธเชพเชฎเชพเช, เชฐเซเชเชจเชพ เชธเชเชฆเชฐเซเชญเชฎเชพเช เชเซเชฒเชธเซเชเชฐ เชเชฎเซเชฐเชตเชพ เชฎเชพเชเซ เชเชจเชฐเซเช เชเชฐเซเชฒเซ เชเชฎเชพเชจเซเชก เชฒเชพเชเชจ เชธเชพเชฅเซ RunCommand เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชถเชฐเซ เชฅเชพเชฏ เชเซ:
/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
เชนเชตเซ เชเชชเชฃเซ เชฎเซเชเซเชฏ เชเชฆเซเชถ เชชเชฐ เชเชตเซเช เชเซเช, เชเซ เชเชชเชฃเชจเซ เชเซเชเชคเชพ เชชเชฐเชฟเชฎเชพเชฃเซ เชธเชพเชฅเซ เชฐเซเชเชจเชพ เชฒเซเชจเซเชเชจเซ เชจเชฟเชฏเชเชคเซเชฐเชฟเชค เชเชฐเซ เชเซ, เชเซ เชเชฐเซเชฐเซ เชนเซเชฏ เชคเซ, เชเชฆเซเชถเซเชจเชพ เชเชเชเชชเซเชเชจเซ เชฏเชพเชฆเซเช เช เชจเซ เชตเชณเชคเชฐเซเชฎเชพเช เชชเชฃ เชชเชพเชฐเซเชธ เชเชฐเซ เชเซ:
เชฐเชจเชเชฎเชพเชจเซเชก
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 ""
}
}
เชฎเซเชเซเชฏ เชธเชฐเซเชตเชฐ เชกเซเชเชพ เชฆเชพเชเชฒ เชเชฐเซเชฏเชพ เชชเชเซ, เชคเซ เชตเซเชเซเชทเชฎเชพเช เชเชฎเซเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ, เช เชฎเชพเชเซ, เชเชชเชฐเชจเซ Add:server เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชฎเชพเช, เชจเซเชเซเชจเซ เชเซเชก เชเชตเชพเชฌเชฆเชพเชฐ เชเซ:
.frm_tree.tree insert {} end -id "server::$host" -text "$host" -values "$host"
เชนเชตเซ, เชตเซเชเซเชทเชฎเชพเช เชธเชฐเซเชตเชฐเชจเชพ เชจเชพเชฎ เชชเชฐ เชเซเชฒเชฟเช เชเชฐเชตเชพเชฅเซ, เช เชฎเชจเซ เชคเซ เชธเชฐเซเชตเชฐ เชฆเซเชตเชพเชฐเชพ เชธเชเชเชพเชฒเชฟเชค เชเซเชฒเชธเซเชเชฐเซเชจเซ เชธเซเชเชฟ เชฎเชณเซ เชเซ, เช เชจเซ เชเซเชฒเชธเซเชเชฐ เชชเชฐ เชเซเชฒเชฟเช เชเชฐเชตเชพเชฅเซ, เช เชฎเชจเซ เชเซเชฒเชธเซเชเชฐ เชคเชคเซเชตเซ (เชธเชฐเซเชตเชฐ, เชเชจเซเชซเซเชฌเซเชธเซเชธ, เชตเชเซเชฐเซ) เชจเซ เชธเซเชเชฟ เชฎเชณเซ เชเซ. เช TreePress เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชฎเชพเช เชฒเชพเชเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ (file 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 เชตเซเชฐเซเชเชฌเชฒเชจเซเช เชฎเซเชฒเซเชฏ เช เชตเชฟเชเชฒเซเชช เชฆเซเชตเชพเชฐเชพ เชเชฒเซเชฒเซเชเชฟเชค เชตเซเชเซเชท เชคเชคเซเชตเชจเชพ เชจเชพเชฎเชจเซ เชเช เชญเชพเช เชเซ -เชเช.
เชเชพเชฒเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชชเชฐ เชงเซเชฏเชพเชจ เชเชชเซเช
เชเชฒเชพเชตเซ::เชธเชฐเซเชตเชฐ
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 เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชฎเชพเชเซ เชเซเชฒ เชเซเชถเซ. เชคเซเชจเซ เชเชชเชฏเซเช เชฐเซเช เชเชจเซเชธเซเชฒ เชฏเซเชเชฟเชฒเชฟเชเซเชจเชพ เชเชเชเชชเซเช เชชเชฐ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชฐเซเชจเซ เชเซเชฐเชพเชซเชฟเชเชฒ เชธเซเชเชฟเชฎเชพเช เชเชเชเซ เชเชฎเซเชฐเชตเชพ เชฎเชพเชเซ เชฅเชพเชฏ เชเซ, เชเซ เช เชเชพเช $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->Add::$key->AddTopLevel
เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชเชพเชฒเซ เชเซเชฒเชธเซเชเชฐเชจเซเช เชธเชเชชเชพเชฆเชจ เชเชฐเซเช, เชเชเชฒเซ เชเซ. เชเชพเชกเชฎเชพเช เชเซเชฒเชธเซเชเชฐเชจเชพ เชจเชพเชฎ เชชเชฐ เชเซเชฒเชฟเช เชเชฐเซเชฏเชพ เชชเชเซ, เชเซเชฒเชฌเชพเชฐ (เชชเซเชจเซเชธเชฟเชฒ) เชฎเชพเช เชธเชเชชเชพเชฆเชฟเชค เชเชฐเซ เชฌเชเชจ เชฆเชฌเชพเชตเซ เช เชจเซ เช เชจเซเชฐเซเชช เชซเซเชฐเซเชฎ เชธเซเชเซเชฐเซเชจ เชชเชฐ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เชฅเชถเซ:
เชธเชเชชเชพเชฆเชฟเชค เชเชฐเซ::เชเซเชฒเชธเซเชเชฐ
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 เชตเซเชถเซเชตเชฟเช เชเชฒ เชฐเชเซ เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเชพ เชนเชคเชพ. เชคเซ. เชเซ เชเซเชฒเชธเซเชเชฐเชฎเชพเช เชเชกเชฎเชฟเชจเชฟเชธเซเชเซเชฐเซเชเชฐ เชเชเชพเชเชจเซเช เชนเชถเซ, เชคเซ เชคเชฎเชพเชฐเซเช เชฒเซเชเชฟเชจ เช เชจเซ เชชเชพเชธเชตเชฐเซเชก เชฆเชพเชเชฒ เชเชฐเชตเชพ เชฎเชพเชเซ เชเช เชธเชเชตเชพเชฆ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เชฅเชถเซ, เชกเซเชเชพ เชฎเซเชฎเชฐเซเชฎเชพเช เชธเชพเชเชตเชตเชพเชฎเชพเช เชเชตเชถเซ เช เชจเซ เชธเชเชฌเชเชงเชฟเชค เชเซเชฒเชธเซเชเชฐ เชฎเชพเชเซ เชฆเชฐเซเช เชเชฆเซเชถเชฎเชพเช เชฆเชพเชเชฒ เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ.
เช เชญเซเชฒ เชธเชเชญเชพเชณเชตเชพเชจเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซ เชเชตเชพเชฌเชฆเชพเชฐเซ เชเซ.
เชเชฐเชฐเชชเชพเชฐเซเชธเชฟเชเช
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