예제 #1
0
        public IActionResult Get()
        {
            string result = null;

            /*
             * expiring - values published to me need to expire at some point in time.
             *     we want mutliple requests to give new results
             *     , and we want values published to go away when the publishing sources go away
             *     (maybe link to presence?)
             */
            var     temps = new List <IoTTemp>();
            IoTTemp temp  = null;

            foreach (var x in _keys)
            {
                if (_cache.TryGetValue <IoTTemp>(x, out temp))
                {
                    if (temp != null)
                    {
                        temps.Add(temp);
                    }
                }
            }

            return(new MetricsResult(new Microsoft.Net.Http.Headers.MediaTypeHeaderValue("text/plain"), temps));
        }
예제 #2
0
        public IActionResult Save([FromBody] MetricMsg message)
        {
            MetricMsg.ChannelUnit unit;
            if (!Enum.TryParse(message.units, out unit))
            {
                return(this.StatusCode(400, message.units));
            }
            if (string.IsNullOrWhiteSpace(message.channel))
            {
                return(StatusCode(400, "No channel"));
            }

            var parts = message.channel.Split('/');
            var key   = string.Format("{0}-{1}", parts[parts.Length - 1], unit);

            var entry = _cache.CreateEntry(key);

            if (null == _keys.FirstOrDefault(x => string.Compare(x, key) == 0))
            {
                _keys.Add(key);
            }

            entry.AbsoluteExpirationRelativeToNow = new TimeSpan(0, 1, 30);
            switch (unit)
            {
            case (MetricMsg.ChannelUnit.deg_c):
            case (MetricMsg.ChannelUnit.deg_f):
            {
                var itt = new IoTTemp {
                    src = parts[parts.Length - 1],
                };
                entry.Value = itt;

                if (unit == MetricMsg.ChannelUnit.deg_c)
                {
                    itt.value  = message.value;
                    itt.valuef = (itt.value * 9.00M / 5.00M) + 32.0M;
                }
                else
                {
                    itt.valuef = message.value;
                    itt.value  = (itt.valuef - 32.00M) * 5.00M / 9.00M;
                }

                break;
            }

            default:
            {
                return(StatusCode(400, string.Format("Units not mapped: {0}", message.units)));
            }
            }
            return(Ok());
        }