ネットワークとアプリのモニターとして機能するRailsでアプリケーションを開発しています。メインページとしてActiveAdminDashboardを使用しており、ネットワーク内のすべてのサーバーと一部のアプリのステータスを表示しています。x分ごとに自動更新するようにダッシュボードページを構成したいのですが、ダッシュボードによってレンダリングされるhtmlを完全に制御できないため、この設定をどこで構成するかわかりません。誰かがそれをなんとかやったことがありますか?
ありがとう
ネットワークとアプリのモニターとして機能するRailsでアプリケーションを開発しています。メインページとしてActiveAdminDashboardを使用しており、ネットワーク内のすべてのサーバーと一部のアプリのステータスを表示しています。x分ごとに自動更新するようにダッシュボードページを構成したいのですが、ダッシュボードによってレンダリングされるhtmlを完全に制御できないため、この設定をどこで構成するかわかりません。誰かがそれをなんとかやったことがありますか?
ありがとう
config / initializers / active_admin.rbで、JavaScriptを登録できます。
config.register_javascript "/javascripts/admin-auto-refresh.js"
次に、まさにそれを行うadmin-auto-refresh.jsを作成します。
また、config / environment/production.rbにadmin-auto-refresh.jsを登録することもできます。
config.assets.precompile += "admin-auto-refresh.js"
アップデート:
5秒後にページを更新するためのコードを追加しました。これをに追加/javascripts/admin-auto-refresh.js
$(function() {
setTimeout(location.reload(true), 5000);
})
@JesseWolgamottに感謝します。これが最終的なコードです。
$(function() {
var sPath = window.location.pathname;
var sPage = sPath.substring(sPath.lastIndexOf('/') + 1);
if (sPage == 'admin'){
setTimeout("location.reload(true);", 10000);
}
})
以下は、ページが点滅せずに更新されるコードです。これは、needs_updatingのクラスタグを持つページに少なくとも1つの要素を含めることで有効になります。ロードされるJavaScriptにこのコードスニペットを含めてから、ページの任意の場所にタグを追加します。
唯一の欠点は、これはページのhtml本文のみを更新することです。
例えば
show do |my_model|
...
if my_model.processing?
row :status, class: 'needs_updating' do
'we are working on it...'
end
else
row :status do
'ready'
end
end
....
end
したがって、モデルがまだ処理中の場合は、クラスタグ「needs_updating」を取得します。これにより、以下のjavascriptが10秒ごとに呼び出されます。
jQuery(document).ready(function($) {
if ($('.needs_updating').length > 0) {
console.log("we need some updating soon");
var timer = setTimeout(function () {
console.log("re-loading now");
$.ajax({
url: "",
context: document.body,
success: function(s,x) {
$(this).html(s);
if ($('.needs_updating').length == 0) {
clearInterval(timer);
}
}
});
}, 10000)
}
})