Hallo zusammen,
bin heute über ein Phänomen gestolpert, das ich zwar replizieren kann, aber keine Lösung dafür gefunden habe.
Hole Daten aus MySQL und stelle diese mit HC dar. Unter den MySQL-Feldern ist auch ein Textfeld (Bemerkung) mit Text welches ich nur in den ToolTipps anzeige. Das funktioniert so weit auch.
So, und jetzt kommts:
wenn aber das besagte Textfeld am ersten (die anderen sind egal) im Zeitraum festgelegten, anzuzeigenden Tag nicht NULL ist, dann wird mir der komplette Chart nicht angezeigt.
Hatte erst den Verdacht, dass es an den Tooltipps liegt. Aber auch wenn ich die komplett raus nehme gehts nicht.
Hat irgend wer schon mal so was gehabt oder einen Tipp für mich?
<?php
// ConfigScript für $version = "2.02"; $versionDate = "20.05.2012";
// bei der Konfiguration unbedingt auf die Groß/Kleinschreibung achten
// es wurde versucht folgende Namensgebeung in der Konfiguration zu verwenden
// Parameter mit kleinen Anfangsbuchstaben = Parameter welche von Highcharts übnernommen wurden. Siehe dazu: http://www.highcharts.com/ref/
// Parameter mit großen Anfangsbuchstaben = für das IPS-Highcharts-Script eingeführte Parameter
Global $CfgDaten; // damit kann der Script auch von anderen Scripten aufgerufen werden und bereits mit CfgDaten vorkonfiguriert werden
// IPS Variablen ID´s
$CfgDaten['ContentVarableId']= 54335 /*[System\Pingdom Analysis\Eigene\HC\Chart PingDomDaten]*/ ; // ID der String Variable in welche die Daten geschrieben werden (-1 oder überhaupt nicht angeben wenn die Content Variable das übergordnete Element ist)
$CfgDaten['HighChartScriptId']= 37577 /*[HighCharts\Highcharts_V2.02.ips]*/ ; //"altes" eigenes // ID des Highcharts Scripts
//$CfgDaten['HighChartScriptId']= 47643 /*[Program\IPSLibrary\app\modules\Charts\IPSHighcharts\IPSHighcharts]*/ ; //neues 203 aus der Librarys
// Highcharts oder Highstock (default = Highcharts
$CfgDaten['Ips']['ChartType'] = 'Highcharts';
// Zeitraum welcher dargestellt werden soll (kann durch die Zeitvorgaben in den Serien verändert werden)
// Zeitraum via Selector im WF nach: http://www.ip-symcon.de/forum/f53/highcharts-multigraph-17625/index3.html#post126538
$ZeitRaum = getvalue(29323 /*[System\Pingdom Analysis\Eigene\HC\Downtimes\Zeitraum\Zeitraum]*/ );
Switch ($ZeitRaum) {
Case 0:
Case 1:
$AggType = 0;
Break;
Case 7:
Case 30:
$AggType = 1;
Break;
Case 365:
Case 90:
Case 180:
$AggType = 3;
Break;
Default:
$AggType = 0;
};
If ($ZeitRaum == 0) {$ZeitRaum = (8/24);};
$EndPunkt = GetValue(41200 /*[System\Pingdom Analysis\Eigene\HC\Downtimes\Zeitraum\Endpunkt]*/ );
//echo $EndPunkt."
";
$CfgDaten["EndTime"] = time() + 60 * 60 * 24 * $ZeitRaum * $EndPunkt;
$CfgDaten["StartTime"] = $CfgDaten["EndTime"] - 60 * 60 * 24 * $ZeitRaum; //604800 = 1 Woche
//Print_r($CfgDaten["EndTime"]." - ".$CfgDaten["StartTime"]."
");
$SQLStart = "'".date("Y-m-d H:i:s",$CfgDaten["StartTime"])."'";
$SQLEnd = "'".date("Y-m-d H:i:s",$CfgDaten["EndTime"])."'";
//Print_r($SQLStart." - ".$SQLEnd);
If ($CfgDaten["EndTime"]>time())
{echo "Zeitauswahl liegt zumindest mit einem Datum in der Zukunft. Bitte wählen Sie einen Zeitraum in der Vergangenheit.";
exit();}
// damit wird die Art des Aufrufes festgelegt
$CfgDaten['RunMode'] = "script"; // file, script, popup
// MySQL DB-Daten:
$MySQLConn=mysql_connect($MySQLIP.$MySQLPort, $MySQLAdmin, $MySQLAdminPW);
$db = $IPS_DB;
$SQLTable1 = $TBL_Sys_PingDomSumPerformance;
//$SQLTable2 = $TBL_Wetter_Internet; // Stundenwerte
$db_selected = mysql_select_db($db, $MySQLConn);
//------------------------------------------------------------------------------
// MySQL Daten holen
$sql_Ergebnis = mysql_query("SELECT DateX, uptime, downtime, avgresponse, Bemerkung
FROM " . $SQLTable1 ."
WHERE DateX >= ".$SQLStart." AND DateX <= ".$SQLEnd."
ORDER BY DateX;")
OR die("'".$sql_Ergebnis."':".mysql_error());
//$data = mysql_fetch_array($sql_Ergebnis, MYSQL_ASSOC); // wenn die Zeile aktiviert wird, beginnt der TimeStamp einen Tag später. ?? warum?? nicht gelöst.
$i = 0;
while($data = mysql_fetch_array($sql_Ergebnis, MYSQL_ASSOC))
{
$SommerZeit = "";
$SommerZeit= date("I",strtotime($data['DateX']));
//echo $SommerZeit."
";
if ($SommerZeit==1)
{$SommerZeit = 60;}
//else {$Sommerzeit = 120;}
// $DataForDownTime[] = array("Value"=>strtotime($data['DownTime'])+7200, "TimeStamp"=>strtotime($data['DateX']), "TimeStampHuman"=>$data['DateX']);
// $DataForDownTime[] = array("Value"=>mktime(0,($data['sum(DownTime)']/100)+60,0,0,0,0), "ValueHuman"=>($data['sum(DownTime)']/100), "TimeStamp"=>strtotime($data['date']), "TimeStampHuman"=>$data['date']);
// $DataForDownTime[] = array("Value"=>strtotime(date('Y-m-d H:i:s',strtotime($data['downtime']))), "ValueHuman1"=>$data['downtime'], "ValueHuman"=>date('Y-m-d H:i:s',strtotime($data['downtime'])), "TimeStamp"=>strtotime($data['date']), "TimeStampHuman"=>$data['date']);
$DataForDownTime[] = array("Value"=>round(substr($data['downtime'],0,2)*1+substr($data['downtime'],3,2)/60 ,2), "ValueHuman"=>substr($data['downtime'],0,5), "Bemerkung"=>$data['Bemerkung'], "TimeStamp"=>strtotime($data['DateX']), "TimeStampHuman"=>$data['DateX']);
$DataForDownTimeBemerkung[] = array("Value"=>$data['Bemerkung'], "ValueHuman"=>$data['Bemerkung'], "TimeStamp"=>strtotime($data['DateX']));
// $DataForUpTime[] = array("Value"=>86400 - strtotime($data['downtime']) - 7200, "ValueHuman"=>date('Y-m-d H:i:s',strtotime('2013-05-24') - strtotime(date('H:i:s',strtotime($data['downtime'])))-3600), "TimeStamp"=>strtotime($data['date']), "TimeStampHuman"=>$data['date']);
$DataForUpTimeProz[] = array("Value"=>round(100 -(100*(substr($data['downtime'],0,2)*60
+substr($data['downtime'],3,2))/1440), 2),
"ValueHuman"=>round(100 -(100*(substr($data['downtime'],0,2)*60
+substr($data['downtime'],3,2))/1440), 2),
"TimeStamp"=>strtotime($data['DateX']),
"TimeStampHuman"=>$data['DateX']);
}
$i++;
//print_r($DataForDownTime);
//print_r($DataForUpTime);
//print_r($DataForUpTimeProz);
//print_r($DataForDownTimeText);
/*print_r("Datum ".$DataForDownTime[18]['TimeStampHuman']."
".
"DownTime ValueHuman1 ".$DataForDownTime[18]['ValueHuman1']."
".
"DownTime Value ".$DataForDownTime[18]['Value']."
");
*/
//print_r("DownH-M ".(substr($DataForDownTime[18]['ValueHuman1'],0,2)*60)."
");
#print_r("DownM-M ".(substr($DataForDownTime[18]['ValueHuman1'],3,2))."
");
/*print_r("DownMin ".(round(100 -(100*(substr($DataForDownTime[18]['ValueHuman1'],0,2)*60
+substr($DataForDownTime[18]['ValueHuman1'],3,2))/1440), 2))."
");
*/
//print_r("Datum ".$DataForUpTime[6]['TimeStampHuman']."
UPTime ValueHuman ".$DataForUpTime[6]['ValueHuman']."
UPTime Value ".$DataForUpTime[6]['Value']."
");
//print_r($DataForDownTimeBemerkung);
//------------------------------------------------------------------------------
//MySQL Verbindung beenden
mysql_close($MySQLConn);
//print_r(mysql_num_rows($sql_Ergebnis));
if (mysql_num_rows($sql_Ergebnis)>1000)
{echo "Im gewählten Zeitraum sind zu viele Daten. Bitte wählen Sie einen kleineren Zeitraum.";
exit();}
if (empty($DataForDownTime) or empty($DataForDownTime))
{echo "Zeitauswahl ausserhalb des geloggten Bereichs. Bitte wählen Sie einen zeitnaheren Bereich.";
exit();}
// **************************************************************************************
// *** PlotOptions *** http://www.highcharts.com/ref/#plotoptions
// **************************************************************************************
$CfgDaten['plotOptions']['series']['lineWidth'] = 2;
$CfgDaten['plotOptions']['series']['states']['hover']['lineWidth'] = 2;
$CfgDaten['plotOptions']['series']['marker']['symbol'] = 'circle';
$CfgDaten['plotOptions']['series']['marker']['enabled'] = true;
$CfgDaten['plotOptions']['series']['marker']['states']['hover']['radius'] = 5;
$CfgDaten['plotOptions']['series']['marker']['states']['hover']['lineWidth'] = 2;
$CfgDaten['plotOptions']['series']['marker']['states']['hover']['enabled'] = true;
// Serienübergreifende Einstellung für das Laden von Werten
$CfgDaten['AggregatedValues']['HourValues'] = -1; // ist der Zeitraum größer als X Tage werden Stundenwerte geladen
$CfgDaten['AggregatedValues']['DayValues'] = -1; // ist der Zeitraum größer als X Tage werden Tageswerte geladen
$CfgDaten['AggregatedValues']['WeekValues'] = -1; // ist der Zeitraum größer als X Tage werden Wochenwerte geladen
$CfgDaten['AggregatedValues']['MonthValues'] = -1; // ist der Zeitraum größer als X Tage werden Monatswerte geladen
$CfgDaten['AggregatedValues']['YearValues'] = -1; // ist der Zeitraum größer als X Tage werden Jahreswerte geladen
$CfgDaten['AggregatedValues']['NoLoggedValues'] = 1000; // ist der Zeitraum größer als X Tage werden keine Boolean Werte mehr geladen, diese werden zuvor immer als Einzelwerte geladen $CfgDaten['AggregatedValues']['MixedMode'] = false; // alle Zeitraumbedingungen werden kombiniert
$CfgDaten['AggregatedValues']['MixedMode'] = true;
// **************************************************************************************
// *** Highcharts Options ***
// **************************************************************************************
// Ab hier werden die Bereiche des Highchart-Objektes parametriert.
// Dieser Bereich wurde (soweit möglich) identisch der Originalstruktur gehalten.
// Informationen über die Parametrierung findet man unter http://www.highcharts.com/ref/
// **************************************************************************************
// *** chart *** http://www.highcharts.com/ref/#chart
// **************************************************************************************
// $CfgDaten['chart']['zoomType'] = "'x'"; //default: $CfgDaten['chart']['zoomType'] = "'xy'";
// **************************************************************************************
// *** credits *** siehe http://www.highcharts.com/ref/#credits
// **************************************************************************************
// $CfgDaten['credits']['text'] = "used by IPS";
// $CfgDaten['credits']['href'] = "http://www.ip-symcon.de/forum/f53/highcharts-multigraph-v1-0-a-17625/#post120721";
// **************************************************************************************
// *** title *** siehe http://www.highcharts.com/ref/#title
// **************************************************************************************
// $CfgDaten['title']['text'] = "Temperaturen Speicher";
// **************************************************************************************
// *** subtitle *** siehe http://www.highcharts.com/ref/#subtitle
// **************************************************************************************
$CfgDaten['subtitle']['text'] = "Zeitraum: %STARTTIME% - %ENDTIME%";
$CfgDaten['subtitle']['Ips']['DateTimeFormat'] = "D d.m.Y H:i";
// **************************************************************************************
// *** yAxis *** http://www.highcharts.com/ref/#yAxis
// **************************************************************************************
$CfgDaten['yAxis'][0]['title']['text'] = Null;
// $CfgDaten['yAxis'][0]['Unit'] = "Std";
$CfgDaten['yAxis'][0]['labels']="";
$CfgDaten['yAxis'][0]['max'] = 24;
$CfgDaten['yAxis'][0]['showLastLabel '] = false;
$CfgDaten['yAxis'][0]['showFirstLabel '] = false;
$CfgDaten['yAxis'][0]['endOnTick '] = false;
$CfgDaten['yAxis'][1]['title']['text'] = "UpTime";
$CfgDaten['yAxis'][1]['labels']['formatter'] = "@function() {return this.value + ' %'}@";
$CfgDaten['yAxis'][1]['showLastLabel '] = true;
$CfgDaten['yAxis'][1]['showFirstLabel '] = false;
$CfgDaten['yAxis'][1]['endOnTick '] = true;
$CfgDaten['yAxis'][1]['max'] = 100;
// **************************************************************************************
// *** series *** http://www.highcharts.com/ref/#series
// **************************************************************************************
$serie = array();
$serie['name'] = "Online";
$serie['visible'] = true;
$serie['Unit'] = "%";
// $serie['RoundValue'] = 1;
$serie['type'] = "spline";
$serie['color']= 'green';
$serie['lineColor'] = 'green';
$serie['marker']['enabled'] = false;
$serie['yAxis'] = 1;
$serie['Data'] = $DataForUpTimeProz;
$CfgDaten['series'][] = $serie;
$serie = array();
$serie['name'] = "Down";
$serie['visible'] = true ;
$serie['Unit'] = "Std";
// $serie['RoundValue'] = 1;
$serie['type'] = "spline";
$serie['color']= 'red';
$serie['lineColor'] = 'red';
$serie['marker']['enabled'] = false;
$serie['yAxis'] = 0;
$serie['Data'] = $DataForDownTime;
$CfgDaten['series'][] = $serie;
$serie = array();
$serie['name'] = "Bemerkung";
$serie['visible'] = true ;
$serie['showInLegend'] = false;
$serie['Unit'] = "";
$serie['type'] = "spline";
$serie['color']= 'blue';
$serie['lineColor'] = 'blue';
$serie['marker']['enabled'] = false;
$serie['yAxis'] = 0;
$serie['Data'] = $DataForDownTimeBemerkung;
$CfgDaten['series'][] = $serie;
// **************************************************************************
// *** xAxis *** http://www.highcharts.com/ref/#xAxis
// **************************************************************************
$CfgDaten['xAxis']['lineWidth'] = 0; //sind die horizontalen Begrenzungslinien oben und unten.
$CfgDaten['xAxis']['tickLength'] = 0; // ist die Länge der senkrechten Linien von der unteren horizontalen begrenzungslinie bis zur Beschriftung (label)
$CfgDaten['xAxis']['startOnTick'] = true;
$CfgDaten['xAxis']['showFirstLabel'] = true;
$CfgDaten['xAxis']['dateTimeLabelFormats']['day'] = '%d. %b';
//$CfgDaten['xAxis']['tickInterval'] = 24*3600*1000; // 1Tag x 24 Std. x 3600 sek x 1000ms
// **************************************************************************************
// *** tooltip *** http://www.highcharts.com/ref/#tooltip
// **************************************************************************************
$CfgDaten['tooltip']['useHTML'] = true;
$CfgDaten['tooltip']['shared'] = true;
$CfgDaten['tooltip']['crosshairs'][] = array('width' =>1,'color' =>'grey','dashStyle'=>'dashdot' );
$CfgDaten['tooltip']['formatter'] = "@function() {
var s;
var s = '<b>' + Highcharts.dateFormat('%a %d.%m.%Y', this.x) + '</b>';
s += '<table cellspacing=\"0\" cellpadding=\"0\" cellpadding=\"0\">';
$.each(this.points, function(i, point)
{var unit = {
'".@$CfgDaten['series'][0]['name']."': '"." ".@$CfgDaten['series'][0]['Unit']."',
'".@$CfgDaten['series'][1]['name']."': '"." ".@$CfgDaten['series'][1]['Unit']."',
'".@$CfgDaten['series'][2]['name']."': '"." ".@$CfgDaten['series'][2]['Unit']."',
}[point.series.name];
var colorX = {
'".@$CfgDaten['series'][0]['name']."': '".@$CfgDaten['series'][0]['lineColor']."',
'".@$CfgDaten['series'][1]['name']."': '".@$CfgDaten['series'][1]['lineColor']."',
'".@$CfgDaten['series'][2]['name']."': '".@$CfgDaten['series'][2]['lineColor']."',
}[point.series.name];
s += '<td align=".'right'." colspan= 0><span style=color:' + colorX + '>' + this.series.name + ': </span></td>
<td align=".'right'."><b><span style=color:' + colorX + '>' + ' ' + this.point.ValueHuman + ' ' +'</b></span></td>
<td><b><span style=color:' + colorX + '>' + ' ' + unit + '</b></span></td>';
s += '</tr>';
});
s += '</table>';
return s;
}@";
// Highcharts-Theme
// $CfgDaten['HighChart']['Theme']="grid.js"; // von Highcharts mitgeliefert: dark-green.js, dark-blue.js, gray.js, grid.js
$CfgDaten['HighChart']['Theme']="ips.js"; // IPS-Theme muss per Hand in in Themes kopiert werden....
// Abmessungen des erzeugten Charts
$CfgDaten['HighChart']['Width'] = 0; // in px, 0 = 100%
$CfgDaten['HighChart']['Height'] = 300; // in px
// -------------------------------------------------------------------------------------------------------------------------------------
// und jetzt los ......
$s = IPS_GetScript($CfgDaten['HighChartScriptId']); // Id des Highcharts-Scripts
include($s['ScriptFile']);
// hier werden die CfgDaten geprüft und bei Bedarf vervollständigt
$CfgDaten = CheckCfgDaten($CfgDaten);
// abhängig von der Art des Aufrufs -> json String für Highcharts erzeugen
if (isset($CfgDaten['RunMode'])
&& ($CfgDaten['RunMode'] == "script" || $CfgDaten['RunMode'] == "popup"))
{
// Variante1: Übergabe der ScriptId. Daten werden beim Aufruf der PHP Seite erzeugt und direkt übergeben. Dadurch kann eine autom. Aktualisierung der Anzeige erfolgen
if ($IPS_SENDER != "WebInterface")
{
WriteContentWithScriptId ($CfgDaten, $IPS_SELF); // und jetzt noch die ContentTextbox
return; // Ende, weil durch die Zuweisung des Script sowieso nochmals aufgerufen wird
}
$sConfig = CreateConfigString($CfgDaten); // erzeugen und zurückgeben des Config Strings
}
else
{
//Variante2: Übergabe des Textfiles. Daten werden in tmp-File gespeichert. Eine automatische Aktualisierung beim Anzeigen der Content-Textbox erfolgt nicht
$sConfig = CreateConfigString($CfgDaten); // erzeugen und zurückgeben des Config Strings
$tmpFilename = CreateConfigFile($sConfig, $IPS_SELF); // und ab damit ins tmp-Files
if ($IPS_SENDER != "WebInterface")
{
WriteContentWithFilename ($CfgDaten, $tmpFilename); // und jetzt noch die ContentTextbox
}
}
?>