Appearance
@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-a9b78a26ce7fSilme İş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:80802. 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-a9b78a26ce7fPratik Ö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-idToplu 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
doneWidget 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"
fiHata 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-idWidget 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 --forceBağı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 --forceToplu 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" 30Geliş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_historyMonitoring 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:
- Widget Listeleme - Kalan widget'ları kontrol etme
- Widget Bundle Listeleme - Bundle durumunu kontrol etme
- Widget Oluşturma - Yeni widget'lar oluşturma
Widget silme işlemi tamamlandı. Dashboard'larınızı güncellemeyi unutmayın!