HacklabMQ

From Hacklab.TO Public Wiki
Revision as of 00:15, 6 October 2014 by D1plo1d (talk | contribs)
Jump to navigation Jump to search

The lab has an AMQP-based message queuing infrastructure shared between various services. The broker RabbitMQ is located on moa (192.168.111.14), which is on the lab's LDAP system.

Exchanges

  • door.entry - Fanout exchange, one message gets pushed to the exchange
    • Format: XML format described on the doorbot page each time a card is swiped at the door.
  • notification.graphic - Fanout exchange, messages pushed to this exchange indicate animated graphics which should be sent to lab occupants somehow (e.g. LED sign)
    • Format: Name of the animation to display. Currently "ostrich" is the only supported animation.
  • notification.general - Fanout exchange, messages pushed to this exchange indicate graphics which should be sent to lab occupants somehow (e.g. LED sign, twitter, doorbot)
    • Format: JSON, 'text' and 'image' keys, images referenced should be in NFS user home directories
  • statistics.bandwidth - Fanout exchange, messages pushed to this exchange indicate bandwidth statistics that can be stored/reported by other systems
    • Format: TBD
  • statistics.power - Fanout exchange, messages pushed to this exchange indicate power statistics that can be stored/reported by other systems
    • Format: TBD
  • eight - 8. All systems should print or announce "eight" when they receive a correctly formatted eight message. 8.
    • Format: {eight: 8}

Queues

Queues are named <exchange>.<service>, e.g. doorbot's door.entry queue would be is door.entry.doorbot.

Message Flow Diagram

<graphviz> digraph graphname {

 node [  style=filled fillcolor="papayawhip" ]
 
 "Building Door System" [shape=house style=filled fillcolor="palevioletred1"]
 "Building Power System" [shape=house style=filled fillcolor="palevioletred1"]
 "LED Sign\nsign0" [shape=house style=filled fillcolor="palevioletred1"]
 "Stats Sign\nsign1" [shape=house style=filled fillcolor="palevioletred1"]
 "door.entry" [shape=trapezium style=filled fillcolor="paleturquoise1"]
 "notification.general" [shape=trapezium style=filled fillcolor="paleturquoise1"]
 "notification.graphic" [shape=trapezium style=filled fillcolor="paleturquoise1"]
 "notification.text" [shape=trapezium style=filled fillcolor="paleturquoise1"]
 "statistics.power" [shape=trapezium style=dotted]
 "statistics.bandwidth" [shape=trapezium style=filled fillcolor="paleturquoise1"]
 
 "door.entry.twitter" [shape=box style=filled fillcolor="palegreen1"]
 "door.entry.notification" [shape=box style=filled fillcolor="palegreen1"]
 "notification.general.doorbot" [shape=box style=filled fillcolor="palegreen1"]
 "notification.general.ledsign" [shape=box style=filled fillcolor="palegreen1"]
 "notification.graphic.ledsign" [shape=box style=filled fillcolor="palegreen1"]
 "notification.text.ledsign" [shape=box style=filled fillcolor="palegreen1"]
 "statistics.power.statssign" [shape=box style=dotted style=dotted]
 "statistics.bandwidth.statssign" [shape=box style=filled fillcolor="palegreen1"]
 
 "HTTP API\nTwitter" [shape=hexagon style=filled fillcolor="royalblue1"]
 "IRC #hacklabto (recv)" [shape=hexagon style=filled fillcolor="royalblue1"]
 "IRC #hacklabto (send)" [shape=hexagon style=filled fillcolor="royalblue1"]
 
 "Building Door System" -> "HTTP Service\ncard_event" -> "door.entry"
 "door.entry" -> "door.entry.notification"
 "door.entry" -> "door.entry.twitter"
 "door.entry.notification" -> "doormsg_to_notification" -> "notification.general"
 "door.entry.twitter" -> "hacklab_door_tweeter" -> "HTTP API\nTwitter"
 "notification.general" -> "notification.general.doorbot"
 "notification.general" -> "notification.general.ledsign"
 "notification.general.doorbot" -> "doorbot (HacklabMQ)"
 "doorbot (HacklabMQ)" -> "IRC #hacklabto (send)"
 "notification.general.ledsign" -> "gennotification_sign_feeder";
 "gennotification_sign_feeder" -> "HTTP Service\nSign Text Renderer"
 "HTTP Service\nSign Text Renderer" -> bmix
 bmix -> "LED Sign\nsign0"
 "IRC #hacklabto (recv)" -> "doorbot (HacklabMQPublisher)"
 "doorbot (HacklabMQPublisher)" -> "notification.text" [ label="!sign" ]
 "notification.text" -> "notification.text.ledsign"
 "notification.text.ledsign" -> "ledsign_feeder"
 "ledsign_feeder" ->  "HTTP Service\nSign Text Renderer"
 
 "doorbot (HacklabMQPublisher)" -> "notification.graphic" [ label="*ostrich*" ]
 "notification.graphic" -> "notification.graphic.ledsign"
 "notification.graphic.ledsign" -> "ledsign_ostrich_feeder"
 "ledsign_ostrich_feeder" -> "bmix"
 "Building Power System" -> "HTTP Service\npowerdata" -> "statistics.power"
 "statistics.power" -> "statistics.power.statssign"
 "statistics.power.statssign" -> "statssignd"
 "Firewall SNMP" -> "bandwidth_feeder" -> "statistics.bandwidth" 
 "statistics.bandwidth" -> "statistics.bandwidth.statssign"
 "statistics.bandwidth.statssign" -> "statssignd"
 "statssignd" -> "Stats Sign\nsign1"

} </graphviz>