You've already forked wp-prometheus
feat: Add persistent storage support for Redis and APCu (v0.4.0)
All checks were successful
Create Release Package / build-release (push) Successful in 56s
All checks were successful
Create Release Package / build-release (push) Successful in 56s
- Add StorageFactory class for storage adapter selection with fallback - Support Redis storage for shared metrics across instances - Support APCu storage for high-performance single-server deployments - Add Storage tab in admin settings with configuration UI - Add connection testing for Redis and APCu adapters - Support environment variables for Docker/containerized deployments - Update Collector to use StorageFactory instead of hardcoded InMemory - Add all translations (English and German) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -21,6 +21,9 @@
|
||||
|
||||
// Runtime metrics reset handler.
|
||||
initResetRuntimeHandler();
|
||||
|
||||
// Storage tab handlers.
|
||||
initStorageHandlers();
|
||||
});
|
||||
|
||||
/**
|
||||
@@ -613,4 +616,131 @@
|
||||
document.body.removeChild(a);
|
||||
URL.revokeObjectURL(url);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize storage tab handlers.
|
||||
*/
|
||||
function initStorageHandlers() {
|
||||
var $form = $('#wp-prometheus-storage-form');
|
||||
var $adapterSelect = $('#storage-adapter');
|
||||
|
||||
// Show/hide adapter-specific config.
|
||||
$adapterSelect.on('change', function() {
|
||||
var adapter = $(this).val();
|
||||
$('#redis-config').toggle(adapter === 'redis');
|
||||
$('#apcu-config').toggle(adapter === 'apcu');
|
||||
});
|
||||
|
||||
// Save storage settings.
|
||||
$form.on('submit', function(e) {
|
||||
e.preventDefault();
|
||||
saveStorageSettings();
|
||||
});
|
||||
|
||||
// Test storage connection.
|
||||
$('#test-storage').on('click', function() {
|
||||
testStorageConnection();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Save storage settings via AJAX.
|
||||
*/
|
||||
function saveStorageSettings() {
|
||||
var $spinner = $('#wp-prometheus-storage-spinner');
|
||||
var $message = $('#wp-prometheus-storage-message');
|
||||
var $form = $('#wp-prometheus-storage-form');
|
||||
|
||||
$spinner.addClass('is-active');
|
||||
$message.hide();
|
||||
|
||||
var formData = $form.serialize();
|
||||
formData += '&action=wp_prometheus_save_storage';
|
||||
formData += '&nonce=' + wpPrometheus.storageNonce;
|
||||
|
||||
$.ajax({
|
||||
url: wpPrometheus.ajaxUrl,
|
||||
type: 'POST',
|
||||
data: formData,
|
||||
success: function(response) {
|
||||
$spinner.removeClass('is-active');
|
||||
|
||||
if (response.success) {
|
||||
var noticeClass = response.data.warning ? 'notice-warning' : 'notice-success';
|
||||
$message
|
||||
.removeClass('notice-error notice-success notice-warning')
|
||||
.addClass('notice ' + noticeClass)
|
||||
.html('<p>' + response.data.message + '</p>')
|
||||
.show();
|
||||
|
||||
if (!response.data.warning) {
|
||||
setTimeout(function() {
|
||||
location.reload();
|
||||
}, 1500);
|
||||
}
|
||||
} else {
|
||||
$message
|
||||
.removeClass('notice-success notice-warning')
|
||||
.addClass('notice notice-error')
|
||||
.html('<p>' + (response.data.message || 'An error occurred.') + '</p>')
|
||||
.show();
|
||||
}
|
||||
},
|
||||
error: function() {
|
||||
$spinner.removeClass('is-active');
|
||||
$message
|
||||
.removeClass('notice-success notice-warning')
|
||||
.addClass('notice notice-error')
|
||||
.html('<p>Connection error. Please try again.</p>')
|
||||
.show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Test storage connection via AJAX.
|
||||
*/
|
||||
function testStorageConnection() {
|
||||
var $spinner = $('#wp-prometheus-storage-spinner');
|
||||
var $message = $('#wp-prometheus-storage-message');
|
||||
var $form = $('#wp-prometheus-storage-form');
|
||||
|
||||
$spinner.addClass('is-active');
|
||||
$message.hide();
|
||||
|
||||
var formData = $form.serialize();
|
||||
formData += '&action=wp_prometheus_test_storage';
|
||||
formData += '&nonce=' + wpPrometheus.storageNonce;
|
||||
|
||||
$.ajax({
|
||||
url: wpPrometheus.ajaxUrl,
|
||||
type: 'POST',
|
||||
data: formData,
|
||||
success: function(response) {
|
||||
$spinner.removeClass('is-active');
|
||||
|
||||
if (response.success) {
|
||||
$message
|
||||
.removeClass('notice-error notice-warning')
|
||||
.addClass('notice notice-success')
|
||||
.html('<p>' + response.data.message + '</p>')
|
||||
.show();
|
||||
} else {
|
||||
$message
|
||||
.removeClass('notice-success notice-warning')
|
||||
.addClass('notice notice-error')
|
||||
.html('<p>' + (response.data.message || 'Connection test failed.') + '</p>')
|
||||
.show();
|
||||
}
|
||||
},
|
||||
error: function() {
|
||||
$spinner.removeClass('is-active');
|
||||
$message
|
||||
.removeClass('notice-success notice-warning')
|
||||
.addClass('notice notice-error')
|
||||
.html('<p>Connection error. Please try again.</p>')
|
||||
.show();
|
||||
}
|
||||
});
|
||||
}
|
||||
})(jQuery);
|
||||
|
||||
Reference in New Issue
Block a user