Jump to content

Einzelverbindungsinformationen in Datenbank (CDR) Maximale Kanäle


Adrian85

Recommended Posts

Hallo Zusammen,

 

Ich möchte gerne wissen ob ich aus der CDR Datenbank die Maximale gleichzeitige Genutze Kanäle in einem Zeitraum gebraucht habe herauslesen kann?

Ich zeiche seti 6 Jahren dir CDR auf.

 

Hat jemanden eine SQL Query die dies hervoheben kann?

 

Freundliche Grüsse

Adrian

 

Link to comment
Share on other sites


  • 1 month later...

Hallo Adrian,

 

grundsätzlich sind die Daten für eine solche Analyse vorhanden, da in den CDRs ja alle Verbindungen protokolliert werden. Ich habe allerdings Zweifel, dass man das mit einer einfachen SQL Abfrage hinbekommt. Man muss in regelmässigen zeitlichen Schritten (z.B. im Minuten Takt) die jeweilige Anzahl der externen Verbindungen ermitteln.

 

Wenn ich das zu implemtieren hätte würde ich mir eine zusätzliche Tabelle anlegen, in der ich pro Zeitraum die ermittelten belegten Kanäle speichere. Mit einem kleinen Skript würde ich in einer Schleife in Minuten-Schritten eine Abfrage gegen die CDR Datenbank starten.

 

Ich habe gerade keine solche Datenbank zur Hand (daher auch keine konkreten Feldnamen), aber granz grundsätzlich könnte eine solche in etwa so aussehen:

 

declare @start dateime
declare @end   datetime

set @start = '2016-08-21 15:24:00'
set @end   = '2016-08-21 15:24:49'

select
  count(*) as used_channels
from
  CDRs
where
  (
     left(calling_party_number, 1) = '+' or
     left(calling_party_number, 3) = 'sip'
  ) and
  call_started <= @end and
  call_ended >= @start

 

Wie gesagt, da müssen auf alle Fälle die Feldnamen angepasst werden.

 

Link to comment
Share on other sites


Hi Tom,

 

Ich hatte voll vergessen dass ich die Lösung hatte.

 

Aber hier mein weg.

 

PHP und SQL kombiniert.

 

<?PHP
header( 'Content-type: text/html; charset=utf-8' );
echo "<html><body>";
$start = microtime(true);
$startTime = strtotime( '2010-01-01 12:00' );
$endTime = strtotime( '2016-12-31 12:00' );
echo $startTime;
echo "<br/>";
echo $endTime;
echo "<br/>";
echo "<br/>";
			// DB Verbinden
			$hostname = "xxxx"; // SQL SERVERNAME/IP ADDRESS
			$user = "xxxx"; // SQL USERNAME
			$password = 'xxxxx'; // SQL PASSWORD
			$database = "CDR"; //DATABASENAME
			mssql_connect($hostname, $user, $password);
			mssql_select_db($database);


//echo "<table border=1 cellspacing=0 cellpadding=0 ><tr><td>Date</td><td>SQL</td><td>Max</td></tr>";
echo "<table border=1 cellspacing=0 cellpadding=0 ><tr><td>Date</td><td>Max</td></tr>";

// Loop between timestamps, 24 hours at a time
for ( $i = $startTime; $i <= $endTime; $i = $i + 86400 ) {
  $thisDate = date( 'Y-m-d', $i ); // 2015-05-01, 2010-05-02, etc
  
  $sql = "
  WITH C1 AS
(
  SELECT starttime AS ts, +1 AS TYPE,
    ROW_NUMBER() OVER(ORDER BY starttime) AS start_ordinal
  FROM IpPbxCDR
	where ((starttime between convert(datetime,'".$thisDate." 00:00:00', 120) and convert(datetime,'".$thisDate." 23:59:59', 120)))
	    AND (OriginationDevice <> '' OR DestinationDevice <> '')

  UNION ALL

  SELECT endtime, -1, NULL
  FROM IpPbxCDR
	where ((starttime between convert(datetime,'".$thisDate." 00:00:00', 120) and convert(datetime,'".$thisDate." 23:59:59', 120)))
		AND (OriginationDevice <> '' OR DestinationDevice <> '')

),
C2 AS
(
  SELECT *,
    ROW_NUMBER() OVER(  ORDER BY ts, TYPE) AS start_or_end_ordinal
  FROM C1
)
/*Select * from C2*/
SELECT MAX(2 * start_ordinal - start_or_end_ordinal) AS mx
FROM C2
WHERE TYPE = 1
 "; 
 
 $result = mssql_query($sql);
  //echo "<tr><td>".$thisDate."</td><td>".$sql."</td><td>";
  echo "<tr><td>".$thisDate."</td><td>";
  $value = mssql_fetch_assoc($result);
  echo $value['mx'];
  echo "</td></tr>";
  
}

echo "</table>";
echo "<br/>";
echo "<br/>";
$total = microtime(true) - $start;
echo "Execution time:".$total;
echo "</body></html>";


?>

Vielleicht hilft das.

 

Gruss

Link to comment
Share on other sites


Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use and have taken note of our Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.