The TeamForge EventQ architecture aims for extensibility, fault tolerance, and scalability.

End users experience TeamForge EventQ as a seamless component of TeamForge. However, under the covers EventQ is a separate application with a distinct architecture. This article intends to give an overview of that architecture to assist with installation and administration of the underlying services as well as an overview of the message queue (MQ) architecture used to integrate with and collect data from external sources.

Hosting Considerations

TeamForge EventQ is designed for host separation, where each component resides on different operation systems. Any component may be run on virtualized hardware. In the absence of separate hardware or virtualization, EventQ components may be collocated.

Load Balancing and Clustering

TeamForge EventQ components may be load balanced and/or clustered. The EventQ application server may be installed on multiple hosts and load balanced (session clustering is not required). MongoDB and RabbitMQ both support clustered modes as well. However, such configurations are not documented or supported and are only offered as supplemental services from CollabNet.

Integration with External Sources

TeamForge EventQ uses a MQ architecture to collect data from external sources like work item, SCM, build/CI, and code review systems. The diagram below demonstrates a clustered network of MQ servers that share data collected from external sources. When a relevant activity occurs, the external source uses an MQ agent to publish a specially formatted message to the MQ network. MQ servers can be clustered and strategically located to prevent loss of messages during to outages.

Once a message is published by an external source, it is consumed by a daemon service running on the EventQ application server. The message is parsed and the data is persisted. MQ adapters are configured with “association keys”: unique identifiers that enable EventQ to file incoming data into the appropriate source.

Extensibility

EventQ ships with a handful of packaged adapters to common work item, SCM, build/CI, and review systems. But what if you are using different tools in your process? You can integrate your tools by building adapters that work by publishing MQ messages that are consumed by EventQ. See the Extensibility documentation for more on writing TeamForge EventQ adapters: Extend TeamForge EventQ.

User Authentication and Authorization

TeamForge EventQ is authenticated and authorized by TeamForge, using TeamForge users, permissions and roles. To access TeamForge EventQ features, TeamForge users need additional permissions on a project by project basis.

TeamForge EventQ requires a valid TeamForge user session for access. If you try to access TeamForge EventQ when you are not logged in or when your session has expired, you will be directed to the TeamForge login page. After you successfully log in, you will be automatically redirected to the target TeamForge EventQ screen.

Permissions

TeamForge EventQ permissions are set in the “Project Admin” area on a project by project basis. The following EventQ permissions may be used in creating TeamForge roles:

  • EventQ READ — The minimum required permission users need to view EventQ based data such as the Activity Stream and EventQ-based associations.
  • EventQ EDIT — Required to modify EventQ data sources via the Project Admin > Tools interface. Users with the “EventQ EDIT” permission are implicitly granted the “EventQ READ” permission.
  • EventQ CREATE — Required to create new EventQ data sources via the Project Admin > Tools interface. Users with the “EventQ CREATE” permission are implicitly granted the “EventQ READ” and “EventQ EDIT” permissions.
  • EventQ API — Required for read and write access to EventQ HTTP APIs such as the Source API and the XDS schema API. TeamForge Site Administrators do not explicitly require this permission; however, all other project members, including Project Administrators, require this permission to use the EventQ HTTP API.
  • REPORTING API — Required to retrieve data from the EventQ Reporting API.