"""
Copyright 2020 The Magma Authors.

This source code is licensed under the BSD-style license found in the
LICENSE file in the root directory of this source tree.

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
"""

from common.sentry import sentry_init
from common.service import MagmaService
from eventd.event_validator import EventValidator
from eventd.rpc_servicer import EventDRpcServicer
from orc8r.protos.mconfig.mconfigs_pb2 import EventD


def main():
    """ main() for eventd """
    service = MagmaService('eventd', EventD())

    # Optionally pipe errors to Sentry
    sentry_init(service_name=service.name)

    event_validator = EventValidator(service.config)
    eventd_servicer = EventDRpcServicer(service.config, event_validator)
    eventd_servicer.add_to_server(service.rpc_server)

    # Run the service loop
    service.run()

    # Cleanup the service
    service.close()


if __name__ == "__main__":
    main()
