瀏覽代碼

Synchro Data Sources Implementation on going...

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@1098 a333f486-631f-4898-b8df-5754b55c2be0
dflaven 14 年之前
父節點
當前提交
23abd89af8
共有 2 個文件被更改,包括 92 次插入52 次删除
  1. 16 16
      dictionaries/dictionary.itop.core.php
  2. 76 36
      synchro/synchrodatasource.class.inc.php

+ 16 - 16
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',
 ));
 ?>

+ 76 - 36
synchro/synchrodatasource.class.inc.php

@@ -176,39 +176,47 @@ class SynchroDataSource extends cmdbAbstractObject
 			}
 
 			$oPage->add('<table class="synoptics"><tr><td style="color:#333;vertical-align:top">');
+
+			// List all the log entries for the user to select
 			$oPage->add('<h2>'.Dict::S('Core:Synchro:History').'</h2>');
 			$oSetSynchroLog->Rewind();
-			$oPage->add('<select size="30">');
+			$oPage->add('<select size="25" onChange="UpdateSynoptics(this.value);">');
 			$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('<option value="'.$oLog->GetKey().'"'.$sSelected.'>'.$sLogTitle.'</option>');
-				$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 .= <<<EOF
+	function UpdateSynoptics(id)
+	{
+		var aValues = aSynchroLog[id];
+		
+		for (var sKey in aValues)
+		{
+			$('#c_'+sKey).html(aValues[sKey]);
+			var fOpacity = (aValues[sKey] == 0) ? 0.3 : 1;
+			$('#'+sKey).fadeTo("slow", fOpacity);
+		}
+	}
+EOF
+;
+			$oPage->add_script($sScript);
 			$oPage->add('</select>');
+			
 			$oPage->add('</td><td style="vertical-align:top;">');
-			$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;
-
-			$iNbObjects = $iNew + $iExisting + $iDisappeared;
-			$iReplicas = $iNbObjects + $iIgnored;
-			$sNbReplica = Dict::Format('Core:Synchro:Nb_Replica', "<span id=\"nb_replica_total\">$iReplicas</span>");
-			$sNbObjects = Dict::Format('Core:Synchro:Nb_Objects', "<span id=\"nb_obj_total\">$iNbObjects</span>");
+			
+			// Now build the big "synoptics" view
+			$aData = $this->ProcessLog($oLastLog);
+
+			$sNbReplica = $this->GetIcon()."&nbsp;".Dict::Format('Core:Synchro:Nb_Replica', "<span id=\"c_nb_replica_total\">{$aData['nb_replica_total']}</span>");
+			$sNbObjects = MetaModel::GetClassIcon($this->GetTargetClass())."&nbsp;".Dict::Format('Core:Synchro:Nb_Class:Objects', $this->GetTargetClass(), "<span id=\"c_nb_obj_total\">{$aData['nb_obj_total']}</span>");
 			$oPage->add(
 <<<EOF
 	<table class="synoptics">
@@ -218,27 +226,27 @@ class SynchroDataSource extends cmdbAbstractObject
 	<tr>
 EOF
 );
-			$oPage->add($this->HtmlBox('repl_ignored', $iIgnored, '#999').'<td colspan="2">&nbsp;</td>');
+			$oPage->add($this->HtmlBox('repl_ignored', $aData, '#999').'<td colspan="2">&nbsp;</td>');
 			$oPage->add("</tr>\n<tr>");
-			$oPage->add($this->HtmlBox('repl_disappeared', $iDisappeared, '#630', 'rowspan="3"').'<td rowspan="3" class="arrow">=&gt;</td>'.$this->HtmlBox('obj_deleted', $iDeleted, '#000'));
+			$oPage->add($this->HtmlBox('repl_disappeared', $aData, '#630', 'rowspan="3"').'<td rowspan="3" class="arrow">=&gt;</td>'.$this->HtmlBox('obj_deleted', $aData, '#000'));
 			$oPage->add("</tr>\n<tr>");
-			$oPage->add($this->HtmlBox('obj_obsoleted', $iDisappeared, '#630'));
+			$oPage->add($this->HtmlBox('obj_obsoleted', $aData, '#630'));
 			$oPage->add("</tr>\n<tr>");
-			$oPage->add($this->HtmlBox('obj_disappeared_errors', $iDisappearedErrors, '#C00'));
+			$oPage->add($this->HtmlBox('obj_disappeared_errors', $aData, '#C00'));
 			$oPage->add("</tr>\n<tr>");
-			$oPage->add($this->HtmlBox('repl_existing', $iExisting, '#093', 'rowspan="3"').'<td rowspan="3" class="arrow">=&gt;</td>'.$this->HtmlBox('obj_unchanged', $iUnchanged, '#393'));
+			$oPage->add($this->HtmlBox('repl_existing', $aData, '#093', 'rowspan="3"').'<td rowspan="3" class="arrow">=&gt;</td>'.$this->HtmlBox('obj_unchanged', $aData, '#393'));
 			$oPage->add("</tr>\n<tr>");
-			$oPage->add($this->HtmlBox('obj_updated', $iUpdated, '#3C3'));
+			$oPage->add($this->HtmlBox('obj_updated', $aData, '#3C3'));
 			$oPage->add("</tr>\n<tr>");
-			$oPage->add($this->HtmlBox('obj_updated_errors', $iUpdatedErrors, '#C00'));
+			$oPage->add($this->HtmlBox('obj_updated_errors', $aData, '#C00'));
 			$oPage->add("</tr>\n<tr>");
-			$oPage->add($this->HtmlBox('repl_new', $iNew, '#339', 'rowspan="4"').'<td rowspan="4" class="arrow">=&gt;</td>'.$this->HtmlBox('obj_new_unchanged', $iNewUnchanged, '#393'));
+			$oPage->add($this->HtmlBox('repl_new', $aData, '#339', 'rowspan="4"').'<td rowspan="4" class="arrow">=&gt;</td>'.$this->HtmlBox('obj_new_unchanged', $aData, '#393'));
 			$oPage->add("</tr>\n<tr>");
-			$oPage->add($this->HtmlBox('obj_new_updated', $iNewUpdated, '#3C3'));
+			$oPage->add($this->HtmlBox('obj_new_updated', $aData, '#3C3'));
 			$oPage->add("</tr>\n<tr>");
-			$oPage->add($this->HtmlBox('obj_created', $iCreated, '#339'));
+			$oPage->add($this->HtmlBox('obj_created', $aData, '#339'));
 			$oPage->add("</tr>\n<tr>");
-			$oPage->add($this->HtmlBox('obj_new_errors', $iNewErrors, '#C00'));
+			$oPage->add($this->HtmlBox('obj_new_errors', $aData, '#C00'));
 			$oPage->add("</tr>\n</table>\n");
 			$oPage->add('</td></tr></table>');
 		}
@@ -248,13 +256,45 @@ EOF
 		}
 	}
 	
-	public function HtmlBox($sId, $iCount, $sColor, $sHTMLAttribs = '')
+	protected function HtmlBox($sId, $aData, $sColor, $sHTMLAttribs = '')
 	{
+		$iCount = $aData[$sId];
 		$sCount = "<span id=\"c_{$sId}\">$iCount</span>";
-		$sLabel = Dict::Format('Core:Synchro:label_'.$sId, $iCount);
+		$sLabel = Dict::Format('Core:Synchro:label_'.$sId, $sCount);
 		$sOpacity = ($iCount==0) ? "opacity:0.3;" : "";
 		return "<td id=\"$sId\" style=\"background-color:$sColor;$sOpacity;\" {$sHTMLAttribs}>$sLabel</td>";
 	}
+	
+	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()))