public async Task <ActionResult <AudioStatusResponse> > GetAudioStatus(string sipAddress)
        {
            return(await Execute(sipAddress, async (codecApi, codecInformation) =>
            {
                var audioStatus = await codecApi.GetAudioStatusAsync(codecInformation.Ip, codecInformation.NrOfInputs, codecInformation.NrOfGpos);

                var model = new AudioStatusResponse()
                {
                    Gpos = audioStatus.Gpos,
                    InputStatus = audioStatus.InputStatus,
                    VuValues = audioStatus.VuValues
                };
                return model;
            }));
        }
        private async Task CheckAudioStatusOnCodecAsync(string sipAddress)
        {
            try
            {
                // Get codec template data from CCM
                var codecInformation = await _ccmService.GetCodecInformationBySipAddress(sipAddress); // TODO: Not every time????

                if (codecInformation == null)
                {
                    log.Info($"Codec {sipAddress} is not currently registered in CCM, could't get codec information");
                    return;
                }

                var codecApiType = codecInformation?.CodecApiType;
                var codecApi     = codecApiType != null?_serviceProvider.GetService(codecApiType) as ICodecApi : null;

                if (codecApi == null || string.IsNullOrEmpty(codecInformation.Ip))
                {
                    log.Info($"Missing information for connecting to codec {sipAddress}");
                    return;
                }

                var audioStatus = await codecApi.GetAudioStatusAsync(codecInformation.Ip, codecInformation.NrOfInputs, codecInformation.NrOfGpos);

                var model = new AudioStatusResponse()
                {
                    Gpos        = audioStatus.Gpos,
                    InputStatus = audioStatus.InputStatus,
                    VuValues    = audioStatus.VuValues
                };

                await SendAudioStatusToClients(sipAddress, model);
            }
            catch (UnableToConnectException ex)
            {
                log.Warn($"AudioStatusService Exception unable to connect to {sipAddress}.");
                log.Trace(ex, "AudioStatusService Exception");
            }
            catch (CodecInvocationException ex)
            {
                log.Warn($"AudioStatusService Failed to check audio status on {sipAddress}. {ex.Message}");
            }
            catch (Exception ex)
            {
                log.Warn(ex, $"AudioStatusService Exception when checking audio status on {sipAddress}");
            }
        }
 private async Task SendAudioStatusToClients(string sipAddress, AudioStatusResponse audioStatus)
 {
     await _hub.Clients.Group(sipAddress).SendAsync("AudioStatus", sipAddress, audioStatus);
 }