Question
[Résolu]convertir des données venant de ntpstats
- Gabriel
-
Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 248
- Remerciements reçus 1
il y a 16 ans 7 mois #4994
par Gabriel
[Résolu]convertir des données venant de ntpstats a été créé par Gabriel
Bonjour bonjour 
je viens de lire \"Créer de beaux graphiques avec les MS Chart Controls\" powershell-scripting.com/index.php?optio...id=297&Itemid=80 et je veux jouer avec.
comme challenge que je me suis mis c'est d'interpreter un fichier de stat ntp.
Probleme: le coquin me donne des unités de temps un peu curieuses...
[code:1]55038 10.100 -0.000105494 -8.885 0.000007392 0.001500 4
55038 32.100 -0.000105930 -8.887 0.000006923 0.001515 4
55038 84.099 -0.000104268 -8.888 0.000006502 0.001524 4[/code:1]
les valeurs de temps sont les 2 premieres colonnes
55038 indique la \"date\" et 32.100 l'\"heure\".
Je suppose que la date est au format nombre de jour depuis 1 janvier 1970, quand à l'heure c'est le nombre de seconde ecoulées depuis 00h00 du jour en cour, ex: 9104 c'est 2h31m44s du matin.
y a t il un get-date qui convertisse le 55038 et 9104 directement ou je dois me faire une fonction... et la je vous demanderais un peut d'aide... lol:whistle:
Merci d'avance.<br><br>Message édité par: tonic8, à: 13/08/09 17:34
je viens de lire \"Créer de beaux graphiques avec les MS Chart Controls\" powershell-scripting.com/index.php?optio...id=297&Itemid=80 et je veux jouer avec.
comme challenge que je me suis mis c'est d'interpreter un fichier de stat ntp.
Probleme: le coquin me donne des unités de temps un peu curieuses...
[code:1]55038 10.100 -0.000105494 -8.885 0.000007392 0.001500 4
55038 32.100 -0.000105930 -8.887 0.000006923 0.001515 4
55038 84.099 -0.000104268 -8.888 0.000006502 0.001524 4[/code:1]
les valeurs de temps sont les 2 premieres colonnes
55038 indique la \"date\" et 32.100 l'\"heure\".
Je suppose que la date est au format nombre de jour depuis 1 janvier 1970, quand à l'heure c'est le nombre de seconde ecoulées depuis 00h00 du jour en cour, ex: 9104 c'est 2h31m44s du matin.
y a t il un get-date qui convertisse le 55038 et 9104 directement ou je dois me faire une fonction... et la je vous demanderais un peut d'aide... lol:whistle:
Merci d'avance.<br><br>Message édité par: tonic8, à: 13/08/09 17:34
Connexion ou Créer un compte pour participer à la conversation.
- Gabriel
-
Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 248
- Remerciements reçus 1
il y a 16 ans 7 mois #5019
par Gabriel
Réponse de Gabriel sur le sujet Re:convertir des données venant de ntpstats
Bon alors ca a l'air mal partie cette affaire... mais on va eclaircir tout ca...
le ntp utilise un format le MJD (Modified Julain Day) ou JJM (Jour Julien Modifié)... Perso jamais entendu parlé. Pour palier mon manque de culture astronautique (et vi c'est a cause d'eux) j'ia recherché...
... et trouvé comme d'hab mon copain wikipedia fr.wikipedia.org/wiki/Jour_julien
ca donne ca comme formule
avec $a le jour (lisible par un humain) dans le fichier ntpstat
[code:1]
PS C:\> $a = (get-date -Date 1858/11/17).adddays(55038)
PS C:\> $a
Sunday, July 26, 2009 12:00:00 AM
[/code:1]
prochain post l'heure...
le ntp utilise un format le MJD (Modified Julain Day) ou JJM (Jour Julien Modifié)... Perso jamais entendu parlé. Pour palier mon manque de culture astronautique (et vi c'est a cause d'eux) j'ia recherché...
... et trouvé comme d'hab mon copain wikipedia fr.wikipedia.org/wiki/Jour_julien
ca donne ca comme formule
avec $a le jour (lisible par un humain) dans le fichier ntpstat
[code:1]
PS C:\> $a = (get-date -Date 1858/11/17).adddays(55038)
PS C:\> $a
Sunday, July 26, 2009 12:00:00 AM
[/code:1]
prochain post l'heure...
Connexion ou Créer un compte pour participer à la conversation.
- Gabriel
-
Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 248
- Remerciements reçus 1
il y a 16 ans 7 mois #5022
par Gabriel
Réponse de Gabriel sur le sujet Re:convertir des données venant de ntpstats
Bon la suite le \"temps\":
comment a partir de la valeur 79042.949s qui est le temps en seconde ecoulé depuis minuit... obtenir le temps en hhmmss
On utilise une division qui ne renvoie que la valeur AVANT la virgule genre 10/6 normalement on a 1.66666666666667, la la division ne doit renvoyer que 1
trouvé sur le site de microsoft l'operaiton qu'il faut faire www.microsoft.com/technet/scriptcenter/t...integerdivision.mspx
ce qui donne
[code:1]# le temps en seconde
#$sec = 79042.949 # la valeur en seconde commentée c'est pour le fichier NTP qui me tles seconde avec 3 decimales (donc on pourrait calculer a la milliseconde)
$sec = 79042
# lorsqu'on utilise la fonction [math]::floor on divise en ne recuperant que le chiffre avant la \",\"
# obtenir les heures
$zh = [math]::floor([int] $sec / [int] 3600)
#obtenir les minutes
$zm = [math]::floor([int] $sec/ [int] 60) - $zh*60
#obtenir les secondes
#$zs = [math]::floor([int] $sec - [int] ($zh*3600 + $zm*60)) # cette formule permet de calculer les seconde sur 2 digits (sans virgule si le temps en seconde a ete mis avec les millisecondes genre 7499.365
$zs = $sec - ($zh*3600 + $zm*60)
# l'heure est donc
$temps = [string] $zh + \"h\" + [string] $zm + \"m\" + [string] $zs + \"s\"
echo $temps
[/code:1]
comment a partir de la valeur 79042.949s qui est le temps en seconde ecoulé depuis minuit... obtenir le temps en hhmmss
On utilise une division qui ne renvoie que la valeur AVANT la virgule genre 10/6 normalement on a 1.66666666666667, la la division ne doit renvoyer que 1
trouvé sur le site de microsoft l'operaiton qu'il faut faire www.microsoft.com/technet/scriptcenter/t...integerdivision.mspx
ce qui donne
[code:1]# le temps en seconde
#$sec = 79042.949 # la valeur en seconde commentée c'est pour le fichier NTP qui me tles seconde avec 3 decimales (donc on pourrait calculer a la milliseconde)
$sec = 79042
# lorsqu'on utilise la fonction [math]::floor on divise en ne recuperant que le chiffre avant la \",\"
# obtenir les heures
$zh = [math]::floor([int] $sec / [int] 3600)
#obtenir les minutes
$zm = [math]::floor([int] $sec/ [int] 60) - $zh*60
#obtenir les secondes
#$zs = [math]::floor([int] $sec - [int] ($zh*3600 + $zm*60)) # cette formule permet de calculer les seconde sur 2 digits (sans virgule si le temps en seconde a ete mis avec les millisecondes genre 7499.365
$zs = $sec - ($zh*3600 + $zm*60)
# l'heure est donc
$temps = [string] $zh + \"h\" + [string] $zm + \"m\" + [string] $zs + \"s\"
echo $temps
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Gabriel
-
Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 248
- Remerciements reçus 1
il y a 16 ans 7 mois #5023
par Gabriel
Réponse de Gabriel sur le sujet Re:convertir des données venant de ntpstats
1 chose curieuse avec le ntp
le MJD ou JJM:
le Jour Julien Modifié est utilisé en astronomie pour plusieurs raisons, dont celle-ci:
le JJM démarre à 12h00 (soit midi) ce qui permet lorsque des observations astromiques sont faites dans le nuit de les inscrire à une seule et même Journee Julienne Modifiée.
Hors le fichier ntpstats lui dans sa conf de base (generation d'un fichier par jour) il va de 00h00m00 (soit minuit) à 23h59m59 et la valeur indiquant le jour dans le fichier) est toujours la meme. A midi il ne change pas de JJM...
voila un peu de culture que je viens d'étaler.
comme disais Pierre Desproges
le MJD ou JJM:
le Jour Julien Modifié est utilisé en astronomie pour plusieurs raisons, dont celle-ci:
le JJM démarre à 12h00 (soit midi) ce qui permet lorsque des observations astromiques sont faites dans le nuit de les inscrire à une seule et même Journee Julienne Modifiée.
Hors le fichier ntpstats lui dans sa conf de base (generation d'un fichier par jour) il va de 00h00m00 (soit minuit) à 23h59m59 et la valeur indiquant le jour dans le fichier) est toujours la meme. A midi il ne change pas de JJM...
comme disais Pierre Desproges
\"La culture c'est comme la confiture, moins on en a plus on l'étale.\"
Connexion ou Créer un compte pour participer à la conversation.
- Gabriel
-
Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 248
- Remerciements reçus 1
il y a 16 ans 7 mois #5024
par Gabriel
Réponse de Gabriel sur le sujet Re:convertir des données venant de ntpstats
Bon alors maintenant on attaque le truc que j'ai pas compris (faut le faire quand même...)
dans le tuto de Richard MacDonald, il fait un joli laius sur les barres mais ca va trop vite ensuite... son exemple il aurait pu etre plus claire sur les lignes...
Je n'arrives pas a generer de graphe en courbe...
ca c'est dans la creation des parametres du graphe que j'arrive pas...
Une petite aide?
je vois pas ou mettre le modele de graph.
[code:1]
# create chart object
$Chart = New-Object System.Windows.Forms.DataVisualization.Charting.Chart
$Chart.Width = 500
$Chart.Height = 400
$Chart.Left = 40
$Chart.Top = 30
# create a line graph to draw on and add to chart
# $ChartArea = New-Object System.Windows.Forms.DataVisualization.Charting.ChartArea
# set chart type
$Chart.ChartAreas.Add($ChartType)
[/code:1]
dans le tuto de Richard MacDonald, il fait un joli laius sur les barres mais ca va trop vite ensuite... son exemple il aurait pu etre plus claire sur les lignes...
Je n'arrives pas a generer de graphe en courbe...
ca c'est dans la creation des parametres du graphe que j'arrive pas...
Une petite aide?
je vois pas ou mettre le modele de graph.
[code:1]
# create chart object
$Chart = New-Object System.Windows.Forms.DataVisualization.Charting.Chart
$Chart.Width = 500
$Chart.Height = 400
$Chart.Left = 40
$Chart.Top = 30
# create a line graph to draw on and add to chart
# $ChartArea = New-Object System.Windows.Forms.DataVisualization.Charting.ChartArea
# set chart type
$Chart.ChartAreas.Add($ChartType)
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Gabriel
-
Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 248
- Remerciements reçus 1
il y a 16 ans 7 mois #5033
par Gabriel
Réponse de Gabriel sur le sujet Re:convertir des données venant de ntpstats
bon a priori j'ai trouvé mais je bloque ailleurs
[code:1]# load the appropriate assemblies
[void][Reflection.Assembly]::LoadWithPartialName(\"System.Windows.Forms\"«»)
[void][Reflection.Assembly]::LoadWithPartialName(\"System.Windows.Forms.DataVisualization\"«»)
# importation des infos
$header = \"day\",\"second\",\"offset\",\"drift compensation\",\"estimated error\",\"stability\",\"polling interval\"
$a = Import-Csv -delimiter ' ' -header $header loopstats.20090726
# create chart object
$Chart = New-Object System.Windows.Forms.DataVisualization.Charting.Chart
$Chart.Width = 500
$Chart.Height = 400
$Chart.Left = 40
$Chart.Top = 30
# create a line graph to draw on and add to chart
# $ChartArea = New-Object System.Windows.Forms.DataVisualization.Charting.ChartArea
# set chart type
[void]$Chart.Series.Add(\"Data\"«»)
$Chart.Series[\"Data\"].Points.DataBindXY($a.second, $a.offset)
$Chart.Series[\"Data\"].ChartType = [System.Windows.Forms.DataVisualization.Charting.SeriesChartType]::FastLine
# display the chart on a form
$Chart.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Right -bor
[System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
$Form = New-Object Windows.Forms.Form
$Form.Text = \"PowerShell Chart\"
$Form.Width = 600
$Form.Height = 600
$Form.controls.add($Chart)
$Form.Add_Shown({$Form.Activate()})
$Form.ShowDialog()
[/code:1]
avec ca j'ai comme message
[code:1]PS C:\workspace\dev\trunk\ps\BacASable\ntp-graph> .\ntp-graph3.ps1
Exception calling \"DataBindXY\" with \"2\" argument(s): \"La valeur ne peut pas être null.
Nom du paramètre : yValues\"
At C:\workspace\dev\trunk\ps\BacASable\ntp-graph\ntp-graph3.ps1:34 char:40
+ $Chart.Series[\"Data\"].Points.DataBindXY <<<< ($a.second, $a.offset)
+ CategoryInfo : NotSpecified: (:«») [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException[/code:1]
une idee?
[code:1]# load the appropriate assemblies
[void][Reflection.Assembly]::LoadWithPartialName(\"System.Windows.Forms\"«»)
[void][Reflection.Assembly]::LoadWithPartialName(\"System.Windows.Forms.DataVisualization\"«»)
# importation des infos
$header = \"day\",\"second\",\"offset\",\"drift compensation\",\"estimated error\",\"stability\",\"polling interval\"
$a = Import-Csv -delimiter ' ' -header $header loopstats.20090726
# create chart object
$Chart = New-Object System.Windows.Forms.DataVisualization.Charting.Chart
$Chart.Width = 500
$Chart.Height = 400
$Chart.Left = 40
$Chart.Top = 30
# create a line graph to draw on and add to chart
# $ChartArea = New-Object System.Windows.Forms.DataVisualization.Charting.ChartArea
# set chart type
[void]$Chart.Series.Add(\"Data\"«»)
$Chart.Series[\"Data\"].Points.DataBindXY($a.second, $a.offset)
$Chart.Series[\"Data\"].ChartType = [System.Windows.Forms.DataVisualization.Charting.SeriesChartType]::FastLine
# display the chart on a form
$Chart.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Right -bor
[System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left
$Form = New-Object Windows.Forms.Form
$Form.Text = \"PowerShell Chart\"
$Form.Width = 600
$Form.Height = 600
$Form.controls.add($Chart)
$Form.Add_Shown({$Form.Activate()})
$Form.ShowDialog()
[/code:1]
avec ca j'ai comme message
[code:1]PS C:\workspace\dev\trunk\ps\BacASable\ntp-graph> .\ntp-graph3.ps1
Exception calling \"DataBindXY\" with \"2\" argument(s): \"La valeur ne peut pas être null.
Nom du paramètre : yValues\"
At C:\workspace\dev\trunk\ps\BacASable\ntp-graph\ntp-graph3.ps1:34 char:40
+ $Chart.Series[\"Data\"].Points.DataBindXY <<<< ($a.second, $a.offset)
+ CategoryInfo : NotSpecified: (:«») [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException[/code:1]
une idee?
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.055 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [Résolu]convertir des données venant de ntpstats