summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 0a355e6)
raw | patch | inline | side by side (parent: 0a355e6)
author | hickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8> | |
Mon, 11 Jan 2010 09:01:41 +0000 (09:01 +0000) | ||
committer | hickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8> | |
Mon, 11 Jan 2010 09:01:41 +0000 (09:01 +0000) |
git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@15134 594d385d-05f5-0310-b6e9-bd551577e9d8
gosa-plugins/systems/admin/systems/class_systemManagement.inc | patch | blob | history | |
gosa-plugins/systems/admin/systems/system-list.xml | patch | blob | history |
diff --git a/gosa-plugins/systems/admin/systems/class_systemManagement.inc b/gosa-plugins/systems/admin/systems/class_systemManagement.inc
index 3aa053fa5423b764ba31c460c8449d298bcaac60..aecf4289d509dd112f4f52575a83097d7ebbfa20 100644 (file)
$this->storagePoints = array_unique($sP);
// Build filter
- if (session::global_is_set(get_class($this)."_filter")){
- $filter= session::global_get(get_class($this)."_filter");
- } else {
+# if (session::global_is_set(get_class($this)."_filter")){
+# $filter= session::global_get(get_class($this)."_filter");
+# } else {
$filter = new filter(get_template_path("system-filter.xml", true));
$filter->setObjectStorage($this->storagePoints);
- }
+# }
$this->setFilter($filter);
// Build headpage
$headpage = new listing(get_template_path("system-list.xml", true));
$headpage->setFilter($filter);
$filter->setConverter('INCOMING', 'systemManagement::incomingFilterConverter');
- $this->registerAction("DaemonEvent_halt", "systemManagement::handleEvent");
+
+ // Register Daemon Events
+ if(class_available("DaemonEvent") && class_available("gosaSupportDaemon")){
+ $events = DaemonEvent::get_event_types(SYSTEM_EVENT | HIDDEN_EVENT);
+ foreach($events['TRIGGERED'] as $name => $data){
+ $this->registerAction("T_".$name,"handleEvent");
+ $this->registerAction("S_".$name,"handleEvent");
+ }
+ $this->registerAction("DaemonEvent_activate","handleEvent");
+ }
+ $this->registerAction("saveEvent","saveEventDialog");
// Add copy&paste and snapshot handler.
if ($this->config->boolValueIsTrue("main", "copyPaste")){
if($this->config->get_cfg_value("enableSnapshots") == "true"){
$this->snapHandler = new SnapshotHandler($this->config);
}
+
+ // Check if we are able to communicate with the GOsa supprot daemon
+ if(class_available("gosaSupportDaemon")){
+ $o = new gosaSupportDaemon();
+ $this->si_active = $o->connect() && class_available("DaemonEvent");
+ }
+
+ // Check if we are able to communicate with the GOsa supprot daemon
+ if(class_available("opsi")){
+ $this->opsi = new opsi($this->config);
+ }
+
+
parent::__construct($config, $ui, "systems", $headpage);
}
+ /*! \brief Handle GOsa-si events
+ * All events are handled here.
+ */
+ function handleEvent($action="",$target=array(),$all=array())
+ {
+ // Detect whether this event is scheduled or triggered.
+ $triggered = TRUE;
+ if(preg_match("/^S_/",$action)){
+ $triggered = FALSE;
+ }
+
+ // Detect triggere or scheduled actions
+ $headpage = $this->getHeadpage();
+ if(preg_match("/^[TS]_/", $action)){
+
+ // Send special reinstall action for opsi hosts
+ $event = preg_replace("/^[TS]_/","",$action);
+ if($event == "DaemonEvent_reinstall" && $this->si_active && $this->opsi){
+ foreach($target as $key => $dn){
+ $type = $headpage->getType($dn);
+
+ // Send Reinstall event for opsi hosts
+ if($type == "FAKE_OC_OpsiHost"){
+ $obj = $headpage->getEntry($dn);
+ $this->opsi->job_opsi_install_client($obj['cn'][0],$obj['macAddress'][0]);
+ unset($target[$key]);
+ }
+ }
+ }
+ }
+
+ // Now send remaining FAI/GOsa-si events here.
+ if(count($target) && $this->si_active){
+ $mac= array();
+
+ // Collect target mac addresses
+ $ldap = $this->config->get_ldap_link();
+ $tD = $this->getObjectDefinitions();
+ $events = DaemonEvent::get_event_types(SYSTEM_EVENT);
+ $o_queue = new gosaSupportDaemon();
+ foreach($target as $dn){
+ $type = $headpage->getType($dn);
+ if($tD[$type]['sendEvents']){
+ $obj = $headpage->getEntry($dn);
+ if(isset($obj['macAddress'][0])){
+ $mac[] = $obj['macAddress'][0];
+ }
+ }
+ }
+
+ /* Skip installation or update trigerred events,
+ * if this entry is currently processing.
+ */
+ if($triggered && in_array($event,array("DaemonEvent_reinstall","DaemonEvent_update"))){
+ foreach($mac as $key => $mac_address){
+ foreach($o_queue->get_entries_by_mac(array($mac_address)) as $entry){
+ $entry['STATUS'] = strtoupper($entry['STATUS']);
+ if($entry['STATUS'] == "PROCESSING" &&
+ isset($events['QUEUED'][$entry['HEADERTAG']]) &&
+ in_array($events['QUEUED'][$entry['HEADERTAG']],array("DaemonEvent_reinstall","DaemonEvent_update"))){
+ unset($mac[$key]);
+
+ new log("security","systems/".get_class($this),"",array(),"Skip adding 'DaemonEvent::".$type."' for mac '".$mac_address."', there is already a job in progress.");
+ break;
+ }
+ }
+ }
+ }
+
+ // Prepare event to be added
+ if(count($mac) && isset($events['BY_CLASS'][$event]) && $this->si_active){
+ $event = $events['BY_CLASS'][$event];
+ $this->dialogObject = new $event['CLASS_NAME']($this->config);
+ $this->dialogObject->add_targets($mac);
+
+ if($triggered){
+ $this->dialogObject->set_type(TRIGGERED_EVENT);
+ $o_queue->append($this->dialogObject);
+ if($o_queue->is_error()){
+ msg_dialog::display(_("Service infrastructure"),msgPool::siError($o_queue->get_error()),ERROR_DIALOG);
+ }else{
+ $this->closeDialogs();
+ }
+ }else{
+ $this->dialogObject->set_type(SCHEDULED_EVENT);
+ }
+ }
+ }
+
+ // Handle system activation
+ if($action == "DaemonEvent_activate"){
+ echo "Aktivieren!";
+ }
+ }
+
+
+ function saveEventDialog()
+ {
+ $o_queue = new gosaSupportDaemon();
+ $o_queue->append($this->dialogObject);
+ if($o_queue->is_error()){
+ msg_dialog::display(_("Service infrastructure"),msgPool::siError($o_queue->get_error()),ERROR_DIALOG);
+ }else{
+ $this->closeDialogs();
+ }
+
+ }
+
+
/*! \brief Update filter part for INCOMING.
* Allows us to search for "systemIncomingRDN".
*/
}
+ /*! \brief Detects actions/events send by the ui
+ * and the corresponding targets.
+ */
+ function detectPostActions()
+ {
+ $action= management::detectPostActions();
+ if(isset($_POST['abort_event_dialog'])) $action['action'] = "cancel";
+ if(isset($_POST['save_event_dialog'])) $action['action'] = "saveEvent";
+ return($action);
+ }
+
+
/*! \brief Overridden render method of class mangement.
* this allows us to add a release selection box.
*/
"tabClass" => "opsi_tabs",
"tabDesc" => "OPSITABS",
"aclClass" => "opsiGeneric",
+ "sendEvents" => TRUE,
"aclCategory" => "opsi"),
"goServer" => array(
"tabClass" => "servtabs",
"tabDesc" => "SERVTABS",
"aclClass" => "servgeneric",
+ "sendEvents" => TRUE,
"aclCategory" => "server"),
"gotoWorkstation" => array(
"tabClass" => "worktabs",
"tabDesc" => "WORKTABS",
"aclClass" => "workstation",
+ "sendEvents" => TRUE,
"aclCategory" => "workgeneric"),
"gotoTerminal" => array(
"ou" => get_ou('terminalRDN'),
"plugClass" => "termgeneric",
"tabClass" => "termtabs",
+ "sendEvents" => TRUE,
"tabDesc" => "TERMTABS",
"aclClass" => "terminal",
"aclCategory" => "termgeneric"),
"tabClass" => "printtabs",
"tabDesc" => "PRINTTABS",
"aclClass" => "printer",
+ "sendEvents" => FALSE,
"aclCategory" => "printgeneric"),
"FAKE_OC_NewDevice" => array(
"ou" => get_ou('systemIncomingRDN'),
"plugClass" => "termgeneric",
"tabClass" => "termtabs",
+ "sendEvents" => TRUE,
"tabDesc" => "TERMTABS",
"aclClass" => "terminal",
"aclCategory" => "termgeneric"),
"plugClass" => "phoneGeneric",
"tabClass" => "phonetabs",
"tabDesc" => "PHONETABS",
+ "sendEvents" => FALSE,
"aclClass" => "phone",
"aclCategory" => "phoneGeneric"),
"FAKE_OC_winstation" => array(
"ou" => get_winstations_ou(),
"plugClass" => "wingeneric",
+ "sendEvents" => TRUE,
"tabClass" => "wintabs",
"tabDesc" => "WINTABS",
"aclClass" => "wingeneric",
"ieee802Device" => array(
"ou" => get_ou('componentRDN'),
"plugClass" => "componentGeneric",
+ "sendEvents" => FALSE,
"tabClass" => "componenttabs",
"tabDesc" => "COMPONENTTABS",
"aclClass" => "componentGeneric",
diff --git a/gosa-plugins/systems/admin/systems/system-list.xml b/gosa-plugins/systems/admin/systems/system-list.xml
index 7bc9356094ad236f11b50cfc0c771da9e0b22805..20044b55e324135e21c3d58880ec6e5997345466 100644 (file)
<label>Trigger action</label>
<action>
- <name>DaemonEvent_halt</name>
+ <name>T_DaemonEvent_halt</name>
<depends>DaemonEvent_halt</depends>
<type>entry</type>
<image>images/lists/reload.png</image>
</action>
<action>
- <name>DaemonEvent_reboot</name>
+ <name>T_DaemonEvent_reboot</name>
<depends>DaemonEvent_reboot</depends>
<type>entry</type>
<image>images/lists/reload.png</image>
</action>
<action>
- <name>DaemonEvent_wakeup</name>
+ <name>T_DaemonEvent_wakeup</name>
<depends>DaemonEvent_wakeup</depends>
<type>entry</type>
<image>images/lists/on.png</image>
</action>
<action>
- <name>DaemonEvent_update</name>
+ <name>T_DaemonEvent_update</name>
<depends>DaemonEvent_update</depends>
<type>entry</type>
<image>plugins/goto/images/update.png</image>
</action>
<action>
- <name>DaemonEvent_lock</name>
+ <name>T_DaemonEvent_lock</name>
<depends>DaemonEvent_lock</depends>
<type>entry</type>
<image>images/lists/locked.png</image>
</action>
<action>
- <name>DaemonEvent_activate</name>
+ <name>T_DaemonEvent_activate</name>
<depends>DaemonEvent_activate</depends>
<type>entry</type>
<image>images/lists/unlocked.png</image>
</action>
<action>
- <name>DaemonEvent_reinstall</name>
+ <name>T_DaemonEvent_reinstall</name>
<depends>DaemonEvent_reinstall</depends>
<type>entry</type>
<image>plugins/goto/images/reinstall.png</image>
<label>Schedule action</label>
<action>
- <name>DaemonEvent_halt</name>
+ <name>S_DaemonEvent_halt</name>
<depends>DaemonEvent_halt</depends>
<type>entry</type>
<image>images/lists/off.png</image>
</action>
<action>
- <name>DaemonEvent_reboot</name>
+ <name>S_DaemonEvent_reboot</name>
<depends>DaemonEvent_reboot</depends>
<type>entry</type>
<image>images/lists/reload.png</image>
</action>
<action>
- <name>DaemonEvent_wakeup</name>
+ <name>S_DaemonEvent_wakeup</name>
<depends>DaemonEvent_wakeup</depends>
<type>entry</type>
<image>images/lists/on.png</image>
</action>
<action>
- <name>DaemonEvent_update</name>
+ <name>S_DaemonEvent_update</name>
<depends>DaemonEvent_update</depends>
<type>entry</type>
<image>plugins/goto/images/update.png</image>
</action>
<action>
- <name>DaemonEvent_lock</name>
+ <name>S_DaemonEvent_lock</name>
<depends>DaemonEvent_lock</depends>
<type>entry</type>
<image>images/lists/locked.png</image>
</action>
<action>
- <name>DaemonEvent_activate</name>
+ <name>S_DaemonEvent_activate</name>
<depends>DaemonEvent_activate</depends>
<type>entry</type>
<image>images/lists/unlocked.png</image>
</action>
<action>
- <name>DaemonEvent_reinstall</name>
+ <name>S_DaemonEvent_reinstall</name>
<depends>DaemonEvent_reinstall</depends>
<type>entry</type>
<image>plugins/goto/images/reinstall.png</image>
</action>
<action>
- <name>activate_systems</name>
+ <name>DaemonEvent_activate</name>
<depends>DaemonEvent_activate</depends>
<type>entry</type>
<image>images/lists/unlocked.png</image>