externes Statistikmodul ... gemeinsames Boardprojekt??

English! place to talk about development, programming and coding
darkside

externes Statistikmodul ... gemeinsames Boardprojekt??

Post by darkside »

Hallo@all

evtl. hab ich ja auch was übersehen, aber aus meiner Sicht ist das Statistikmodul welches OTRS mitbringt eher schlecht. Was liegt näher als ein eigens (evtl. PHP basiertes) externes Modul zu schaffen, was dieverse Statistiken auswirft.

Selber habe ich derzeit genug Projekte, habe also so recht keine Zeit um ein solches Script zu basteln. Werde aber früher oder später nicht drum rum kommen, da bei mir die Anforderung im Raum steht.

Ich habe mir mal das Script von schocker schicken lassen .... vielen Dank dafür erst mal!!!

Leider kann ich das so nicht benutzen, da ein Teil der SQL-Abfrage sich auf Dinge bezieht, die wir so nicht nutzen.

Also habe ich mir schon mal so Gedanken gemacht. Ein Wunsch ist, die Bearbeitungszeit pro Ticket auszugeben.

Folgendes Überlgegung haben auch zu einem Ziel geführt:
  • Zu jedem Ticket gibt es ja eine umfangreiche History (Tabelle: ticket_history)
  • Zu jedem Eintrag gibt es ein History-Typ Eintrag und ein "create_time" des Datensatzes
  • Ein Ticket kann verschiedene Statusmerkmal in seinem Leben haben ... allen voran aber mindst. "offen" und "closed".
  • Jede OTRS Installation wird sicher eigene Statusmerkmale definieren mit ganz unterschiedlichen Bedeutungen. Damit kann das so direkt nicht für eine Auswertung benutzt werden.
  • Jedes Statusmerkmal hat aber einen Statustyp ... und diese sind fest vorgegeben (oder irre ich mich da)
  • Ein Ticket ist immer dann NICHT mehr in Bearbeitung, wenn es in den "warten" Zustand gesetzt wurde oder gar geschlossen wurde
  • Ein Ticket ist immer dann wieder in Bearbeitung, wenn es "new" ist oder "open"
  • Aus der History müsste nun zu jedem Ticket die Zeitdifferenz zwischen "new"/"open" und dem nächsten Eintrag für "wartend"/"geschlossen" errechnet werden.
Und diese MySQL Abfrage ist dabei rausgekommen:

Code: Select all

SELECT t.id, t.tn,(
      SELECT SUM(UNIX_TIMESTAMP(
            (SELECT th2.create_time
            FROM ticket_history AS th2, ticket_state AS ts2, ticket_state_type AS tst2
            WHERE th2.ticket_id = t.id AND th2.state_id = ts2.id AND ts2.type_id = tst2.id AND tst2.id IN (3,4,5)
            AND th2.history_type_id = 27
            AND th2.id > th.id
            ORDER BY th2.id ASC
            LIMIT 1))
      - UNIX_TIMESTAMP(th.create_time))
FROM ticket_history AS th, ticket_state AS ts, ticket_state_type AS tst
WHERE th.ticket_id = t.id AND th.state_id = ts.id AND ts.type_id = tst.id AND tst.id IN (1,2)
AND (th.history_type_id = 27 OR th.history_type_id = 1)
) AS work_time
FROM ticket AS t
Funktioniert bei mir sehr gut ... allerdings habe ich auch nur ein paar Spieltickets in der DB.

Evtl. mag das ja mal jemand von Euch testen oder hat gar eine Idee wie man die SQL-Syntax besser aufbauen kann. Bin im Grunde SQL-Anfänger.

OK, dann hoffe ich mal auf (auch positive ;)) Kritiken.

Andreas
lindesbs
Znuny expert
Posts: 225
Joined: 09 Dec 2005, 14:18

Post by lindesbs »

Ich habe zuhause bereits ein wneig mit jpgraph und php dafuer rumgespielt, aber weder Zeit noch genug Ideen, welche infos wirklich sinnvoll sind.

Kommt noch mit der Zeit, aber die Idee dafuer ist schonmal gut !
blackfox
Znuny expert
Posts: 187
Joined: 23 Jan 2006, 18:48
Znuny Version: 0

Post by blackfox »

hört sich gut an. auf der anderen seite sollte man sich aber vielleicht auch fragen ob es nicht sinn machen würde das ganze in Perl zu schreiben und dann als Modul für OTRS konzipiert. OK, mag das ganze etwas aufwändiger machen, aber letztlich komfortabler und - wenn gut umgesetzt - könnte es ja vielleicht sein, dass es in der nächsten OTRS-Version dann offiziell mit drin ist!? Das hätte dann den Vorteil, dass eine Pflege (->neue Version mit evtl. kleinen DB-Änderungen etc) durch OTRS selber erfolgen würde.
Für den Fall noch einen Hinweis: ich hab in letzter Zeit neben OTRS auch noch Bugzilla zu testen (ne, nicht als Alternative sondern zur Ergänzung) und ich muss sagen, dass die Auswertungsfunktionen dort recht gut sind. Ich bin nicht sicher wie das rechtlich ist bzw. wie groß der Aufwand wäre, aber von dorther ließe sich vielleicht auch sehr viel Code übernehmen...

Die Idee an sich ist au jedenfall super!!!
lindesbs
Znuny expert
Posts: 225
Joined: 09 Dec 2005, 14:18

Post by lindesbs »

meine Perl Kenntnisse sind ausreichend, fuer otrs allerdings rudimentaer. Ich bastel erstmal die php Variante zusammen, und wenn man sich auf sinnvolle Outputs geeinigt hat, koennte man anfangen, dies auch in Perl als OTRS-Modul zu implementieren
:wink:
darkside

Post by darkside »

Dies als Perlmodul anzubieten halte ich auch für richtig und wichtig. Aber selber muss ich zugeben, Perl an sich gar nicht zu kennen. Lediglich die Gleichheit eines großen Teils der Syntax mit php oder gar C++ und selfhtml haben mir bisher geholfen, mich durch den Quellcode zu graben :)

Ich denke daher, das erst mal das "wie und was" stehen sollte ... damit man erst mal ein Script zur Verfügung hat und die Chefetagen befriedigen kann :twisted:
Andre Bauer
Znuny guru
Posts: 2189
Joined: 08 Dec 2005, 17:01
Znuny Version: 5.0.x
Real Name: André Bauer
Company: Magix Software GmbH
Location: Dresden
Contact:

Post by Andre Bauer »

Wir habe so etwas schon in der Firma. Allerdings darf ich das leider nicht rausgeben. Benötigt aber auch ne extra Datenbank...

Man könnte so ein OTRS Modul sicher auch leicht in PHP schreiben, wenn man ein "Iframe Modul" für das OTRS baut. Also ein Modul, welches nur einen button oben in die Liste packt, den man beliebig benennen kann der im unteren Teil des Frontends nen Iframe aufruft. Den Inhalt bzw. die Url des Iframes sollte man dann natürlich auch über die Config einstellen können.
So liessen sich beliebige Seiten in das OTRS einbinden.

Mir selbst schwebte jetzt mal sowas vor, um Roundcube Webmail ins OTRS einzubinden. Bin wohl aber leider ehr ungeeignet, für die Umsetzung...
lindesbs
Znuny expert
Posts: 225
Joined: 09 Dec 2005, 14:18

Post by lindesbs »

mein Statistik Framework ist erstmal bereit mit Daten gefuettert zu werden. Die Statistiken werden offline mittels plugins erstellt, Statische Webseiten mit Grafiken werden automatisch erstellt und koennen dann online eingesehen werden. Darkside hat die ersten Gehversuche gesehen, ich will das aber noch nicht oeffentlich zeigen, da mir noch sinnvolle SQL-Statements fehlen.

Und hier kommt ihr nun ins Spiel : Ich brauche Ideen, was per Statistik angezeigt werden soll, und am allerbesten waere es, wenn ihr mir einen SQL-Syntax zukommen lasst.

Ich werde das am WE noch weiter ausbauen, aber das wird dann wirklich nett, da man beliebige Statistken erstellen lassen kann, man benoetigt NUR einen SQL-String :)

Hier ein Beispiel, eines Plugins :

<?
$stats["name"] = "others";
$stats["file"] = "Different values for testing";
$stats["caption"] = "Select for different values";

$stats["sql"] = "SELECT t.id as text0, t.tn as text1, t.title as text2, t.tn as valuedata0, t.title as valuetext0
FROM ticket as t,ticket_history AS th, ticket_state AS ts, ticket_state_type AS tst
WHERE th.ticket_id = t.id AND th.state_id = ts.id AND ts.type_id = tst.id AND tst.id IN (1,2)
AND (th.history_type_id = 27 OR th.history_type_id = 1)";

$stats["type"] = "line";

?>
JB
Znuny advanced
Posts: 102
Joined: 20 Feb 2006, 13:51

Post by JB »

lindesbs wrote:mein Statistik Framework ist erstmal bereit mit Daten gefuettert zu werden. Die Statistiken werden offline mittels plugins erstellt, Statische Webseiten mit Grafiken werden automatisch erstellt und koennen dann online eingesehen werden. Darkside hat die ersten Gehversuche gesehen, ich will das aber noch nicht oeffentlich zeigen, da mir noch sinnvolle SQL-Statements fehlen.

Und hier kommt ihr nun ins Spiel : Ich brauche Ideen, was per Statistik angezeigt werden soll, und am allerbesten waere es, wenn ihr mir einen SQL-Syntax zukommen lasst.

Ich werde das am WE noch weiter ausbauen, aber das wird dann wirklich nett, da man beliebige Statistken erstellen lassen kann, man benoetigt NUR einen SQL-String :)

Hier ein Beispiel, eines Plugins :

<?
$stats["name"] = "others";
$stats["file"] = "Different values for testing";
$stats["caption"] = "Select for different values";

$stats["sql"] = "SELECT t.id as text0, t.tn as text1, t.title as text2, t.tn as valuedata0, t.title as valuetext0
FROM ticket as t,ticket_history AS th, ticket_state AS ts, ticket_state_type AS tst
WHERE th.ticket_id = t.id AND th.state_id = ts.id AND ts.type_id = tst.id AND tst.id IN (1,2)
AND (th.history_type_id = 27 OR th.history_type_id = 1)";

$stats["type"] = "line";

?>
Folgendes hätte ich gern in diesem Framework.

Und zwar genau wie das "AccountedTime.pm" nur das er die AccountedTime für die queue ausgibt und nicht für die User/CustomerID.

Sollte eigentlich nicht sonderlich schwer sein umzuschreiben bzw. anzupassen.
lindesbs
Znuny expert
Posts: 225
Joined: 09 Dec 2005, 14:18

Post by lindesbs »

Ich bin weitergekommen, Accounting per queue muss ich noch einen SQL-String zusammenbasteln, da man dann mit mehreren Tabellen arbeiten muss, aber schau Dir die Bilder mal an....

Image

und hier mit mehreren Linien

Image


Dies wird alles automatisch offline erstellt, und man kann relativ viel frei einstellen....
JB
Znuny advanced
Posts: 102
Joined: 20 Feb 2006, 13:51

Post by JB »

Hi,

sieht sehr schick aus. Aber ich denke die Grafikauswrtung ist nicht wirklich wichtig oder?

Mir würden solche Tabellen wie bei OTRS unter Drucken und CSV mehr gefallen. Man kann damit mehr auswerten.
lindesbs
Znuny expert
Posts: 225
Joined: 09 Dec 2005, 14:18

Post by lindesbs »

es ist eine leichtigkeit, das ich das heute einfuege. Dann koennen neben images eben auch csv erstellt werden.
blackfox
Znuny expert
Posts: 187
Joined: 23 Jan 2006, 18:48
Znuny Version: 0

Post by blackfox »

Hab mir grad mal Gedanken zu möglichen Statistiken gemacht. Mir sind auch ein paar Sache eingefallen, jedoch in erster Linie spezielle.

Allgemein fände ich auch sowas wie Zeit pro Ticket oder durchschnittliche Bearbeitungszeit pro Queue recht interessant. Zum Thema TimeAccounting: Zeit pro Tag & Agent wäre denke ich noch interessant, gerade um die Zeit dann schön irgendwo buchen zu können (bei uns in ner eigengestrickten Projektverwaltung, aber für viele interessant könnte das mit SAP-Zeitbuchung sein, oder?). Hier wäre wohl noch optimierungsmöglichkeit wenn man dies z.B. mit einem der freien Felder kombiniert, bei uns z.B. um Projektgeschäftstickets und Tagesgeschäftstickets auseinander halten zu können.

Sowohl für letzteres als auch für all die anderen Ideen von mir wäre es wohl fast unumgägnlich oder zumindest sehr von Vorteil, wenn man sich sowas wie einen Filter über eine grafische Oberfläche zusammenklicken könnte - und diese Filter dann speicherbar wären. Ich weiß ja bislang nicht wie dein Framework genau gestrikt ist, aber vielleicht lässt sich sowas in einem weiteren Schritt ergänzen.
Die Schwierigkeit dürfte wohl darin liegen, dass die GUI sich sozusagen dynamisch an die jeweilige OTRS-Installation angepassen müsste, damit z.B. die freien Felder mit Ihren Auswahlmöglichkeiten abgebildet werden können... Das ist dann evtl. auch einfacher in Perl zu implementieren, falls das Framework mal in Perl umgeschrieben wird, da das dann einfacher in OTRS einbindbar wäre (die Definitionen der Freien Felder sind ja soviel ich weiß in ner Datei gespeichert und nicht in der DB - lediglich die Werte der Tickets sind in der DB).
lindesbs
Znuny expert
Posts: 225
Joined: 09 Dec 2005, 14:18

Post by lindesbs »

GUI hab ich erstmal gelassen. man muss "nur" einen passenden SQL-String erarbeiten, der dann ausgewertet wird.

Aber das Thema GUI ist auch noch eingeplant.
blackfox
Znuny expert
Posts: 187
Joined: 23 Jan 2006, 18:48
Znuny Version: 0

Post by blackfox »

ja, war schon klar - macht ja auch Sinn, dass erstmal das Ding an sich funktioniert, sonst bringt der beste GUI-klick-Filter nix ;-)

Sollte nur heißen, dass es wohl längerfristig nötig sein wird.

Was mich generell noch interessieren würde: Wie wird das mit dem Datum gehandhabt? bei OTRS kann man da ja immer einen Monat auswählen, aber hier ist das ja erstmal statisch über SQL-String... Wenn ich das jetzt richtig interpretiere, dann sind somit erstmal nur Statistiken ohne Zeitbegrenzung nötig, oder diese müssen immer wieder von Hand ans Datum angepasst werden im SQL-String... Oder hab ich da jetzt etwas falsch verstanden?
Start-/Enddatum finde ich, wären auf der GUI dann mit die wichtigsten...
lindesbs
Znuny expert
Posts: 225
Joined: 09 Dec 2005, 14:18

Post by lindesbs »

Ich habe ein paar Beispiele dabei, etwa, alle erstellten Tickets in den letzten 12 Monaten, oder vom letzten Monat, oder aktueller Monat...

Momentan koennen nur einfache Abfragen erstellen werden, d.h. ein Diagramm mit mehreren Abfragen. Aber in der naechsten Version wird dann eine Abfrage auch eine Schwarm an Diagrammen/CSV und Texten erstellen koennen. So zum Beispiel, alle Tickets die nicht inenrhalb eines Monat bearbeitet wurden, und das als Kalenderansicht zum beispiel. Dann hast du fuer jeden Monat ein eigenes Diagramm, wo du dir deine Daten darstellen lassen kannst.

Allerdings, wird das ganze niemlas online geschehen, d.h. ein cronjob macht taeglich die Stats und dann kannst du eben diese Stats dir anscheuen, oder weiterverwerten. Wobei Namen usw. frei waehlbar sind.
lindesbs
Znuny expert
Posts: 225
Joined: 09 Dec 2005, 14:18

Post by lindesbs »

Da haett ich noch eine Bitte. Die idee mit einer Klicki GUI reift in meinen Gedankengaengen. Wenn jemand Spass an HTML und evt. JavaScript hat, kann er mal was zusammenbasteln und ich wuerd das als Ausgangsoberflaeche fuer die GUI nutzen. Code und Verknuepfungen wuerde ich machen, aber da ich nu wirklich kein GUI Designer bin, eben auf diesem Weg die Bitte an die Leute die daran Spass haben.
lindesbs
Znuny expert
Posts: 225
Joined: 09 Dec 2005, 14:18

Post by lindesbs »

So, die erste ALPHA Version ist fertig. Wer spielen moechte :
http://www.chektrion.de/index.php?otrs-stats

FeatureRequest und Bugs bitte in das Bugtracking : http://otrs-mantis.chektrion.de

Viel Spass !
JB
Znuny advanced
Posts: 102
Joined: 20 Feb 2006, 13:51

Post by JB »

Mal ne ganz dämliche Frage. Wie legt man einen zusätzlichen DB User an, der die OTRS DB nur lesen kann? Benutze phpMyAdmin :)
Andre Bauer
Znuny guru
Posts: 2189
Joined: 08 Dec 2005, 17:01
Znuny Version: 5.0.x
Real Name: André Bauer
Company: Magix Software GmbH
Location: Dresden
Contact:

Post by Andre Bauer »

Im Startbildschirm auf "Rechte" klicken und dann auf "Neuen Benutzer hinzufügen". Dort aber noch keine Rechte vergeben, da die Global wären!

User dann hinterher editieren und unter "Datenbankspezifische Rechte" nur "Select" für die OTRS Datenbank vergeben.
Prod: Ubuntu Server 16.04 / Zammad 1.2

DO NOT PM ME WITH OTRS RELATED QUESTIONS! ASK IN THE FORUMS!

OtterHub.org
JB
Znuny advanced
Posts: 102
Joined: 20 Feb 2006, 13:51

Post by JB »

Code: Select all

10.03.2006 14:53:25 Start creating statistics
10.03.2006 14:53:25 Clearing old data
10.03.2006 14:53:25 reading directory : ./plugins/
10.03.2006 14:53:25 Generating Stats with ./plugins/AccountTime.simple
10.03.2006 14:53:25 GenerateStats: line
JpGraph Error Font file "/usr/X11R6/lib/X11/fonts/truetype/arial.ttf" is not readable or does not exist.
Irgendwas mach ich noch falsch :oops:
lindesbs
Znuny expert
Posts: 225
Joined: 09 Dec 2005, 14:18

Post by lindesbs »

Jepp. Kopiere einfach die TTF-Fonts arail.ttf und verdana.ttf in das entsprechende Verzeichnis

/usr/X11R6/lib/X11/fonts/truetype/

/fonts/truetype musst du wahrscheinlich erst anlegen. Und nimm die schriften am Besten von einer WindowsKiste
Andre Bauer
Znuny guru
Posts: 2189
Joined: 08 Dec 2005, 17:01
Znuny Version: 5.0.x
Real Name: André Bauer
Company: Magix Software GmbH
Location: Dresden
Contact:

Post by Andre Bauer »

Geht das nicht auch ohne extra erst Schriftarten zu installieren?
Warum nutzt du nicht GD? So wäre der Downlaod schlanker...
Prod: Ubuntu Server 16.04 / Zammad 1.2

DO NOT PM ME WITH OTRS RELATED QUESTIONS! ASK IN THE FORUMS!

OtterHub.org
lindesbs
Znuny expert
Posts: 225
Joined: 09 Dec 2005, 14:18

Post by lindesbs »

Ich wollt mir das Graphen zeichnen erstmal ersparen. Aber sollte auch mit GD alleine funktionieren. KOmmt in der naechsten version ;-)
JB
Znuny advanced
Posts: 102
Joined: 20 Feb 2006, 13:51

Post by JB »

10.03.2006 15:16:50 Start creating statistics
10.03.2006 15:16:50 Clearing old data
10.03.2006 15:16:50 reading directory : ./plugins/
10.03.2006 15:16:50 Generating Stats with ./plugins/AccountTime.simple
10.03.2006 15:16:50 GenerateStats: line
10.03.2006 15:16:51 Generating Stats with ./plugins/AccountTimeCSV.simple
10.03.2006 15:16:51 GenerateStats: csv
10.03.2006 15:16:51 Generating Stats with ./plugins/CreateTicket.simple
10.03.2006 15:16:51 GenerateStats: line
JpGraph Error Empty input data array specified for plot. Must have at least one data point.

:roll: :idea:
lindesbs
Znuny expert
Posts: 225
Joined: 09 Dec 2005, 14:18

Post by lindesbs »

Das letzte Plugin "CreateTicket.simple" hat keine Daten sammeln koennen. Loesch das einfach mal aus dem verzeichnis. Und starte nochmal. Ich fang naechste Woche mit einem ConfigTool an.....
Andre Bauer
Znuny guru
Posts: 2189
Joined: 08 Dec 2005, 17:01
Znuny Version: 5.0.x
Real Name: André Bauer
Company: Magix Software GmbH
Location: Dresden
Contact:

Post by Andre Bauer »

lindesbs wrote:Ich wollt mir das Graphen zeichnen erstmal ersparen. Aber sollte auch mit GD alleine funktionieren. KOmmt in der naechsten version ;-)
Achso. Alles klar :-)
Prod: Ubuntu Server 16.04 / Zammad 1.2

DO NOT PM ME WITH OTRS RELATED QUESTIONS! ASK IN THE FORUMS!

OtterHub.org
lindesbs
Znuny expert
Posts: 225
Joined: 09 Dec 2005, 14:18

Post by lindesbs »

Mir gings jetzt erstmal darum, herauszufinden, ob meine Grundidee eines Statistikframeworks dem entspricht, was die Community benoetigt. Da dies wirklich eine ALPHA Version ist koennen Wuensche und Forderungen auch noch grundlegend eingebaut werden, ohne das man spaeter im grossen rumbasteln muss.
Andre Bauer
Znuny guru
Posts: 2189
Joined: 08 Dec 2005, 17:01
Znuny Version: 5.0.x
Real Name: André Bauer
Company: Magix Software GmbH
Location: Dresden
Contact:

Post by Andre Bauer »

Ok. Ich werde wohl leider aber erst nächste Woche dazu kommen, das zu testen...
Prod: Ubuntu Server 16.04 / Zammad 1.2

DO NOT PM ME WITH OTRS RELATED QUESTIONS! ASK IN THE FORUMS!

OtterHub.org
lindesbs
Znuny expert
Posts: 225
Joined: 09 Dec 2005, 14:18

Post by lindesbs »

Ich habe gerade mal mit einem WAMP System ausprobiert. Hier scheints Probleme zu geben in der Erstellung des Menufiles......

Es ist Wochenende, ich schaus mir dann mal an.
JB
Znuny advanced
Posts: 102
Joined: 20 Feb 2006, 13:51

Post by JB »

time accounting per queue_id 04:16:06

Aber sehe die queues nicht wirklich nach Namen. Und die CSV ist auch irgendwie nicht so richtig wie ich es mir vorgestellt habe.

Ich habe es mir nämlich so vorgestellt:

queue Firma1
Summe Accounting: 25

queue Firma2
Summe Accountng: 54

Aber ansonsten funktioniert dein Script, nur verstehen tu ich die Graphen nicht wie Sie auswerten.
lindesbs
Znuny expert
Posts: 225
Joined: 09 Dec 2005, 14:18

Post by lindesbs »

Die SQL-Abfragen ergeben auch noch nicht wirklich Sinn, dafuer sind ja auch die Leute hier vorhanden, um das mit Leben zu fuellen. ich hab erstmal ein framework gebastelt, um erstmal solche Sachen grafisch darstellen zu koennen.

Ich habe schon mit den Gedankengaengen angefangen, diese Abfragen per Mausklick erstellen zu lassen. Aber das wird noch ein wenig brauchen.
Andre Bauer
Znuny guru
Posts: 2189
Joined: 08 Dec 2005, 17:01
Znuny Version: 5.0.x
Real Name: André Bauer
Company: Magix Software GmbH
Location: Dresden
Contact:

Post by Andre Bauer »

Ich glaub in der Mailingliste hate auch schonmal jemand ein paar SQL Strings gepostet, die für statistische Auswertungen gedacht waren. Vielleicht kannst du die ja gleich mit rein nehmen...
Prod: Ubuntu Server 16.04 / Zammad 1.2

DO NOT PM ME WITH OTRS RELATED QUESTIONS! ASK IN THE FORUMS!

OtterHub.org
JB
Znuny advanced
Posts: 102
Joined: 20 Feb 2006, 13:51

Post by JB »

Hallo,

ich wollte mal fragen ob die Entwicklung des Tools weiter geht und ob es schon irgendwas neues gib?
lindesbs
Znuny expert
Posts: 225
Joined: 09 Dec 2005, 14:18

Post by lindesbs »

Und ob das weitergeht. Ich hab mit einer KlickiBunti GUI weitergemacht......

...Schande ueber mich....


Wird interessant, auf alle Faelle. ich brauche jedenfalls von Euch allen hier auch ein wenig Hilfe bei sinnigen SQL-Strings.....

Hab momentan zwei Wochen Urlaub, da kann ich endlich mal was nebenbei schaffen.

Bis spaeter Stefan
JB
Znuny advanced
Posts: 102
Joined: 20 Feb 2006, 13:51

Post by JB »

lindesbs wrote:Und ob das weitergeht. Ich hab mit einer KlickiBunti GUI weitergemacht......

...Schande ueber mich....


Wird interessant, auf alle Faelle. ich brauche jedenfalls von Euch allen hier auch ein wenig Hilfe bei sinnigen SQL-Strings.....

Hab momentan zwei Wochen Urlaub, da kann ich endlich mal was nebenbei schaffen.

Bis spaeter Stefan
Sorry, habe leider keine Ahnnung von SQL :(

Das einzige was ich kann ist, teste teste test :roll:
Andre Bauer
Znuny guru
Posts: 2189
Joined: 08 Dec 2005, 17:01
Znuny Version: 5.0.x
Real Name: André Bauer
Company: Magix Software GmbH
Location: Dresden
Contact:

Post by Andre Bauer »

Hab mal die Strings aus der Mailingliste rausgesucht, die Alexander Scholler gepostet hatte:

Code: Select all

Zeiteinheiten pro Agenten
SELECT (SELECT login FROM system_user WHERE id = time_accounting.create_by),
SUM(time_unit)/60
FROM time_accounting
WHERE YEAR(create_time) = 2006
AND MONTH(create_time = 1
GROUP BY create_by

Anzahl eröffneter Tickets pro Mandant#
SELECT customer_id AS Mandant, count( id ) AS Anzahl
FROM ticket
WHERE YEAR(create_time) = 2006
AND MONTH(create_time) = 1
GROUP BY customer_id

Abgeschlossene Tickets mit Bearbeitungszeitdauer
SELECT tn AS Vorgang, (change_time - create_time) /3600 AS Stunden
FROM ticket
WHERE ticket_state_id IN (2, 3)
AND YEAR(change_time) = 2006
AND MONTH(change_time) = 1

Abgeschlossene Tickets mit Bearbeitungszeitdauer, Gruppiert nach 
Ticket-Klassen
SELECT (ticket_priority_id-1) DIV 10 AS Klasse, COUNT(id) AS Anzahl, 
AVG((change_time - create_time) /3600) AS durchschnBearbeitungStunden
FROM ticket
WHERE ticket_state_id IN (2, 3)
AND YEAR(change_time) = 2006
AND MONTH(change_time) = 1
GROUP BY (ticket_priority_id-1) DIV 10

Anzahl und Arbeitszeiten der durchgeführten Aktivitäten
SELECT (SELECT CONCAT(article_type.comments, ' (', article_type.name, 
')') FROM article_type WHERE id = article.article_type_id) AS 
Artikeltyp, /* Artikelbezeichnung ermitteln */
COUNT(article.id) AS Anzahl,
SUM(time_accounting.time_unit) / 60 AS Stundensumme
FROM article LEFT JOIN time_accounting ON article.id = 
time_accounting.article_id AND article.ticket_id = 
time_accounting.ticket_id /* LEFT JOIN ist erforderlich da vermutlich 
alle Aktivitäten mit Zeit != 0 nicht unter time_accounting aufgenommen 
werden */
WHERE YEAR(article.create_time) = 2006
AND MONTH(article.create_time) = 1
AND article.article_sender_type_id = 1
GROUP BY article.article_type_id

Queueverteilung bei Ticketabschluss
SELECT (SELECT queue.name FROM queue WHERE queue.id = ticket.queue_id) 
AS Kategorie,
count(id) AS Anzahl
FROM ticket
WHERE ticket_state_id IN (2, 3) AND
YEAR(change_time) = 2006 AND
MONTH(change_time) = 1
GROUP BY queue_id

Arbeitszeiten pro Mandant#
Arbeitszeit die in einem Monat pro Mandant geleistet wurde, verteilt auf 
eine Anzahl von Tickets.
SELECT
ticket.customer_id AS Mandant,
COUNT( ticket.id ) AS Ticketanzahl,
SUM(time_accounting.time_unit) / 60 AS Stundensumme
FROM ticket LEFT JOIN time_accounting ON ticket.id = 
time_accounting.ticket_id
WHERE YEAR(time_accounting.create_time) = 2006 AND 
MONTH(time_accounting.create_time) = 1
GROUP BY ticket.customer_id
Prod: Ubuntu Server 16.04 / Zammad 1.2

DO NOT PM ME WITH OTRS RELATED QUESTIONS! ASK IN THE FORUMS!

OtterHub.org
zero cool
Znuny newbie
Posts: 72
Joined: 22 Feb 2006, 21:01

Versuche mit Chartdirector

Post by zero cool »

Hallo zusammen,

ich habs mal mit Chartdirector probiert & ein entsprechendes SQL Statement drumrumgebaut.

Mir gefällt der CD, da er IMHO auf einfache Weise viele verschiedene Charts bereitstellt.

Im Anhang habe ich mal eine Ausertung nach gebuchten Zeiten / MA / Monat eingefügt...

:idea: Funktioniert natürlich nur mit Chartdirector... (Pfad beim include ggf. anpassen)

// EDIT :: Warum auch immer - aber das Modul lässt sich net anhängen...
-fb-

System : Debian Edge (unstable/ testing) -- in einer VM
WebServer : Apache 2 - inkl. mod_perl
Datenbank : mySQL 5
OTRS-Version : 2.4.2
JB
Znuny advanced
Posts: 102
Joined: 20 Feb 2006, 13:51

Post by JB »

*push*

:lol:

Schon was neues?
zero cool
Znuny newbie
Posts: 72
Joined: 22 Feb 2006, 21:01

Statistiken mit ChartDirector

Post by zero cool »

Hallo,
nu abber & vielen Dank an Darkside :)

ich benutze für meine bunten Bildchen den ChartDirector. Aus meiner Sicht einfach zu bedienen.
Website: ChartDirector

anbei einmal eine Datei, welche mit Hilfe des CD eine Grafische Auswertung der durchschnittlichen gebuchten Zeiten je Ticket / Queue macht. Bei einer Menge an Queues > 30 oder so fängt es an Tipptechnisch ein wenig wild zu werden.

Zur Erläuterung habe ich eine zweite Datei beigefügt, an der ich das System erkläre und die eine Textausgabe je Queue macht...

Bitte zu beachten, daß IMMER die Datenbank und der User und Passwort angepasst werden müssen. Bei Einsatz des Chartdirector auch im Script die jeweiligen Pfade...
You do not have the required permissions to view the files attached to this post.
-fb-

System : Debian Edge (unstable/ testing) -- in einer VM
WebServer : Apache 2 - inkl. mod_perl
Datenbank : mySQL 5
OTRS-Version : 2.4.2
JB
Znuny advanced
Posts: 102
Joined: 20 Feb 2006, 13:51

Post by JB »

Hi,

schöne Sache!

test.php funktioniert bei mir einwandfrei!

Nur die queue.php scheint noch nicht zu funktionieren!

Code: Select all

Warning: main(../lib/phpchartdir.php): failed to open stream: No such file or directory in /var/www/otrs-stats/queue.php on line 59

Fatal error: main(): Failed opening required '../lib/phpchartdir.php' (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/otrs-stats/queue.php on line 59

*** Edit

Ich sollte mal deinen Beitrag zuende lesen :-) Da steht ja alles drin.

Kann man noch einbauen, das man auswählen kann zu welchen Monat man die Auswertung haben möchte?
Stable System: OTRS 2.1.1 Source; Ubuntu Dapper Drake; Apache2.0.x; MySQL 5.0.x

Test System: OTRS 2.0.4 .deb Packages; Debian testing; Apache2.0.x; MySQL 4.1.x
zero cool
Znuny newbie
Posts: 72
Joined: 22 Feb 2006, 21:01

ChartDirector // SQL Abfragen

Post by zero cool »

Hallo,

um die abfrage auf die Monate zu begrenzen musst du die Ticketabfrage einschränken.

statt :
[php]$ti = mysql_db_query ("otrs", "SELECT * FROM ticket WHERE queue_id = $queid");[/php]

ein :
[php]$ta = mysql_db_query ("otrs", "SELECT * FROM time_accounting WHERE ticket_id = $verg_id AND create_time >= '$jahr-$month-01' AND create_time <= '$jahr-$month-31'");[/php]

Das wären dann alle Januar Tickets. Dann kannst du monat & Jahr auch noch ver-variablen und das über eine weitere Schleife laufen lassen, etc. ppp. (wenn ich es fertig habe stelle ich es ein - versprochen).

Nebenbei: Falls einer WIRKLICH mySQL-Abfragen programmieren kann, bitte gebt mir Bescheid wie ich das effizienter machen kann ! Ich habe mich über Einzelabfragen (wehe einer lacht :oops: ) bis zu den Schleifen vorgekämpft.
-fb-

System : Debian Edge (unstable/ testing) -- in einer VM
WebServer : Apache 2 - inkl. mod_perl
Datenbank : mySQL 5
OTRS-Version : 2.4.2
zero cool
Znuny newbie
Posts: 72
Joined: 22 Feb 2006, 21:01

ChartDirector // SQL Abfragen

Post by zero cool »

hallo nochmals,

nu auch noch das script mit der Textausgabe nach Monaten.
Vielleicht hat jmd Lust dieses als Chart-Grafik auszugeben & hier zu posten :wink:

wäre prima :)
You do not have the required permissions to view the files attached to this post.
-fb-

System : Debian Edge (unstable/ testing) -- in einer VM
WebServer : Apache 2 - inkl. mod_perl
Datenbank : mySQL 5
OTRS-Version : 2.4.2
Andre Bauer
Znuny guru
Posts: 2189
Joined: 08 Dec 2005, 17:01
Znuny Version: 5.0.x
Real Name: André Bauer
Company: Magix Software GmbH
Location: Dresden
Contact:

Post by Andre Bauer »

Nur mal so nebenbei.
"SELECT *" macht man nicht, da so unnötig Performance verschwendet wird.

"SELECT * FROM ticket WHERE queue_id = $queid"

Wäre besser:

"SELECT queue_id FROM ticket WHERE queue_id = $queid"

Also immer nur die Sache "selecten", die du auch wirklich brauchst...
* Sollte nur für Test verwendet werden. Nicht bei Produktivsystemen.
Prod: Ubuntu Server 16.04 / Zammad 1.2

DO NOT PM ME WITH OTRS RELATED QUESTIONS! ASK IN THE FORUMS!

OtterHub.org
JB
Znuny advanced
Posts: 102
Joined: 20 Feb 2006, 13:51

Post by JB »

Super!

Werde es am Montag mal testen (kann leider nicht früher), ich habe extra einen READ only DB User angelegt. Ich denke das sollten alle machen, bevor das Script irgendwie die DB zerschießt.
Stable System: OTRS 2.1.1 Source; Ubuntu Dapper Drake; Apache2.0.x; MySQL 5.0.x

Test System: OTRS 2.0.4 .deb Packages; Debian testing; Apache2.0.x; MySQL 4.1.x
zero cool
Znuny newbie
Posts: 72
Joined: 22 Feb 2006, 21:01

Post by zero cool »

Hallo monotek,

vielen Dank - hab ich eingebaut.

ein minibisschen schneller isses schon :roll:

Danke für den Hinweis !

--- mehr davon pls ---
-fb-

System : Debian Edge (unstable/ testing) -- in einer VM
WebServer : Apache 2 - inkl. mod_perl
Datenbank : mySQL 5
OTRS-Version : 2.4.2
zero cool
Znuny newbie
Posts: 72
Joined: 22 Feb 2006, 21:01

Post by zero cool »

@jb

no panic - das Script liest nur (SELECT) und ändert nix in deiner DB !
aber für Statistiken kannst du wenn du willst auch nen RO-User anlegen.
-fb-

System : Debian Edge (unstable/ testing) -- in einer VM
WebServer : Apache 2 - inkl. mod_perl
Datenbank : mySQL 5
OTRS-Version : 2.4.2
JB
Znuny advanced
Posts: 102
Joined: 20 Feb 2006, 13:51

Post by JB »

zero cool wrote:@jb

no panic - das Script liest nur (SELECT) und ändert nix in deiner DB !
aber für Statistiken kannst du wenn du willst auch nen RO-User anlegen.
Beim Produktiv System würde ich sagen "Sicher ist Sicher" :oops:
Habe es momentan nur auf einer Test Kiste getestet! Werde am Montag mehr sagen können.

Aber im Vorwege, Vielen Dank für das tolle Script!
Stable System: OTRS 2.1.1 Source; Ubuntu Dapper Drake; Apache2.0.x; MySQL 5.0.x

Test System: OTRS 2.0.4 .deb Packages; Debian testing; Apache2.0.x; MySQL 4.1.x
JB
Znuny advanced
Posts: 102
Joined: 20 Feb 2006, 13:51

Post by JB »

Hi,

habe gerade dein Script ausprobiert und muss sagen das es irgendwie noch fehlerhaft ist.

Deine test.php war schon ziemlich gut, nur das er nicht nach Monaten auswertet. Dein neues Script queuetext.php funktioniert nicht. Er zeigt nur eine einzige queue an. Anbei ein bild wie es bei mir aussieht.
You do not have the required permissions to view the files attached to this post.
Stable System: OTRS 2.1.1 Source; Ubuntu Dapper Drake; Apache2.0.x; MySQL 5.0.x

Test System: OTRS 2.0.4 .deb Packages; Debian testing; Apache2.0.x; MySQL 4.1.x
JB
Znuny advanced
Posts: 102
Joined: 20 Feb 2006, 13:51

Post by JB »

Wie folgt hat es nun funktioniert bei mir ...

[php]<?php

$db = mysql_connect("localhost", "otrs", "otrs");

$qu = mysql_db_query ("otrs", "SELECT * FROM queue WHERE valid_id = 1");

$equ = mysql_num_rows ($qu);

$min = 0;
$d =0;
$e =0;
$jahr = 2006;
$einheit = Minuten;
$mo[1] = Januar;
$mo[2] = Februar;
$mo[3] = März;
$mo[4] = April;
$mo[5] = Mai;
$mo[6] = Juni;
$mo[7] = Juli;
$mo[8] = August;
$mo[9] = September;
$mo[10] = Oktober;
$mo[11] = November;
$mo[12] = Dezember;

for ($month=1; $month<=12; $month++)
{
echo ("<h2>".$mo[$month]." ".$jahr."<br><br> </h2<br>");
for ($a=0; $a<$equ; $a++)
{
$queid = mysql_result($qu, $a, "id");
$ti = mysql_db_query ("otrs", "SELECT * FROM ticket WHERE queue_id = $queid");
$eti = mysql_num_rows($ti);
$label = mysql_result ($qu, $a, "name");
$bb[$a] = mysql_result ($qu, $a, "id");
$min = 0;
$zaehler = 0;
for ($b=0; $b<$eti; $b++)
{
$verg_id = mysql_result($ti, $b, "id");
### den Link zwischen den Tabellen bildet die ticket_id
$ta = mysql_db_query ("otrs", "SELECT * FROM time_accounting WHERE ticket_id = $verg_id AND create_time >= '$jahr-$month-01' AND create_time <= '$jahr-$month-31'");
## alle einträge in der time_accounting Tabelle prüfen ob diesem Ticket eine Zeit gebucht wurde
$eta = mysql_num_rows ($ta);
if ($eta > 0)
{
$zaehler = $zaehler +1;
### Tickets mitzählen...
for ($c=0; $c<$eta; $c++)
{
$sum = mysql_result($ta, $c, "time_unit");
$min = $min + $sum;
}
}
}


if ($min > 0 AND $eta > 0)
{
$zsum = bcdiv($min,$zaehler,2);
$std = bcdiv($zsum,60,2);
$erg[$d][$e] = $zsum;
$e = $e +1;
$d = $d +1;
}
else
{
$erg[$d][$e] = 0;
$e = $e +1;
$d = $d +1;
}


echo ("<b>".$label."</b><br><br>");
echo ($min." Minuten<br>");
$min = 0;
echo ($zaehler." Tickets<br>");
echo ("<b>".$zsum."</b> Minuten Bearbeitungszeit im Schnitt je Ticket<br> ");
$zsum = 0;
echo ("<hr>");

}
}
?>[/php]
Stable System: OTRS 2.1.1 Source; Ubuntu Dapper Drake; Apache2.0.x; MySQL 5.0.x

Test System: OTRS 2.0.4 .deb Packages; Debian testing; Apache2.0.x; MySQL 4.1.x
zero cool
Znuny newbie
Posts: 72
Joined: 22 Feb 2006, 21:01

Post by zero cool »

Hallo JB,

habs auch gemerkt heute Morgen :oops:

hier :

[php]
if ($min > 0 AND $eta > 0)
{
$zsum = bcdiv($min,$zaehler,2);
$std = bcdiv($zsum,60,2);
$erg[$d][$e] = $zsum;
$e = $e +1;
$d = $d +1;
}
[/php]

einfach mal das

AND $eta > 0)


rausnehmen. Danach lief das Script wieder mit vernünftigen Ergebnissen.
I'm Sorry...

Ich hoffe das wars, da ich grade keine Zeit habe mich noch näher damit zu beschäftigen.

@JB : Vielen Dank für deinen Hinweis !
-fb-

System : Debian Edge (unstable/ testing) -- in einer VM
WebServer : Apache 2 - inkl. mod_perl
Datenbank : mySQL 5
OTRS-Version : 2.4.2
Post Reply