Rehefa nandinika ny lohahevitry ny fomba fiasan'ny vokatra 1C ao amin'ny tontolo Linux izahay, dia hita ny tsy fahampiana iray - ny tsy fisian'ny fitaovana misy sehatra maro amin'ny sary ho an'ny fitantanana vondron'ny mpizara 1C. Ary nanapa-kevitra ny hanitsy izany tsy fahampiana izany amin'ny fanoratana GUI ho an'ny utility rac console. Tcl/tk no nofidina ho fiteny fampandrosoana, araka ny hevitro, no mety indrindra amin'ity asa ity. Ary noho izany, tiako ny hanolotra lafiny mahaliana amin'ny vahaolana amin'ity fitaovana ity.
Mba hiasa dia mila fizarana tcl/tk sy 1C ianao. Ary satria nanapa-kevitra ny hanararaotra ny fahafahan'ny fandefasana tcl/tk fototra aho nefa tsy mampiasa fonosana antoko fahatelo, dia mila version 8.6.7 aho, izay ahitana ttk - fonosana misy singa sary fanampiny, izay tena ilaintsika ttk ::TreeView, mamela ny angon-drakitra aseho amin'ny endrika firafitry ny hazo sy amin'ny endrika latabatra (lisitra). Ary koa, amin'ny dikan-teny vaovao, ny asa miaraka amin'ny maningana dia novolavolaina (ny baiko andrana, izay ampiasaina amin'ny tetikasa rehefa manao baiko ivelany).
Ny tetikasa dia misy rakitra maromaro (na dia tsy misy manakana anao tsy hanao ny zava-drehetra ao anaty iray aza):
rac_gui.cfg - config default
rac_gui.tcl - script fanombohana lehibe
Ny lahatahiry lib dia misy rakitra izay alefa ho azy amin'ny fanombohana:
function.tcl - rakitra misy fomba fiasa
gui.tcl - interface an-tsary lehibe
images.tcl - tranomboky sary base64
Ny rakitra rac_gui.tcl, raha ny marina, dia manomboka ny mpandika teny, manomboka ny fari-piainana, mameno ny modules, ny configs, sns. Ny votoatin'ny rakitra misy fanehoan-kevitra:
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"
}
}
Rehefa avy misintona izay rehetra ilaina sy manamarina ny fisian'ny rac utility dia hatomboka ny varavarankely sary. Ny interface interface dia misy singa telo:
Toolbar, hazo ary lisitra
Nataoko mitovy araka izay azo atao ny votoatin'ny "hazo" amin'ny fitaovana Windows mahazatra avy amin'ny 1C.
Ny kaody fototra mamorona ity varavarankely ity dia voarakitra ao amin'ny rakitra
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
Ny algorithm amin'ny fiasana amin'ny programa dia toy izao manaraka izao:
1. Voalohany, mila manampy ny mpizara cluster lehibe ianao (izany hoe, ny mpizara fitantanana cluster (amin'ny Linux, ny fitantanana dia natomboka tamin'ny baiko "/opt/1C/v8.3/x86_64/ras cluster βdaemonβ)).
Mba hanaovana izany, tsindrio ny bokotra "+" ary ao amin'ny varavarankely misokatra, ampidiro ny adiresy sy ny seranan-tsambo:
Aorian'izay dia hiseho eo amin'ny hazo ny mpizara anay amin'ny alΓ lan'ny fipihana azy, hisokatra ny lisitry ny kluster na hisy hadisoana amin'ny fifandraisana.
2. Ny fipihana ny anaran'ny cluster dia hanokatra lisitr'ireo fiasa azo ampiasaina amin'izany.
3.β¦
Ary ny sisa, i.e. raha te hampiditra cluster vaovao, mifidiana izay misy ao amin'ny lisitra ary tsindrio ny bokotra "+" ao amin'ny fitaovana ary hiseho ny fifanakalozan-kevitra manampy vaovao:
Ny bokotra ao amin'ny bara-fitaovana dia manao asa miankina amin'ny contexte, i.e. Miankina amin'ny singa iray amin'ny hazo na lisitra nofantenana, fomba iray na hafa no hatao.
Andeha hojerentsika ny ohatry ny bokotra add (β+β):
Kaody famoronana bokotra:
ttk::button $frm_tool.btn_add -command Add -image add_grey_32
Eto isika dia mahita fa rehefa voatsindry ny bokotra dia hotanterahina ny fomba "Add", ny code:
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
}
Ity ny iray amin'ireo tombony amin'ny tickle: azonao atao ny mampita ny sandan'ny fari-piainana ho anarana fomba fiasa:
Add::$key .frm_tree.tree $host $values
Izany hoe, ohatra, raha manondro ny lohamilina lehibe isika ary manindry ny "+", dia hatomboka ny fomba fiasa Add::server, raha ao amin'ny cluster - Add::cluster sy ny sisa (hosoratako hoe aiza ny "Ny fanalahidy" ilaina dia avy amin'ny ambany kely), ireo fomba fiasa voatanisa dia manintona singa sary mifanaraka amin'ny teny manodidina.
Araka ny efa tsikaritrareo, ny endrika dia mitovy amin'ny fomba - tsy mahagaga izany, satria aseho amin'ny fomba iray izy ireo, ny marimarina kokoa ny endriky ny endrika (varavarankely, bokotra, sary, marika), ny anaran'ny fomba fiasa. 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
}
Masontsivana fiantsoana: lohateny, anaran-tsary ho an'ny kisary avy amin'ny tranomboky (lib/images.tcl) ary mari-pamantarana anarana fikandrana azo atao (default .add). Noho izany, raha maka ireto ohatra etsy ambony ireto isika amin'ny fampidirana ny lohamilina sy ny cluster, dia ho toy izany ny antso:
AddToplevel "ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ°" server_grey_64
na
AddToplevel "ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°" cluster_grey_64
Eny ary, amin'ny fanohizana ireo ohatra ireo, dia hasehoko ny fomba fiasa izay mampiseho fifanakalozan-kevitra fanampiny ho an'ny mpizara na cluster.
Add::server
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
}
Add :: 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
}
Raha ampitahaina ny kaody amin'ireo fomba fiasa ireo dia hita amin'ny maso mitanjaka ny fahasamihafana; hifantoka amin'ny mpitantana bokotra "Ok" aho. Ao amin'ny Tk, ny fananan'ny singa sary dia azo ovaina mandritra ny fanatanterahana ny programa amin'ny fampiasana ny safidy configures. Ohatra, ny baiko voalohany hanehoana ny bokotra:
ttk::button $frm_btn.btn_ok -image ok_grey_24 -command { }
Saingy amin'ny endrikay, ny baiko dia miankina amin'ny fampiasa ilaina:
.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
}
Ao amin'ny ohatra etsy ambony, ny bokotra "clogged" dia manomboka ny fomba fampidirana cluster.
Eto dia ilaina ny manao digression amin'ny fiasana amin'ny singa sary ao amin'ny Tk - ho an'ny singa fampidirana data isan-karazany (fidirana, combobox, checkbutton, sns) dia nampidirina ho toy ny fari-pitsipika lahatsoratra:
entry $frm.ent_lifetime_limit -textvariable lifetime_limit
Io fari-piainana io dia voafaritra ao amin'ny espace anarana manerantany ary misy ny sanda ampidirina amin'izao fotoana izao. Ireo. Mba hahazoana ny lahatsoratra niditra avy amin'ny saha, dia mila mamaky fotsiny ny sanda mifanaraka amin'ny fari-piainana (mazava ho azy, raha toa ka voafaritra rehefa mamorona ny singa).
Ny fomba faharoa hamerenana ny lahatsoratra nampidirina (ho an'ny singa amin'ny karazana fidirana) dia ny fampiasana ny baiko get:
.add.frm.ent_name get
Ireo fomba roa ireo dia azo jerena ao amin'ny code etsy ambony.
Ny fanindriana an'ity bokotra ity, amin'ity tranga ity, dia manomboka ny fomba RunCommand miaraka amin'ny andalana baiko novolavolaina hanampiana cluster amin'ny resaka 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
Ankehitriny dia tonga amin'ny baiko lehibe isika, izay mifehy ny fandefasana ny rac miaraka amin'ireo masontsivana ilaintsika, dia mamaha ny famoahana ny baiko ao anaty lisitra sy miverina, raha ilaina:
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 ""
}
}
Aorian'ny fampidirana ny angon-drakitra lehibe amin'ny mpizara, dia ampidirina amin'ny hazo izany, noho izany, ao amin'ny Add:server procedure etsy ambony, ity code manaraka ity dia tompon'andraikitra:
.frm_tree.tree insert {} end -id "server::$host" -text "$host" -values "$host"
Ankehitriny, amin'ny alΓ lan'ny fipihana ny anaran'ny mpizara ao amin'ny hazo, dia mahazo lisitry ny clusters tantanan'io server io isika, ary amin'ny fipihana ny cluster dia mahazo lisitry ny singa cluster (servers, infobases, sns.). Izany dia ampiharina amin'ny fomba 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
}
Noho izany, Run::server dia hatomboka ho an'ny lohamilina lehibe (ho an'ny cluster - Run::cluster, ho an'ny mpizara miasa - Run::work_server, sns.). Ireo. ny sandan'ny variable key $ dia ampahany amin'ny anaran'ny singa hazo voafaritry ny safidy -id.
Andeha hojerentsika ny fomba fiasa
Run ::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
}
}
Ity fomba fiasa ity dia manodina izay azo avy amin'ny mpizara amin'ny alΓ lan'ny baiko RunCommand ary manampy ny karazan-javatra rehetra amin'ny hazo - cluster, singa fototra isan-karazany (fototra, mpizara miasa, fivoriana, sns). Raha mijery akaiky ianao dia ho hitanao fa misy antso mankany amin'ny dingana InsertItemsWorkList ao anatiny. Izy io dia ampiasaina hanampiana singa amin'ny lisitra an-tsary amin'ny alΓ lan'ny fanodinana ny vokatra avy amin'ny fampitaovana rac console, izay naverina teo aloha ho lisitra ho an'ny variable $lst. Ity dia lisitr'ireo lisitra misy singa tsiroaroa sarahin'ny tsinay.
Ohatra, lisitry ny fifandraisana cluster:
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
Amin'ny endrika grafika dia ho toy izao izany:
Ny dingana etsy ambony dia mifidy ny anaran'ny singa ho an'ny lohapejy sy angona hamenoana ny latabatra:
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
}
Eto, ho solon'ny baiko tsotra [split $str ":"], izay manasaraka ny tady ho singa misaraka amin'ny ":" ary mamerina lisitra, dia ampiasaina ny fitenenana mahazatra, satria misy singa sasany koa misy tsangambato.
Ny fomba fiasa InsertClusterItems (iray amin'ireo mitovitovy amin'izany) dia manampy fotsiny lisitry ny singa ankizy miaraka amin'ny famantarana mifanaraka amin'ny hazo misy ny singa cluster ilaina.
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
}
Azonao atao ny mandinika safidy roa hafa amin'ny fampiharana fomba mitovy, izay ho hita mazava tsara ny fomba ahafahanao manatsara sy manala ny baiko miverimberina:
Amin'ity dingana ity, ny fanampiana sy ny fanamarinana dia voavaha mivantana:
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"
}
}
Ity misy fomba fiasa marina kokoa:
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
}
}
Ny fahasamihafana misy eo amin'izy ireo dia ny fampiasana loop iray, izay anaovana ny baiko miverimberina. Ny fomba fampiasana dia araka ny fahaizan'ny mpamorona.
Niresaka momba ny fampidirana singa sy ny fakana angona izahay, izao no fotoana hifantohana amin'ny fanitsiana. Satria, amin'ny ankapobeny, ireo mari-pamantarana mitovy dia ampiasaina amin'ny fanitsiana sy fanampim-panampiana (afa-tsy ny fototry ny fampahalalana), ireo endrika fifanakalozan-kevitra mitovy no ampiasaina. Ny algorithm amin'ny fiantsoana ny fomba fampidirana dia toy izao:
Add::$key->AddToplevel
Ary ho an'ny fanovana toy izao:
Ahitsio::$key->Add::$key->AddTopLevel
Ohatra, andeha horaisintsika ny fanitsiana cluster, i.e. Rehefa avy nanindry ny anaran'ny cluster ao amin'ny hazo, tsindrio ny bokotra fanitsiana ao amin'ny bara fitaovana (pensilihazo) ary hiseho eo amin'ny efijery ny endrika mifanaraka amin'izany:
Ahitsio :: 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
}
}
Miorina amin'ny fanehoan-kevitra ao amin'ny kaody, amin'ny ankapobeny, mazava tsara ny zava-drehetra, afa-tsy ny fanerena ny kaody mpandrindra bokotra ary misy fomba fiasa FormFieldsDataInsert izay mameno ny saha miaraka amin'ny angon-drakitra ary manomboka ny variables:
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
}
}
}
}
}
Amin'ity fomba fiasa ity, ny tombony hafa amin'ny tcl dia nipoitra - ny sandan'ny variable hafa dia nosoloina anarana miovaova. Ireo. ho an'ny automatique ny famenoana endrika sy ny fanombohana ny variables, ny anaran'ny saha sy ny variables dia mifanandrify amin'ny baikon'ny baikon'ny utility rac sy ny anaran'ny mari-pamantarana famoahana baiko miaraka amin'ny singa manokana - ny dash dia nosoloina tsipika. ohatra voalahatra-asa-mandΓ mifanaraka amin'ny saha ent_scheduled_jobs_deny ary miovaova scheduled_jobs_deny.
Mety tsy hitovy amin'ny firafitry ny saha ny endrika fampidirana sy fanitsiana, ohatra, miasa miaraka amin'ny toby fampahalalana:
Manampy fiarovana vaovao
Fanitsiana fiarovana ny vaovao
Ao amin'ny fomba fanovana Edit::infobase, ampidirina amin'ny endrika ny saha ilaina; be dia be ny kaody, noho izany dia tsy asehoko eto.
Amin'ny alΓ lan'ny analogy, ny fomba fampidirana, fanitsiana, famafana dia ampiharina amin'ny singa hafa.
Satria ny fampandehanana ny utility dia midika hoe mpizara tsy voafetra, cluster, toby fampahalalana, sns., Mba hamaritana hoe iza no cluster an'ny mpizara na rafitra fiarovana amin'ny fampahalalam-baovao, dia nampidirina ny fari-piadidiana eran-tany maro, ny sandany dia napetraka tsirairay. fotoana tsindrio eo amin'ny singa ny hazo. Ireo. Ny fomba fiasa dia mandeha amin'ny alΓ lan'ny singa rehetra amin'ny ray aman-dreny ary mametraka ny variables:
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
}
}
Ny kluster 1C dia ahafahanao miasa na tsy nahazo alalana. Misy karazany roa ny administrateraβadministrateur agent de cluster sy administrateur cluster. Arak'izany, ho an'ny fampandehanana marina, 4 hafa maneran-tany no nampidirina ahitana ny fidirana sy ny tenimiafina administratera. Ireo. raha misy kaonty administratera ao amin'ny cluster, dia hiseho ny fifanakalozan-kevitra hampidirana ny fidiranao sy ny tenimiafinao, ny angona dia ho voatahiry ao anaty fitadidiana ary ampidirina ao anatin'ny baiko tsirairay ho an'ny cluster mifanaraka amin'izany.
Izany no andraikitry ny fomba fitantanana ny fahadisoana.
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"
}
}
}
Ireo. miankina amin'izay averin'ny baiko dia ho araka izany ny fanehoan-kevitra.
Amin'izao fotoana izao, manodidina ny 95 isan-jaton'ny fampiasa no efa nampiharina, ny hany sisa tavela dia ny fampiharana ny asa miaraka amin'ny mombamomba ny fiarovana ary ny fitsapana azy =). Izay ihany. Miala tsiny aho amin'ny tantara mikorontana.
Ny kaody dia azo ampiasaina amin'ny fomba mahazatra
Fanavaozana: nahavita niasa tamin'ny mombamomba ny fiarovana aho. Ankehitriny dia 100% no ampiharina ny fampiasa.
Fanavaozana 2: nampiana ny localization amin'ny teny anglisy sy rosiana, nosedraina ny asa amin'ny win7
Source: www.habr.com