Module: SourceMonitor::Realtime::Broadcaster

Extended by:
ActionView::RecordIdentifier, Broadcaster
Included in:
Broadcaster
Defined in:
lib/source_monitor/realtime/broadcaster.rb

Constant Summary collapse

SOURCE_INDEX_STREAM =
"source_monitor_sources"
NOTIFICATION_STREAM =
"source_monitor_notifications"

Instance Method Summary collapse

Instance Method Details

#broadcast_item(item) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/source_monitor/realtime/broadcaster.rb', line 41

def broadcast_item(item)
  return unless turbo_available?
  item = reload_record(item)
  return unless item

  Turbo::StreamsChannel.broadcast_replace_to(
    item,
    :details,
    target: dom_id(item, :details),
    html: render_html = SourceMonitor::ItemsController.render(
      partial: "source_monitor/items/details_wrapper",
      locals: { item: item }
    )
  )
  log_info(
    "broadcast_item",
    item_id: item.id,
    stream: item_stream_identifier(item),
    status: item.scrape_status,
    contains_scraped_label: render_html.include?("Scraped")
  )
rescue StandardError => error
  log_error("item broadcast", error)
end

#broadcast_source(source) ⇒ Object



32
33
34
35
36
37
38
39
# File 'lib/source_monitor/realtime/broadcaster.rb', line 32

def broadcast_source(source)
  return unless turbo_available?
  source = reload_record(source)
  return unless source

  broadcast_source_row(source)
  broadcast_source_show(source)
end

#broadcast_toast(message:, level: :info, title: nil, delay_ms: 5000) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/source_monitor/realtime/broadcaster.rb', line 66

def broadcast_toast(message:, level: :info, title: nil, delay_ms: 5000)
  return unless turbo_available?
  return if message.blank?

  Turbo::StreamsChannel.broadcast_append_to(
    NOTIFICATION_STREAM,
    target: NOTIFICATION_STREAM,
    html: SourceMonitor::ApplicationController.render(
      partial: "source_monitor/shared/toast",
      locals: {
        message: message,
        level: level,
        title: title,
        delay_ms: delay_ms
      }
    )
  )
rescue StandardError => error
  log_error("toast broadcast", error)
end

#fetch_callbackObject



24
25
26
# File 'lib/source_monitor/realtime/broadcaster.rb', line 24

def fetch_callback
  @fetch_callback ||= lambda { |event| handle_fetch_completed(event) }
end

#item_callbackObject



28
29
30
# File 'lib/source_monitor/realtime/broadcaster.rb', line 28

def item_callback
  @item_callback ||= lambda { |event| handle_item_scraped(event) }
end

#setup!Object



14
15
16
17
18
19
20
21
22
# File 'lib/source_monitor/realtime/broadcaster.rb', line 14

def setup!
  return unless turbo_available?
  return if @setup

  register_callback(:after_fetch_completed, fetch_callback)
  register_callback(:after_item_scraped, item_callback)

  @setup = true
end