Fires a new event

        Parameters:
            name (str): Event name
            payload (Payload): Opaque data
            node (Filter): Regular expression to filter by node name
            service (Filter): Regular expression to filter by service
            tag (Filter): Regular expression to filter by service tags
            dc (str): Specify datacenter that will be used.
                      Defaults to the agent's local datacenter.
        Returns:
            Object: where value is event ID

        The return body is like::

            {
                "ID": "b54fe110-7af5-cafc-d1fb-afc8ba432b1c",
                "Name": "deploy",
                "Payload": None,
                "NodeFilter": re.compile("node-\d+"),
                "ServiceFilter": "",
                "TagFilter": "",
                "Version": 1,
                "LTime": 0
            }

        The **ID** field uniquely identifies the newly fired event.

async def fire(self, name, payload=None, *,
                   dc=None, node=None, service=None, tag=None):
        """Fires a new event

        Parameters:
            name (str): Event name
            payload (Payload): Opaque data
            node (Filter): Regular expression to filter by node name
            service (Filter): Regular expression to filter by service
            tag (Filter): Regular expression to filter by service tags
            dc (str): Specify datacenter that will be used.
                      Defaults to the agent's local datacenter.
        Returns:
            Object: where value is event ID

        The return body is like::

            {
                "ID": "b54fe110-7af5-cafc-d1fb-afc8ba432b1c",
                "Name": "deploy",
                "Payload": None,
                "NodeFilter": re.compile("node-\d+"),
                "ServiceFilter": "",
                "TagFilter": "",
                "Version": 1,
                "LTime": 0
            }

        The **ID** field uniquely identifies the newly fired event.
        """
        params = {
            "dc": dc,
            "node": extract_pattern(node),
            "service": extract_pattern(service),
            "tag": extract_pattern(tag)
        }
        payload = encode_value(payload) if payload else None
        response = await self._api.put(
            "/v1/event/fire", name,
            data=payload,
            params=params,
            headers={"Content-Type": "application/octet-stream"})
        result = format_event(response.body)
        return result