diff --git a/dictionaries/dictionary.itop.core.php b/dictionaries/dictionary.itop.core.php index 1cd8af296..dddbfb3f4 100644 --- a/dictionaries/dictionary.itop.core.php +++ b/dictionaries/dictionary.itop.core.php @@ -518,23 +518,23 @@ Dict::Add('EN US', 'English', 'English', array( 'Core:Synchro:SynchroRunningStartedOn_Date' => 'The synchronization started on $1$s is still running...', 'Menu:DataSources' => 'Synchronization Data Sources', 'Menu:DataSources+' => 'All Synchronization Data Sources', - 'Core:Synchro:label_repl_ignored' => 'Ignored (%1$d)', - 'Core:Synchro:label_repl_disappeared' => 'Disappeared (%1$d)', - 'Core:Synchro:label_repl_existing' => 'Existing (%1$d)', - 'Core:Synchro:label_repl_new' => 'New (%1$d)', - 'Core:Synchro:label_obj_deleted' => 'Deleted (%1$d)', - 'Core:Synchro:label_obj_obsoleted' => 'Obsoleted (%1$d)', - 'Core:Synchro:label_obj_disappeared_errors' => 'Errors (%1$d)', - 'Core:Synchro:label_obj_unchanged' => 'Unchanged (%1$d)', - 'Core:Synchro:label_obj_updated' => 'Updated (%1$d)', - 'Core:Synchro:label_obj_updated_errors' => 'Errors (%1$d)', - 'Core:Synchro:label_obj_new_unchanged' => 'Unchanged (%1$d)', - 'Core:Synchro:label_obj_new_updated' => 'Updated (%1$d)', - 'Core:Synchro:label_obj_created' => 'Created (%1$d)', - 'Core:Synchro:label_obj_new_errors' => 'Errors (%1$d)', + 'Core:Synchro:label_repl_ignored' => 'Ignored (%1$s)', + 'Core:Synchro:label_repl_disappeared' => 'Disappeared (%1$s)', + 'Core:Synchro:label_repl_existing' => 'Existing (%1$s)', + 'Core:Synchro:label_repl_new' => 'New (%1$s)', + 'Core:Synchro:label_obj_deleted' => 'Deleted (%1$s)', + 'Core:Synchro:label_obj_obsoleted' => 'Obsoleted (%1$s)', + 'Core:Synchro:label_obj_disappeared_errors' => 'Errors (%1$s)', + 'Core:Synchro:label_obj_unchanged' => 'Unchanged (%1$s)', + 'Core:Synchro:label_obj_updated' => 'Updated (%1$s)', + 'Core:Synchro:label_obj_updated_errors' => 'Errors (%1$s)', + 'Core:Synchro:label_obj_new_unchanged' => 'Unchanged (%1$s)', + 'Core:Synchro:label_obj_new_updated' => 'Updated (%1$s)', + 'Core:Synchro:label_obj_created' => 'Created (%1$s)', + 'Core:Synchro:label_obj_new_errors' => 'Errors (%1$s)', 'Core:Synchro:History' => 'Synchronization History', 'Core:SynchroLogTitle' => '%1$s - %2$s', - 'Core:Synchro:Nb_Replica' => '%1$s Replica', - 'Core:Synchro:Nb_Objects' => '%1$s Objects', + 'Core:Synchro:Nb_Replica' => 'Replica: %1$s', + 'Core:Synchro:Nb_Class:Objects' => '%1$s: %2$s', )); ?> diff --git a/synchro/synchrodatasource.class.inc.php b/synchro/synchrodatasource.class.inc.php index 6f2e71eaf..2aa3de2d7 100644 --- a/synchro/synchrodatasource.class.inc.php +++ b/synchro/synchrodatasource.class.inc.php @@ -176,39 +176,47 @@ class SynchroDataSource extends cmdbAbstractObject } $oPage->add(' EOF ); - $oPage->add($this->HtmlBox('repl_ignored', $iIgnored, '#999').''); + $oPage->add($this->HtmlBox('repl_ignored', $aData, '#999').''); $oPage->add("\n"); - $oPage->add($this->HtmlBox('repl_disappeared', $iDisappeared, '#630', 'rowspan="3"').''.$this->HtmlBox('obj_deleted', $iDeleted, '#000')); + $oPage->add($this->HtmlBox('repl_disappeared', $aData, '#630', 'rowspan="3"').''.$this->HtmlBox('obj_deleted', $aData, '#000')); $oPage->add("\n"); - $oPage->add($this->HtmlBox('obj_obsoleted', $iDisappeared, '#630')); + $oPage->add($this->HtmlBox('obj_obsoleted', $aData, '#630')); $oPage->add("\n"); - $oPage->add($this->HtmlBox('obj_disappeared_errors', $iDisappearedErrors, '#C00')); + $oPage->add($this->HtmlBox('obj_disappeared_errors', $aData, '#C00')); $oPage->add("\n"); - $oPage->add($this->HtmlBox('repl_existing', $iExisting, '#093', 'rowspan="3"').''.$this->HtmlBox('obj_unchanged', $iUnchanged, '#393')); + $oPage->add($this->HtmlBox('repl_existing', $aData, '#093', 'rowspan="3"').''.$this->HtmlBox('obj_unchanged', $aData, '#393')); $oPage->add("\n"); - $oPage->add($this->HtmlBox('obj_updated', $iUpdated, '#3C3')); + $oPage->add($this->HtmlBox('obj_updated', $aData, '#3C3')); $oPage->add("\n"); - $oPage->add($this->HtmlBox('obj_updated_errors', $iUpdatedErrors, '#C00')); + $oPage->add($this->HtmlBox('obj_updated_errors', $aData, '#C00')); $oPage->add("\n"); - $oPage->add($this->HtmlBox('repl_new', $iNew, '#339', 'rowspan="4"').''.$this->HtmlBox('obj_new_unchanged', $iNewUnchanged, '#393')); + $oPage->add($this->HtmlBox('repl_new', $aData, '#339', 'rowspan="4"').''.$this->HtmlBox('obj_new_unchanged', $aData, '#393')); $oPage->add("\n"); - $oPage->add($this->HtmlBox('obj_new_updated', $iNewUpdated, '#3C3')); + $oPage->add($this->HtmlBox('obj_new_updated', $aData, '#3C3')); $oPage->add("\n"); - $oPage->add($this->HtmlBox('obj_created', $iCreated, '#339')); + $oPage->add($this->HtmlBox('obj_created', $aData, '#339')); $oPage->add("\n"); - $oPage->add($this->HtmlBox('obj_new_errors', $iNewErrors, '#C00')); + $oPage->add($this->HtmlBox('obj_new_errors', $aData, '#C00')); $oPage->add("\n
'); + + // List all the log entries for the user to select $oPage->add('

'.Dict::S('Core:Synchro:History').'

'); $oSetSynchroLog->Rewind(); - $oPage->add(''); $sSelected = ' selected'; // First log is selected by default + $sScript = "var aSynchroLog = {\n"; while($oLog = $oSetSynchroLog->Fetch()) { $sLogTitle = Dict::Format('Core:SynchroLogTitle', $oLog->Get('status'), $oLog->Get('start_date')); $oPage->add(''); - $sSelected = ''; // only first log is selected by default + $sSelected = ''; // only the first log is selected by default + $aData = $this->ProcessLog($oLog); + $sScript .= '"'.$oLog->GetKey().'": '.json_encode($aData).",\n"; } + $sScript .= "end: 'Done'"; + $sScript .= "};\n"; + $sScript .= <<add_script($sScript); $oPage->add(''); + $oPage->add('
'); - $iDeleted = $oLastLog->Get('stats_nb_obj_deleted'); - $iObsoleted = $oLastLog->Get('stats_nb_obj_obsoleted'); - $iDisappearedErrors = $oLastLog->Get('stats_nb_obj_obsoleted_errors') + $oLastLog->Get('stats_nb_obj_deleted_errors'); - $iUpdated = $oLastLog->Get('stats_nb_obj_updated'); - $iUpdatedErrors = $oLastLog->Get('stats_nb_obj_updated_errors'); - $iNewUpdated = $oLastLog->Get('stats_nb_obj_new_updated'); - $iNewUnchanged = $oLastLog->Get('stats_nb_obj_new_unchanged'); - $iReconciledErrors = $oLastLog->Get('stats_nb_replica_reconciled_errors'); - $iCreated = $oLastLog->Get('stats_nb_obj_created'); - $iCreatedErrors = $oLastLog->Get('stats_nb_obj_created_errors'); - $iDisappeared = $iDisappearedErrors + $iObsoleted + $iDeleted; - $iNewErrors = $iCreatedErrors + $iReconciledErrors; - $iNew = $iCreated + $iCreatedErrors + $iNewUpdated + $iNewUnchanged + $iReconciledErrors; - $iExisting = $oLastLog->Get('stats_nb_replica_seen') - $iNew; - $iUnchanged = $iExisting - $iUpdated - $iUpdatedErrors; - $iIgnored = $oLastLog->Get('stats_nb_replica_total') - $iNew - $iExisting - $iDisappeared; + + // Now build the big "synoptics" view + $aData = $this->ProcessLog($oLastLog); - $iNbObjects = $iNew + $iExisting + $iDisappeared; - $iReplicas = $iNbObjects + $iIgnored; - $sNbReplica = Dict::Format('Core:Synchro:Nb_Replica', "$iReplicas"); - $sNbObjects = Dict::Format('Core:Synchro:Nb_Objects', "$iNbObjects"); + $sNbReplica = $this->GetIcon()." ".Dict::Format('Core:Synchro:Nb_Replica', "{$aData['nb_replica_total']}"); + $sNbObjects = MetaModel::GetClassIcon($this->GetTargetClass())." ".Dict::Format('Core:Synchro:Nb_Class:Objects', $this->GetTargetClass(), "{$aData['nb_obj_total']}"); $oPage->add( << @@ -218,27 +226,27 @@ class SynchroDataSource extends cmdbAbstractObject
  
=>=>
=>=>
=>=>
\n"); $oPage->add(''); } @@ -248,13 +256,45 @@ EOF } } - public function HtmlBox($sId, $iCount, $sColor, $sHTMLAttribs = '') + protected function HtmlBox($sId, $aData, $sColor, $sHTMLAttribs = '') { + $iCount = $aData[$sId]; $sCount = "$iCount"; - $sLabel = Dict::Format('Core:Synchro:label_'.$sId, $iCount); + $sLabel = Dict::Format('Core:Synchro:label_'.$sId, $sCount); $sOpacity = ($iCount==0) ? "opacity:0.3;" : ""; return "$sLabel"; } + + protected function ProcessLog($oLastLog) + { + $aData = array( + 'obj_deleted' => $oLastLog->Get('stats_nb_obj_deleted'), + 'obj_obsoleted' => $oLastLog->Get('stats_nb_obj_obsoleted'), + 'obj_disappeared_errors' => $oLastLog->Get('stats_nb_obj_obsoleted_errors') + $oLastLog->Get('stats_nb_obj_deleted_errors'), + 'obj_updated' => $oLastLog->Get('stats_nb_obj_updated'), + 'obj_updated_errors' => $oLastLog->Get('stats_nb_obj_updated_errors'), + 'obj_new_updated' => $oLastLog->Get('stats_nb_obj_new_updated'), + 'obj_new_unchanged' => $oLastLog->Get('stats_nb_obj_new_unchanged'), + 'obj_created' => $oLastLog->Get('stats_nb_obj_created'), + 'obj_created_errors' => $oLastLog->Get('stats_nb_obj_created_errors'), + ); + $iReconciledErrors = $oLastLog->Get('stats_nb_replica_reconciled_errors'); + $iDisappeared = $aData['obj_disappeared_errors'] + $aData['obj_obsoleted'] + $aData['obj_deleted']; + $aData['repl_disappeared'] = $iDisappeared; + $iNewErrors = $aData['obj_created_errors'] + $oLastLog->Get('stats_nb_replica_reconciled_errors'); + $aData['obj_new_errors'] = $iNewErrors; + $iNew = $aData['obj_created'] + $iNewErrors + $aData['obj_new_updated'] + $aData['obj_new_unchanged']; + $aData['repl_new'] = $iNew; + $iExisting = $oLastLog->Get('stats_nb_replica_seen') - $iNew; + $aData['repl_existing'] = $iExisting; + $aData['obj_unchanged'] = $iExisting - $aData['obj_updated'] - $aData['obj_updated_errors']; + $iIgnored = $oLastLog->Get('stats_nb_replica_total') - $iNew - $iExisting - $iDisappeared; + $aData['repl_ignored'] = $iIgnored; + $aData['nb_obj_total'] = $iNew + $iExisting + $iDisappeared; + $aData['nb_replica_total'] = $aData['nb_obj_total'] + $iIgnored; + return $aData; + } + public function GetAttributeFlags($sAttCode) { if (($sAttCode == 'scope_class') && (!$this->IsNew()))