2017-11-03 16 views
0

私の最初の投稿はこちらですので、あまり冗長ではないことを願っています。 rrdtool設定で10行しか持たないためにデータポイントが失われていて、古いデータでバックアップソースファイルから更新したいと思っていました。設定を使用して作成されたカウント行を固定した後 :rrdtoolデータベースを更新しています

rrdtool create dailySolax.rrd \ 
--start 1451606400 \ 
--step 21600 \ 
DS:toGrid:GAUGE:172800:0:100000 \ 
DS:fromGrid:GAUGE:172800:0:100000 \ 
DS:totalEnerg:GAUGE:172800:0:100000 \ 
DS:BattNow:GAUGE:1200:0:300 \ 
RRA:LAST:0.5:1d:1010 \ 
RRA:MAX:0.5:1d:1010 \ 
RRA:MAX:0.5:1M:1010 

とPythonで更新ラインが

newline = ToGrid + ':' + FromGrid + ':' + TotalEnergy + ':' + battNow 
UpdateE = 'N:'+ (newline) 
print UpdateE 
try: 
    rrdtool.update(
    "%s/dailySolax.rrd" % (os.path.dirname(os.path.abspath(__file__))), 
    UpdateE) 

これ全てでは(crontabbedウェブサイトのスクレープから)元のデータを入力するための罰金働いていたが、私が言ったように、私はデータを失い、以前のデータポイントを戻したいと思っていました。私のバックアップソースから は、私が最初のフィールドは、タイムスタンプです

1509386401:10876.9:3446.22:18489.2:19.0 
1509408001:10879.76:3446.99:18495.7:100.0 

のように見えるラインを持つプレーンテキストファイルを持っていました。そして、更新のためのラインで読むためにこのコードを使用:

with open("rrdRecovery.txt","r") as fp: 
    for line in fp: 
     print line 
## newline = ToGrid + ':' + FromGrid + ':' + TotalEnergy + ':' + battNow 
    UpdateE = line 
    try: 
     rrdtool.updatev(
     "%s/dailySolax.rrd" % (os.path.dirname(os.path.abspath(__file__))), 
     UpdateE) 

それは私が同じ設定を使用して作成した空のデータベースで再度試してみましたデータベースの現在のバージョンのコピーでは正しく動作しませんでしたとき。 それぞれの場合、更新はデータベース内のタイムスタンプデータのみになり、他のフィールドのデータは失われます。 Pythonが不満をされていないと私は

N:10876.9:3446.22:18489.2:19.0 

ダンプはすべてのフィールドの最終更新データを示しているが、その後、このRRAデータベースの

<!-- 2017-10-31 11:00:00 AEDT/1509408000 --> <row><v>NaN</v><v>NaN</v><v>NaN</v><v>NaN</v></row> 
が行うように

1509386401:10876.9:3446.22:18489.2:19.0 

が同じことを更新してしまうと予想

Pythonの問題があるかどうかわかりません - rrdtoolは問題を理解している可能性が高いです。任意のポインターをありがとう。

答えて

0

問題は、RRDToolタイムスタンプは、増加する必要があります。が増加している必要があります。つまり、RRAの長さを増やすと(過去に戻って)、これらのポイントに直接データを入れることはできません。時間の経過とともに新しいデータが最後に追加されます。また、新しいRRDを作成すると、「最終更新日時」の既定値はNOWになります。

以前のタイムスタンプのログがある場合は、この履歴を追加することができます。これを完了する前に「今すぐ」の更新を行わない限りです。

最初に、最初の履歴更新よりも「開始」時刻が早いRRDを作成します。

次に、すべての履歴更新を適切なタイムスタンプで時間順に処理します。

最後に、通常の「今」アップデートを開始することができます。

過去のデータ入力をすべて実行する前に、新しいデータを追加していた場合、または過去のタイムスタンプの後に開始時刻を指定してRRDを作成した場合は、通常のcronjobを追加したことが考えられます。

+0

yr replyに感謝します。 上記の私の問題のいくつかは、連続したRESIZEコマンドを使用することから来たようです。 '1755 rrdtoolスクリプトのサイズ変更/ dailySolax。rrd 0 GROW 1000 1756 rrdtool resize scripts/dailySolax.rrd 1 GROW 1000 1757 rrdtool resize scripts/dailySolax.rrd 2 GROW 1000' すべてのRRAの行数が正しく増加しませんでした。 ただし、新しいRRDを作成してPythonスクリプトを実行すると、4番目のデータフィールドは更新されません。 –

+0

私は: 'rrdtool update dailySolaxTemp.rrd 1508371201:10740.95:3430.97:18259.2:58.0' と同じことを行い、rrdでは" 58.0 "が" NaN "になります。更新行にエラーがある場合、私はそれを見ることができません。 –

+0

Ok rrdパラメータを調整しました。問題を引き起こす改行文字やCR文字があることを示すエラーが表示されるようになりました。 –

関連する問題