# Monitoring Disk Usage

## GET ID Location

Klik nama lokasi yang ingin di monitoring di aplikasi, ambil ID dari URL&#x20;

```url
http://103.175.220.168/locations/01J0ZBWXWZB54NCYYMYCFZ9ZCT/edit <-- URL
01J0ZBWXWZB54NCYYMYCFZ9ZC <-- ID Lokasi
```

## Windows 10/11

### **PowerShell + `Invoke-RestMethod`**

**🔧 Script PowerShell:**

```powershell
# Ambil info disk C:
$disk = Get-WmiObject Win32_LogicalDisk -Filter "DeviceID = 'C:'" #ubah partisi tempat mysql data
$locationId = "ID Location" #ubah id lokasi didapat dari aplikasi
$mountPoint = "C:" #ubah partisi sesuai DeviceID
$size = "{0:N2}" -f ($disk.Size / 1GB)
$used = "{0:N2}" -f (($disk.Size - $disk.FreeSpace) / 1GB)
$available = "{0:N2}" -f ($disk.FreeSpace / 1GB)
$usagePercent = "{0:N0}" -f ((($disk.Size - $disk.FreeSpace) / $disk.Size) * 100)

# Buat payload JSON
$payload = @{
    location_id    = $locationId
    mount_point    = $mountPoint
    size           = $size
    used           = $used
    available      = $available
    usage_percent  = $usagePercent
} | ConvertTo-Json

# Kirim ke Laravel API
Invoke-RestMethod -Uri "http://103.175.220.168/api/disk-usages" `
    -Method Post `
    -Body $payload `
    -ContentType "application/json"
```

#### **Buat script `.ps1` lalu jalankan otomatis via Task Scheduler**

1. Simpan script di file, misalnya: `Send-DiskUsage.ps1`
2. Jalankan otomatis:
   * Buka **Task Scheduler**
   * **Create Basic Task**
   * Trigger: daily/hourly
   * Action: Start a program → `powershell.exe`
   * Add arguments: `-File C:\path\to\Send-DiskUsage.ps1`

***

Untuk menjalankan file PowerShell (`Send-DiskUsage.ps1`) **secara manual**, ikuti langkah-langkah berikut:

#### ✅ **Langkah 1: Pastikan file siap**

Misalnya kamu simpan file `Send-DiskUsage.ps1` di:

```
C:\Scripts\Send-DiskUsage.ps1
```

***

#### ✅ **Langkah 2: Buka PowerShell sebagai Administrator**

* Klik **Start**
* Cari "**PowerShell**"
* Klik kanan > **Run as Administrator**

***

#### ✅ **Langkah 3: Jalankan script**

Ketik perintah ini di jendela PowerShell:

```powershell
& "C:\Scripts\Send-DiskUsage.ps1"
```

Atau jika file berada di folder saat ini:

```powershell
.\Send-DiskUsage.ps1
```

***

#### ⚠️ Jika muncul error `script is disabled`, ubah execution policy:

Ketik:

```powershell
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
```

Lalu ketik `A` jika diminta konfirmasi.

***

#### ✅ Hasil

Kalau script benar dan URL API aktif, data akan terkirim dan kamu akan lihat output seperti:

```powershell
message                      data
-------                      ----
Successfully Create Resource @{location_id=01J0ZBWXWWN8ER56NQTTHZNKDP; usage_percent=96; used=113.71; available=4...
```

***

## CentOS

### Bash

#### 🛠️ 1. **Masuk ke Terminal CentOS**

Pastikan kamu login ke server CentOS, sebagai user yang memiliki hak untuk menjalankan cron dan mengakses disk.

***

#### 📝 2. **Buat File Script**

Gunakan `nano` untuk membuat file script, misalnya di `/usr/local/bin/send-disk.sh`:

```bash
sudo nano /usr/local/bin/send-disk.sh
```

***

#### 🧾 3. **Isi Script Berikut**

```bash
#!/bin/bash

# Parameter 1 = mount point (default: /)
MOUNT_POINT=${1:-/}
LOCATION_ID="ID Location"
API_URL="http://103.175.220.168/api/disk-usages"

# Ambil nilai dalam byte
read size used available percent mount <<< $(df --block-size=1 "$MOUNT_POINT" | awk 'NR==2 {print $2, $3, $4, $5, $6}')

# Hapus tanda persen
percent=${percent%\%}

# Konversi ke GB (pembulatan 2 angka di belakang koma)
size_gb=$(awk "BEGIN {printf \"%.2f\", $size/1073741824}")
used_gb=$(awk "BEGIN {printf \"%.2f\", $used/1073741824}")
available_gb=$(awk "BEGIN {printf \"%.2f\", $available/1073741824}")

# Kirim ke API
curl -s -X POST "$API_URL" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "location_id": "'$LOCATION_ID'",
    "mount_point": "'$mount'",
    "size": "'$size_gb'",
    "used": "'$used_gb'",
    "available": "'$available_gb'",
    "usage_percent": "'$percent'"
  }'

```

***

#### 💾 4. **Simpan dan Keluar dari Nano**

Tekan:

* `CTRL + O` → Enter (untuk menyimpan)
* `CTRL + X` → (untuk keluar dari nano)

***

#### 🔐 5. **Beri Izin Eksekusi**

```bash
sudo chmod +x /usr/local/bin/send-disk.sh
```

***

#### 🧪 6. **Tes Script Manual**

Jalankan script secara manual untuk tes:

```bash
/usr/local/bin/send-disk.sh
```

Atau untuk partisi lain:

```bash
/usr/local/bin/send-disk.sh /home
```

***

#### 🕒 7. **Tambahkan ke Cronjob**

Jalankan:

```bash
crontab -e
```

Tambahkan baris berikut untuk menjalankan setiap hari :

```bash
0 0 * * * /usr/local/bin/send-disk.sh
```

#### ✅ 8. **Cek Cron Log (Opsional)**

Untuk melihat apakah cron berhasil jalan:

```bash
grep CRON /var/log/cron
```
