Logs versturen

Gestart doorBartv12 reacties126 weergaven

13 berichten · pagina 1 van 1

Bartv

Lid · Topicstarter

Berichten
4.451
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Hallo iedereen,

Ik ben bezig met een projectje thuis. Hierbij wil ik een mini pc aan hebben staan, die dingen doet. Deze dingen worden allemaal gelogged in zijn eigen database, of er dingen verkeerd gaan, wat voor response hij terug geeft wanneer hij iets opzoekt etc. Alles eigenlijk.

Nu wil ik alleen vanaf bijvoorbeeld op school of bij mn vriendin of waar dan ook die logs kunnen uitlezen. Hier wil ik een paneel voor maken op een server. (Dit geld voor meerdere mini pcs, niet alleen voor deze). Dit wil ik allemaal op een centrale plek houden, dus die server.

Nu was mijn idee, via PHP de logs te verzamelen uit de database op de mini pc met een uniek idee uiteraard, dit in een post request te sturen met paar beveiliging dingen erbij (public en private key), enzovoorts.

Nu doe ik: Ik haal de gegevens uit de database, zet deze in een JSON om, en stuur dit in een POST. De server leest t uit en zet alles in de database. Dit werkt in ieder geval al. Dit wil ik doen met een cronjob iedere minuut ongeveer.

Nu heb ik 2 vragen aan jullie:
Is deze oplossing goed en betrouwbaar?

En hoe kan ik terug geven dat alles gelukt is? Ik zat zelf te denken aan een array waarin staat welke logs worden verzonden, op de server een array maken met welke zijn gelukt om op de server zn DB te zetten, en deze terug te sturen en dan te vergelijken.

Ik zoek een zo goed mogelijke en betrouwbare oplossing smile
PS. Elke log versturen direct naar de server heb ik ook al over nagedacht, maar dit wil ik niet aangezien er dan logs bij kunnen zitten die verloren kunnen gaan omdat er geen internet is of iets dergelijks.

Alvast bedankt voor t meedenken pompom
0
Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
Op de mini PC een database bijhouden, en dan eens in de 5 minuten (dat is al voldoende, 10 moet ook wel lukken) die database omzetten naar json, dat in een post request sturen en dan lokaal de logs uit de database verwijderen.

Op de server ontvangt hij de json data, en zet dit in de database.

Thats it. Snap niet echt waarmee je zit?

toevoeging op 11 december 2014, 14:01:47:
Desnoods geef je als return een hash terug (json->stringify->base64->md5) en dat geef je als response.
Op de lokale Pc krijg je de response binnen en dan gaat ie kijken of die md5 string klopt.
Zoja dan is alles wel goed gegaan (tenzij mysql een error geeft maar dat kan je op de server afhandelen dat als mysql een error geeft dat je geen md5 string als response terug geeft maar een foutcode.
De lokale PC ziet dat en kan het opnieuw proberen. (Dus dan wacht je ff met het verwijderen van de lokale data tot je een succes response krijgt.
0
Bartv

Lid · Topicstarter

Berichten
4.451
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Xjessex schreef:
Op de mini PC een database bijhouden, en dan eens in de 5 minuten (dat is al voldoende, 10 moet ook wel lukken) die database omzetten naar json, dat in een post request sturen en dan lokaal de logs uit de database verwijderen.

Op de server ontvangt hij de json data, en zet dit in de database.

Thats it. Snap niet echt waarmee je zit?
toevoeging op 11 december 2014, 14:01:47:
Desnoods geef je als return een hash terug (json->stringify->base64->md5) en dat geef je als response.
Op de lokale Pc krijg je de response binnen en dan gaat ie kijken of die md5 string klopt.
Zoja dan is alles wel goed gegaan (tenzij mysql een error geeft maar dat kan je op de server afhandelen dat als mysql een error geeft dat je geen md5 string als response terug geeft maar een foutcode.
De lokale PC ziet dat en kan het opnieuw proberen. (Dus dan wacht je ff met het verwijderen van de lokale data tot je een succes response krijgt.

Jaa okee, dus JSON in een POST request is gewoon goed.

Maar, dat met error handling. Ik dacht dus in de database op de lokale PC zetten van: Deze heb ik verstuurd en zijn gelukt. Dus hij stuurt een array terug welke IDs hij op de server heeft gezet, en die zet de lokale PC van: ok deze zijn gelukt. Verwijderen weet ik niet of ik dat doe, maar dat maakt niet zoveel uit.

Maar de error handling moet dus goed zijn. Ik wil dat er geen 1 log verloren gaat, dus als er een mysql error is, moet ie de rest nog wel proberen, maar die ene met de error moet terug geven dat die niet is gelukt of iets dergelijks.
0
Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
Het is één json object, dus één query. Dus kan je de rest niet blijven proberen.
Dan moet je alles opnieuw doen.
0
Rik

Lid

Berichten
18.393
Reputatie
0
Punten
0,04
Lid sinds
Laatst gezien
Je kan wel zo doen dat je met transacties werkt. Op het moment dat er een fout veroorzaakt wordt doe je een rollback (i.p.v. een commit) op alles van dat JSON object en stuur je de foutieve query(s) weer terug.
0
Bartv

Lid · Topicstarter

Berichten
4.451
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Xjessex schreef:
Het is één json object, dus één query. Dus kan je de rest niet blijven proberen.
Dan moet je alles opnieuw doen.
Jaa oke, dan zet ik alles in 1 insert query, dat kan ik idd ook doen.
Rik schreef:
Je kan wel zo doen dat je met transacties werkt. Op het moment dat er een fout veroorzaakt wordt doe je een rollback (i.p.v. een commit) op alles van dat JSON object en stuur je de foutieve query(s) weer terug.
Heb je hier een PHP uitwerking van? Ik snap niet 100% wat je bedoelt.
0
Rik

Lid

Berichten
18.393
Reputatie
0
Punten
0,04
Lid sinds
Laatst gezien
Even van de PHP site gejat:

[COLOR= #0000BB]<?php[/COLOR]
try [COLOR= #007700]{[/COLOR]
  [COLOR= #0000BB]$dbh[/COLOR] [COLOR= #007700]= new[/COLOR] PDO[COLOR= #007700]([/COLOR][COLOR= #DD0000]odbc:SAMPLE[/COLOR][COLOR= #007700],[/COLOR] [COLOR= #DD0000]db2inst1[/COLOR][COLOR= #007700],[/COLOR] [COLOR= #DD0000]ibmdb2[/COLOR][COLOR= #007700],[/COLOR] 
      [URL="http://www.php.net/array"]array[/URL][COLOR= #007700]([/COLOR]PDO[COLOR= #007700]::[/COLOR]ATTR_PERSISTENT [COLOR= #007700]=>[/COLOR] true[COLOR= #007700]));[/COLOR]
  [URL="http://www.php.net/echo"]echo[/URL] [COLOR= #DD0000]"Connectedn"[/COLOR][COLOR= #007700];
}[/COLOR] catch [COLOR= #007700]([/COLOR]Exception [COLOR= #0000BB]$e[/COLOR][COLOR= #007700]) {[/COLOR]
  [URL="http://www.php.net/die"]die[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]"Unable to connect: "[/COLOR] [COLOR= #007700].[/COLOR] [COLOR= #0000BB]$e[/COLOR][COLOR= #007700]->[/COLOR]getMessage[COLOR= #007700]());
}[/COLOR]

try [COLOR= #007700]{[/COLOR]  
  [COLOR= #0000BB]$dbh[/COLOR][COLOR= #007700]->[/COLOR]setAttribute[COLOR= #007700]([/COLOR]PDO[COLOR= #007700]::[/COLOR]ATTR_ERRMODE[COLOR= #007700],[/COLOR] PDO[COLOR= #007700]::[/COLOR]ERRMODE_EXCEPTION[COLOR= #007700]);[/COLOR]

  [COLOR= #0000BB]$dbh[/COLOR][COLOR= #007700]->[/COLOR]beginTransaction[COLOR= #007700]();[/COLOR]
  [COLOR= #0000BB]$dbh[/COLOR][COLOR= #007700]->[/COLOR][URL="http://www.php.net/exec"]exec[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]"insert into staff (id, first, last) values (23, Joe, Bloggs)"[/COLOR][COLOR= #007700]);[/COLOR]
  [COLOR= #0000BB]$dbh[/COLOR][COLOR= #007700]->[/COLOR][URL="http://www.php.net/exec"]exec[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]"insert into salarychange (id, amount, changedate) 
      values (23, 50000, NOW())"[/COLOR][COLOR= #007700]);[/COLOR]
  [COLOR= #0000BB]$dbh[/COLOR][COLOR= #007700]->[/COLOR]commit[COLOR= #007700]();[/COLOR] [COLOR= #FF8000]// HIER IS HET GECOMMIT = 100% uitgevoerd![/COLOR]
  
[COLOR= #007700]}[/COLOR] catch [COLOR= #007700]([/COLOR]Exception [COLOR= #0000BB]$e[/COLOR][COLOR= #007700]) {[/COLOR]
  [COLOR= #0000BB]$dbh[/COLOR][COLOR= #007700]->[/COLOR]rollBack[COLOR= #007700]();[/COLOR] [COLOR= #FF8000]// HIER IS DE ROLLBACK. 
  // Wanneer er een exception is doe je een rollback, de voorgaande exec() in de transactie worden dan weer ongedaan gemaakt.[/COLOR]
  [URL="http://www.php.net/echo"]echo[/URL] [COLOR= #DD0000]"Failed: "[/COLOR] [COLOR= #007700].[/COLOR] [COLOR= #0000BB]$e[/COLOR][COLOR= #007700]->[/COLOR]getMessage[COLOR= #007700]();
}[/COLOR]
?>
0
Berichten
35.796
Reputatie
1
Punten
0,00
Lid sinds
Laatst gezien
Of je maakt gewoon een cronjob die elke X minuten alles overstuurt. Server 1 stuurt dan de data naar server 2, server 2 stuurt OK terug als de data is verwerkt, en als server 1 OK terugkrijgt dan haalt ie de verstuurde data uit de database (of zet je verzonden op 1 ofzo).

Als de verbinding verbroken wordt tijdens het verzenden dan krijgt server 1 geen OK terug, dus blijft de data behouden. x minuten later wordt het dan opnieuw geprobeerd en wordt de data alsnog toegevoegd. Op server 2 check je of de data al is toegevoegd (door simpelweg je tabel een uniek id mee te geven), en zo ja dan skip je die data.

toevoeging op 11 december 2014, 21:05:38:
Je kunt ook op server 2 een database draaien, en server 1 extern met die database laten verbinden zodat ie meteen daar de data in wegschrijft.
Dan zit je alleen met eventuele storingen op de lijn.
0
Bartv

Lid · Topicstarter

Berichten
4.451
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Lennard schreef:
Of je maakt gewoon een cronjob die elke X minuten alles overstuurt. Server 1 stuurt dan de data naar server 2, server 2 stuurt OK terug als de data is verwerkt, en als server 1 OK terugkrijgt dan haalt ie de verstuurde data uit de database (of zet je verzonden op 1 ofzo).

Als de verbinding verbroken wordt tijdens het verzenden dan krijgt server 1 geen OK terug, dus blijft de data behouden. x minuten later wordt het dan opnieuw geprobeerd en wordt de data alsnog toegevoegd. Op server 2 check je of de data al is toegevoegd (door simpelweg je tabel een uniek id mee te geven), en zo ja dan skip je die data.
toevoeging op 11 december 2014, 21:05:38:
Je kunt ook op server 2 een database draaien, en server 1 extern met die database laten verbinden zodat ie meteen daar de data in wegschrijft.
Dan zit je alleen met eventuele storingen op de lijn.

Jaa ik heb nu, zoals Jesse zei, 1 grote query gemaakt uit de JSON. Dit werkt nu goed, want als dit verkeerd gaat, staat er gewoon niks in de database.

En direct doorsturen zit je idd met de storing, dus dat was geen optie. T werkt nu en bedankt voor t meedenken pompom
0
Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
Waarom niet serialize ipv json gebruiken?
0
Bartv

Lid · Topicstarter

Berichten
4.451
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Dylanh schreef:
Waarom niet serialize ipv json gebruiken?
Had ook gekund, t werkt nu met JSON ook goed smileEn waarom met serialize werken ipv JSON?
0
Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
Ik weet niet hoe je het uitleest maar als ik iets uit wil lezen met javascript zou ik JSON gebruiken. Als ik het met php opsla en wil uitlezen met php zou ik serialize() gebruiken.
0
Bartv

Lid · Topicstarter

Berichten
4.451
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Dylanh schreef:
Ik weet niet hoe je het uitleest maar als ik iets uit wil lezen met javascript zou ik JSON gebruiken. Als ik het met php opsla en wil uitlezen met php zou ik serialize() gebruiken.
Gewoon, JSON decode weer en dan een foreach. Werkt prima thumbsupEn als ik t ooit wil veranderen naar NodeJS of javascript, dan kan ik dat makkelijk doenpompom
0

Jouw reactie

Deel je idee, stel een vraag of help een ander verder.

Editor laden…

Praat mee met de One2xs-community.

Inloggen om te reageren