Skip to content

@xcons/cli-thingsboard - Widget Delete Kılavuzu

Bu dokümantasyon, XCONS ThingsBoard CLI ile widget silme işlemlerini detaylı olarak açıklar.

Widget Delete Komutu

bash
xcons-thingsboard widget delete [name] [options]

Parametreler

  • name (isteğe bağlı): Widget adı (ID yerine isim ile arama için)

Seçenekler

  • -h, --host <host>: ThingsBoard sunucu adresi (örn: 192.168.233.132:8080)
  • -u, --user <email>: ThingsBoard kullanıcı adı/email
  • -p, --pass <password>: ThingsBoard şifresi
  • -i, --id <id>: Silinecek widget'ın ID'si
  • -f, --force: Onay almadan zorla sil

Temel Kullanım

ID ile Widget Silme

bash
# Widget ID'si ile silme (en güvenli yöntem)
xcons-thingsboard widget delete \
  -h 192.168.233.132:8080 \
  -u admin@domain.com \
  -p password \
  -i cf355dd0-369a-11f0-a044-a9b78a26ce7f

# İnteraktif onay ile silme
xcons-thingsboard widget delete -i cf355dd0-369a-11f0-a044-a9b78a26ce7f

# Zorla silme (onay almadan)
xcons-thingsboard widget delete \
  -i cf355dd0-369a-11f0-a044-a9b78a26ce7f \
  --force

İsim ile Widget Silme

bash
# Widget adı ile silme (ID otomatik bulunur)
xcons-thingsboard widget delete temperature-sensor \
  -h 192.168.233.132:8080 \
  -u admin@domain.com \
  -p password

# İsim ile interaktif silme
xcons-thingsboard widget delete my-custom-widget

İnteraktif Silme

bash
# Tüm parametreler interaktif sorulur
xcons-thingsboard widget delete

İnteraktif Soru Sırası:

ThingsBoard server connection required
? ThingsBoard server host (with port): 192.168.233.132:8080
? Username/Email: admin@domain.com
? Password: [gizli giriş]
? Widget ID to delete: cf355dd0-369a-11f0-a044-a9b78a26ce7f

Silme İşlemi Süreci

1. Widget Bilgilerini Görüntüleme

Silme öncesi widget bilgileri görüntülenir:

Widget Information:
  ID: cf355dd0-369a-11f0-a044-a9b78a26ce7f
  Name: Temperature Monitor
  Type: timeseries
  Bundle: Xcon Studio
  Description: Advanced temperature monitoring widget
  Server: http://192.168.233.132:8080

2. Onay İşlemi

Force flag kullanılmadığında onay istenir:

? Are you sure you want to delete widget 'Temperature Monitor' from ThingsBoard server? This action cannot be undone. (y/N)

3. Silme İşlemi

Onay sonrası widget sunucudan silinir:

Widget 'Temperature Monitor' deleted successfully from ThingsBoard server!
Server: http://192.168.233.132:8080
Widget ID: cf355dd0-369a-11f0-a044-a9b78a26ce7f

Pratik Örnekler

Geliştirme Ortamından Silme

bash
# Development server'dan test widget'ı sil
xcons-thingsboard widget delete \
  -h localhost:8080 \
  -u tenant@thingsboard.org \
  -p tenant \
  -i test-widget-id \
  --force

Üretim Ortamından Güvenli Silme

bash
# Production server'dan dikkatli silme (onaylı)
xcons-thingsboard widget delete \
  -h production.company.com:8080 \
  -u admin@company.com \
  -p secure_password \
  -i deprecated-widget-id

Toplu Widget Temizleme

bash
# Eski widget'ları sil
old_widgets=(
  "old-widget-1-id"
  "deprecated-widget-2-id" 
  "test-widget-3-id"
)

for widget_id in "${old_widgets[@]}"; do
  echo "Deleting widget: $widget_id"
  xcons-thingsboard widget delete \
    -h server:8080 -u admin -p pass \
    -i "$widget_id" --force
done

İsim Bazlı Silme Örnekleri

bash
# Widget adı ile sil
xcons-thingsboard widget delete "Temperature Monitor" \
  -h server:8080 -u admin -p pass

# Birden fazla widget'ı isim ile sil
widget_names=("Old Dashboard" "Deprecated Chart" "Test Panel")

for name in "${widget_names[@]}"; do
  xcons-thingsboard widget delete "$name" \
    -h server:8080 -u admin -p pass --force
done

Widget ID Bulma Yöntemleri

Widget Listeden ID Alma

bash
# Önce widget'ları listele
xcons-thingsboard widget list -h server:8080 -u admin -p pass

# JSON formatında al ve ID'leri filtrele
xcons-thingsboard widget list --json \
  -h server:8080 -u admin -p pass | \
  jq -r '.[] | select(.name | contains("Temperature")) | .id'

Filtreleme ile ID Bulma

bash
# Belirli widget'ı filtrele
xcons-thingsboard widget list \
  -h server:8080 -u admin -p pass \
  --filter "Temperature Monitor" --json | \
  jq -r '.[0].id'

Script ile ID Alma

bash
#!/bin/bash

get_widget_id() {
    local host=$1
    local user=$2  
    local pass=$3
    local widget_name=$4
    
    xcons-thingsboard widget list \
        -h "$host" -u "$user" -p "$pass" \
        --json | \
        jq -r ".[] | select(.name == \"$widget_name\") | .id"
}

# Kullanım
widget_id=$(get_widget_id "server:8080" "admin" "pass" "My Widget")
if [ -n "$widget_id" ]; then
    xcons-thingsboard widget delete \
        -h "server:8080" -u "admin" -p "pass" \
        -i "$widget_id" --force
else
    echo "Widget not found: My Widget"
fi

Hata Durumları ve Çözümler

Widget Bulunamadı Hataları

Hata: Widget with ID 'widget-id' not found on server

Çözüm:

bash
# Widget ID'sini kontrol et
xcons-thingsboard widget list -h server:8080 -u admin -p pass

# Doğru ID ile tekrar dene
xcons-thingsboard widget delete -i correct-widget-id

İsim ile Bulunamadı Hataları

Hata: Widget with name 'Widget Name' not found

Çözüm:

bash
# Tam widget adını kontrol et
xcons-thingsboard widget list \
  -h server:8080 -u admin -p pass \
  --filter "partial-name"

# Doğru isim ile tekrar dene
xcons-thingsboard widget delete "Exact Widget Name"

Yetki Hataları

Hata: Access forbidden - User may not have permission to delete widgets

Çözüm:

bash
# Sistem yöneticisi hesabı kullan
xcons-thingsboard widget delete \
  -h server:8080 \
  -u sysadmin@thingsboard.org \
  -p sysadmin \
  -i widget-id

# Veya yetkili tenant admin hesabı
xcons-thingsboard widget delete \
  -h server:8080 \
  -u tenant@thingsboard.org \
  -p tenant \
  -i widget-id

Widget Kullanımda Hataları

Hata: Bad request - Widget may be in use and cannot be deleted

Çözüm:

bash
# Widget'ı kullanan dashboardları kontrol et
# ThingsBoard web arayüzünde:
# 1. Dashboards'a git
# 2. Widget'ı kullanan dashboardları bul
# 3. Widget'ı dashboardlardan kaldır
# 4. Tekrar silmeyi dene

xcons-thingsboard widget delete -i widget-id --force

Bağımlılık Hataları

Hata: Conflict - Widget is referenced by other entities and cannot be deleted

Çözüm:

bash
# Widget bağımlılıklarını temizle:
# 1. Widget bundle'lardan kaldır
# 2. Dashboard'lardan kaldır  
# 3. Widget type referanslarını temizle
# 4. Tekrar silmeyi dene

# Zorla silmeyi dene
xcons-thingsboard widget delete -i widget-id --force

Toplu Silme İşlemleri

Filtre Bazlı Toplu Silme

bash
#!/bin/bash

delete_widgets_by_filter() {
    local host=$1
    local user=$2
    local pass=$3
    local filter=$4
    
    echo "Finding widgets matching: $filter"
    
    # Filtreye uyan widget'ları bul
    widget_ids=$(xcons-thingsboard widget list \
        -h "$host" -u "$user" -p "$pass" \
        --filter "$filter" --json | \
        jq -r '.[].id')
    
    if [ -z "$widget_ids" ]; then
        echo "No widgets found matching filter: $filter"
        return
    fi
    
    # Her widget'ı sil
    echo "$widget_ids" | while read -r widget_id; do
        if [ -n "$widget_id" ]; then
            echo "Deleting widget: $widget_id"
            xcons-thingsboard widget delete \
                -h "$host" -u "$user" -p "$pass" \
                -i "$widget_id" --force
        fi
    done
}

# Kullanım örnekleri
delete_widgets_by_filter "server:8080" "admin" "pass" "test"
delete_widgets_by_filter "server:8080" "admin" "pass" "deprecated"
delete_widgets_by_filter "server:8080" "admin" "pass" "old"

Bundle Bazlı Toplu Silme

bash
#!/bin/bash

delete_widgets_from_bundle() {
    local host=$1
    local user=$2
    local pass=$3
    local bundle_name=$4
    
    echo "Finding widgets in bundle: $bundle_name"
    
    # Bundle'daki widget'ları bul
    widget_ids=$(xcons-thingsboard widget list \
        -h "$host" -u "$user" -p "$pass" \
        --json | \
        jq -r ".[] | select(.bundleName == \"$bundle_name\") | .id")
    
    if [ -z "$widget_ids" ]; then
        echo "No widgets found in bundle: $bundle_name"
        return
    fi
    
    echo "Found widgets to delete:"
    echo "$widget_ids"
    
    read -p "Are you sure you want to delete all widgets from '$bundle_name'? (y/N): " confirm
    if [[ $confirm =~ ^[Yy]$ ]]; then
        echo "$widget_ids" | while read -r widget_id; do
            if [ -n "$widget_id" ]; then
                echo "Deleting widget: $widget_id"
                xcons-thingsboard widget delete \
                    -h "$host" -u "$user" -p "$pass" \
                    -i "$widget_id" --force
            fi
        done
    else
        echo "Delete operation cancelled"
    fi
}

# Kullanım
delete_widgets_from_bundle "server:8080" "admin" "pass" "Test Bundle"

Tarih Bazlı Temizleme

bash
#!/bin/bash

# Not: Bu örnek widget creation date bilgisi gerektirir
# ThingsBoard API'sinden widget detayları alınarak uygulanabilir

cleanup_old_widgets() {
    local host=$1
    local user=$2
    local pass=$3
    local days_old=$4
    
    echo "Finding widgets older than $days_old days"
    
    # Widget listesini al (detaylı bilgi için API çağrısı gerekir)
    widgets=$(xcons-thingsboard widget list \
        -h "$host" -u "$user" -p "$pass" \
        --json)
    
    # Manual filtreleme gerekebilir
    echo "Manual review required for date-based deletion"
    echo "Widget list saved to old_widgets.json"
    echo "$widgets" > old_widgets.json
}

# Kullanım
cleanup_old_widgets "server:8080" "admin" "pass" 30

Gelişmiş Silme Stratejileri

Güvenli Silme Protokolü

bash
#!/bin/bash

safe_delete_widget() {
    local widget_id=$1
    local host=$2
    local user=$3
    local pass=$4
    
    echo "=== Safe Widget Deletion Protocol ==="
    echo "Widget ID: $widget_id"
    
    # 1. Widget bilgilerini al
    echo "1. Getting widget information..."
    widget_info=$(xcons-thingsboard widget list \
        -h "$host" -u "$user" -p "$pass" \
        --json | jq ".[] | select(.id == \"$widget_id\")")
    
    if [ -z "$widget_info" ]; then
        echo "ERROR: Widget not found: $widget_id"
        return 1
    fi
    
    widget_name=$(echo "$widget_info" | jq -r '.name')
    bundle_name=$(echo "$widget_info" | jq -r '.bundleName')
    
    echo "   Widget Name: $widget_name"
    echo "   Bundle: $bundle_name"
    
    # 2. Backup widget bilgilerini kaydet
    echo "2. Creating backup..."
    backup_file="widget_backup_$(date +%Y%m%d_%H%M%S).json"
    echo "$widget_info" > "$backup_file"
    echo "   Backup saved: $backup_file"
    
    # 3. Onay al
    echo "3. Confirmation required..."
    read -p "Delete widget '$widget_name' from '$bundle_name'? (type 'DELETE' to confirm): " confirm
    
    if [ "$confirm" != "DELETE" ]; then
        echo "Delete operation cancelled"
        return 0
    fi
    
    # 4. Widget'ı sil
    echo "4. Deleting widget..."
    xcons-thingsboard widget delete \
        -h "$host" -u "$user" -p "$pass" \
        -i "$widget_id" --force
    
    if [ $? -eq 0 ]; then
        echo "5. Widget deleted successfully"
        echo "   Backup available: $backup_file"
    else
        echo "ERROR: Widget deletion failed"
        return 1
    fi
}

# Kullanım
safe_delete_widget "widget-id" "server:8080" "admin" "pass"

Rollback Özelliği

bash
#!/bin/bash

# Widget silme işlemini kaydet
log_widget_deletion() {
    local widget_id=$1
    local widget_info=$2
    local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    
    echo "$timestamp|DELETE|$widget_id|$widget_info" >> widget_operations.log
}

# Silme işlemini geri al (manuel)
show_deletion_history() {
    echo "=== Widget Deletion History ==="
    grep "DELETE" widget_operations.log | tail -10
    echo ""
    echo "To restore a widget, you'll need to:"
    echo "1. Recreate the widget project"
    echo "2. Build and install it again"
    echo "3. Update any dashboard references"
}

# Kullanım
show_deletion_history

Monitoring ve Audit

Silme İşlemi Logları

bash
#!/bin/bash

# Silme işlemini logla
audit_widget_deletion() {
    local widget_id=$1
    local user=$2
    local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    
    log_entry="$timestamp|WIDGET_DELETE|$widget_id|$user|$(hostname)"
    echo "$log_entry" >> /var/log/thingsboard-cli-audit.log
    
    # Syslog'a da gönder
    logger -t "tb-cli" "Widget deleted: $widget_id by $user"
}

# Silme istatistikleri
deletion_stats() {
    echo "=== Widget Deletion Statistics ==="
    echo "Total deletions today: $(grep "$(date '+%Y-%m-%d')" /var/log/thingsboard-cli-audit.log | grep WIDGET_DELETE | wc -l)"
    echo "Deletions by user:"
    grep WIDGET_DELETE /var/log/thingsboard-cli-audit.log | cut -d'|' -f4 | sort | uniq -c
}

Silme Öncesi Kontroller

bash
#!/bin/bash

pre_deletion_checks() {
    local widget_id=$1
    local host=$2
    local user=$3
    local pass=$4
    
    echo "=== Pre-deletion Checks ==="
    
    # 1. Widget existence check
    echo "1. Checking widget existence..."
    widget_exists=$(xcons-thingsboard widget list \
        -h "$host" -u "$user" -p "$pass" \
        --json | jq ".[] | select(.id == \"$widget_id\")")
    
    if [ -z "$widget_exists" ]; then
        echo "   ERROR: Widget not found"
        return 1
    fi
    echo "   OK: Widget found"
    
    # 2. Bundle check
    bundle_name=$(echo "$widget_exists" | jq -r '.bundleName')
    echo "2. Bundle: $bundle_name"
    
    # 3. Widget type check
    widget_type=$(echo "$widget_exists" | jq -r '.widgetType')
    echo "3. Widget type: $widget_type"
    
    # 4. Deprecation status
    deprecated=$(echo "$widget_exists" | jq -r '.deprecated')
    if [ "$deprecated" = "true" ]; then
        echo "4. Status: DEPRECATED (safe to delete)"
    else
        echo "4. Status: ACTIVE (review before deletion)"
    fi
    
    return 0
}

Sonraki Adımlar

Widget silme işleminden sonra:

  1. Widget Listeleme - Kalan widget'ları kontrol etme
  2. Widget Bundle Listeleme - Bundle durumunu kontrol etme
  3. Widget Oluşturma - Yeni widget'lar oluşturma

Widget silme işlemi tamamlandı. Dashboard'larınızı güncellemeyi unutmayın!