Skip to content

Commit 48d0b00

Browse files
committed
feat: server:listタスクにサーバーステータス表示機能を追加
- さくらのクラウドAPIを使用してリアルタイムステータスを取得 - 各サーバー名の横に状態を表示(✅ up / ⏸️ down / 🧹 cleaning) - API認証情報がない場合や接続エラー時には説明メッセージを表示 - API認証情報がなくても一覧表示は継続
1 parent 556002d commit 48d0b00

File tree

1 file changed

+55
-5
lines changed

1 file changed

+55
-5
lines changed

Rakefile

Lines changed: 55 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)