1

Zabbix APIからデータをフェッチすることで、サーバーの可用性(および、これが機能した後は他のこと)を視覚化しようとしています。返されるデータが[ここ][1]のように見える例は、ZabbixAPIドキュメントで確認できます。

データの取得は問題ではありませんが、d3.jsのデータの結合に問題があります。つまり、これをどのように行うのかということです。

データをフェッチした後、アルファベット順に並べ替えられたサーバーの配列を取得します。新しいサーバーを表示し、削除されたサーバーを削除し、可用性の変更(または将来的には)を色などで反映させます。考えるかもしれません。

重要なのは、グラフを再初期化するのではなく、ノードを追加または削除するだけでグラフを更新する必要があるということです。

これは私が問題を抱えているビットです。リストにノードをどんどん追加して(クリアすることはありません)、新しいデータをフェッチするたびにノードを「再描画」することができました。つまり、すべてのノードが再度追加され、それらのように中央にスナップします。最初にページをロードするときに行います。

そして、すべてのノードが左上隅でスタックする結果となった3番目。

後者は私のコードの現在の状態です。

私はこの時点で何が間違っているのか少しわかりません。とにかくリンクがなくても、必要なものにかなり近いように見えるこれを見ていました(今のところ)。これは正常に機能し、コードでその動作を再現しようとしましたが、機能しません。

誰かが私のためにいくつかのポインタを持っていれば、それは素晴らしいことです。私はこの1週間、これ以上仕事をすることなくこれで遊んでいます:)

ありがとう!

職場ではZabbixにしかアクセスできないため、実際にテストできるのはCET時間の16〜21時間で、これは今日さらに約4時間です。誰かが夜中に何か提案があれば、私は明日それを試してみます:D

GitHubの私のコードは、私の投稿の下のリンクにあります。このサイトでのこの評判の欠如により、私の投稿に2つのリンクしか追加できない暗い穴に私を入れてしまったからです。

なぜこれはグローバルではないのですか?他のSEサイトに10人以上の担当者がいます。

編集:

まだ問題がありますが、データが更新されるたびに、最初にロードしたときと同じように円が「入り」ます。http: //mbostock.github.com/d3/talk/20111018/collision.html 今何をすべきかわからない: //

4

1 に答える 1

1

そこに記載されているのは、D3 のデフォルトの動作です。ノードを追加すると、左上隅に挿入されます。この動作を変更するには、独自の配置方法を記述し、各ノードを力有向グラフに追加するときに各ノードの X と Y を直接設定します。

トリックは、このアルゴリズムを適用することです:

1) ビューポートの制限を計算し (たとえば、描画領域の制限 - 20)、強制指向のバインドの例 ( http://bl.ocks.org/1129492 )のトリックを使用します。

2) 次に、視覚化の目盛りごとに次のことを行います。ノードをビューポートに保持する力を計算します。

3) ノードをビューポートに保持するアルゴリズムは、次のようなものになります。ノードごとに、4 方向 (左上、左下、右上、右下) に適用できる力に従って X と Y を計算します。左上に近い場合は、それに応じて X と Y を設定します..とにかく、画面の外にはなりません....

もう 1 つのトリックは、中央にルート ノードを設定することです (この投稿を参照してください: How do I set the focus node in a D3.js Force Directed Graph? )。それはあなたのグラフを安定させるのに役立ちます。もう 1 つのアドバイスは、ajax 呼び出しと再描画を混在させないようにすることです。理想的には、いくつかのコールバックを使用し、データが読み込まれるときに redraw を呼び出します。そうしないと、スパゲッティ コードになってしまいます (強制有向グラフが 1000 行を超えることは珍しくありません)。

それが役に立てば幸い。

于 2012-06-26T18:06:02.520 に答える