home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / csbrokersn.tcl < prev    next >
Text File  |  1997-11-05  |  4KB  |  138 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1996
  4. #
  5. #      File:           @(#)csbrokersn.tcl    /main/titanic/8
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)csbrokersn.tcl    /main/titanic/8   5 Nov 1997 Copyright 1996 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. require csbrokerno.tcl
  13. # End user added include file section
  14.  
  15. require "csnode.tcl"
  16.  
  17. Class CSBrokersNode : {CSNode} {
  18.     constructor
  19.     method destructor
  20.     method childName
  21.     method childObjects
  22.     method createChild
  23.     method shutdown
  24.     method doUpdate
  25.     attribute brokerCount
  26.     attribute badBrokerCount
  27. }
  28.  
  29. constructor CSBrokersNode {class this name} {
  30.     set this [CSNode::constructor $class $this $name]
  31.     # Start constructor user section
  32.  
  33.     $this brokerCount 0
  34.     $this badBrokerCount 0
  35.  
  36.         $this label "<brokers>"
  37.         $this icon rep_brokers_16
  38.         $this activeIcon rep_brokers_16
  39.  
  40.         $this canShutdown 1
  41.  
  42.     # End constructor user section
  43.     return $this
  44. }
  45.  
  46. method CSBrokersNode::destructor {this} {
  47.     # Start destructor user section
  48.     # End destructor user section
  49.     $this CSNode::destructor
  50. }
  51.  
  52. method CSBrokersNode::childName {this object} {
  53.     set nodeName [$object name]
  54.     regsub -all {\.} $nodeName {_} nodeName
  55.     return $nodeName
  56. }
  57.  
  58. method CSBrokersNode::childObjects {this} {
  59.     set goodBrokers {}
  60.     set badBrokerCount 0
  61.     set brokerCount 0
  62.  
  63.     set ns [ORB::nameServer]
  64.     foreach broker [$ns brokers] {
  65.     if ![catch {$broker host} error] {
  66.         lappend goodBrokers $broker
  67.     } else {
  68.             lappend brokerErrors $error
  69.         incr badBrokerCount
  70.     }
  71.     incr brokerCount
  72.     }
  73.  
  74.     $this brokerCount $brokerCount
  75.     $this badBrokerCount $badBrokerCount
  76.  
  77.     if [info exists brokerErrors] {
  78.     [$this view] warning "Could not access all brokers due to\
  79.                               errors:\n\n[join $brokerErrors "\n\n"]"
  80.     }
  81.     
  82.     return [osort name $goodBrokers]
  83. }
  84.  
  85. method CSBrokersNode::createChild {this object} {
  86.     return [CSBrokerNode new $this.[$this childName $object] $object]
  87. }
  88.  
  89. method CSBrokersNode::shutdown {this {confirm 1}} {
  90.     if $confirm {
  91.         $this confirmShutdown "All Brokers" \
  92.             "Are you sure you want to shutdown all brokers?" shutdownBrokers
  93.         return
  94.     }
  95.  
  96.     # Shutdown all brokers.
  97.     #
  98.     set shutdownCount 0
  99.     set ns [ORB::nameServer]
  100.     set nsBroker [$ns broker]
  101.     set nsShutdown 0
  102.  
  103.     foreach broker [$ns brokers] {
  104.     if [catch {$broker shutdown} shutdownError] {
  105.         [$this view] error $shutdownError
  106.     } else {
  107.             incr shutdownCount
  108.  
  109.             # If name_server broker was shutdown, don't try to update,
  110.             # since that will time-out for sure.
  111.             #
  112.             if {$broker == $nsBroker} {
  113.                 set nsShutdown 1
  114.             }
  115.         }
  116.     }
  117.  
  118.     if $nsShutdown {
  119.         $this removeChildren
  120.     } elseif {$shutdownCount > 0} {
  121.         $this update 0
  122.     }
  123. }
  124.  
  125. method CSBrokersNode::doUpdate {this {rebuild 1}} {
  126.     $this CSNode::doUpdate $rebuild
  127.  
  128.     set info [$this info]
  129.     $info addHeader "Running Brokers"
  130.     $info addItem "Number of brokers" [$this brokerCount]
  131.     if {[$this badBrokerCount] > 0} {
  132.         $info addItem "Number of not responding brokers" [$this badBrokerCount]
  133.     }
  134. }
  135.  
  136. # Do not delete this line -- regeneration end marker
  137.  
  138.