@@ -322,25 +322,66 @@ namespace :server do
322322 desc "現在稼働中のサーバー一覧を表示"
323323 task :list do
324324 require_relative 'scripts/sakura_server_user_agent'
325-
325+ require 'dotenv/load'
326+
326327 puts "📋 サーバー一覧を取得中..."
327328 puts "データソース: #{ SakuraServerUserAgent ::INSTANCES_CSV_URL } "
328329 puts "-" * SEPARATOR_WIDTH
329-
330+
330331 begin
331332 uri = URI ( SakuraServerUserAgent ::INSTANCES_CSV_URL )
332333 response = Net ::HTTP . get_response ( uri )
333-
334+
334335 if response . code == '200'
335336 # エンコーディングを明示的に設定してCSVを解析(無効な文字を安全に処理)
336337 response . body . force_encoding ( 'UTF-8' ) . scrub ( '?' )
337338 csv_data = CSV . parse ( response . body , headers : true )
339+
340+ # APIクライアントを初期化(ステータス確認用)
341+ server_statuses = { }
342+ if ENV [ 'SACLOUD_ACCESS_TOKEN' ] && ENV [ 'SACLOUD_ACCESS_TOKEN_SECRET' ]
343+ begin
344+ client = SakuraServerUserAgent . new (
345+ zone : "31002" ,
346+ zone_id : "is1b" ,
347+ packet_filter_id : '112900922505' ,
348+ verbose : false
349+ )
350+ servers_data = client . get_servers ( )
351+ if servers_data && servers_data [ 'Servers' ]
352+ servers_data [ 'Servers' ] . each do |server |
353+ server_statuses [ server [ 'Name' ] ] = server [ 'Instance' ] [ 'Status' ]
354+ end
355+ end
356+ rescue
357+ # エラーは無視してステータスなしで続行
358+ end
359+ end
338360
339361 puts "📊 サーバー一覧(#{ csv_data . length } 台):"
340362 puts ""
341-
363+
342364 csv_data . each do |row |
343- puts " 🖥️ #{ row [ 'Name' ] } "
365+ server_name = row [ 'Name' ]
366+ status = server_statuses [ server_name ]
367+
368+ # ステータスに応じた絵文字と表示を設定
369+ status_display = if status
370+ case status
371+ when 'up'
372+ " (✅ up)"
373+ when 'down'
374+ " (⏸️ down)"
375+ when 'cleaning'
376+ " (🧹 cleaning)"
377+ else
378+ " (❓ #{ status } )" # 予期しないステータスの場合
379+ end
380+ else
381+ "" # APIが利用できない場合は何も表示しない
382+ end
383+
384+ puts " 🖥️ #{ server_name } #{ status_display } "
344385 puts " IPアドレス: #{ row [ 'IP Address' ] } " # スペースを追加
345386 puts " 説明: #{ row [ 'Description' ] } " if row [ 'Description' ]
346387 puts ""
@@ -362,6 +403,15 @@ namespace :server do
362403 end
363404 puts ""
364405
406+ # ステータス表示についての注記
407+ if !ENV [ 'SACLOUD_ACCESS_TOKEN' ] || !ENV [ 'SACLOUD_ACCESS_TOKEN_SECRET' ]
408+ puts "ℹ️ 注: API認証情報が設定されていないため、サーバーステータス(up/down)は表示されていません"
409+ puts " ステータスを表示するには、SACLOUD_ACCESS_TOKEN と SACLOUD_ACCESS_TOKEN_SECRET を設定してください"
410+ elsif server_statuses . empty?
411+ puts "ℹ️ 注: API接続エラーのため、サーバーステータス(up/down)を取得できませんでした"
412+ end
413+ puts ""
414+
365415 else
366416 abort "❌ エラー: サーバー一覧の取得に失敗しました (HTTP #{ response . code } )"
367417 end
0 commit comments