public string UploadLog(string Source,
                                string Level,
                                decimal Temperature)
        {
            //Resolve source IP
            RemoteEndpointMessageProperty messageProperty =
                OperationContext.Current.IncomingMessageProperties
                [RemoteEndpointMessageProperty.Name]
                as RemoteEndpointMessageProperty;
            string sIP = messageProperty.Address;

            //Create database context
            PiDataContext db = new PiDataContext();

            //Create new log entry
            TempLog log = new TempLog();

            log.Date_and_Time = DateTime.Now;
            log.Level         = Level;
            log.Source        = Source;
            log.IP            = sIP;
            log.Temperature   = Temperature;
            db.TempLogs.InsertOnSubmit(log);
            try
            {
                //Insert log in database
                db.SubmitChanges();
                return("OK");
            }
            catch (Exception ex)
            {
                return("ERROR: " + ex.Message);
            }
        }
        public string GetLog(int Take)
        {
            //Create database context
            PiDataContext db = new PiDataContext();

            //Get log entries
            var logs = (from l in db.TempLogs
                        orderby l.Date_and_Time descending
                        select l).Take(Take).AsEnumerable().Reverse();
            //Check for no records
            int count = logs.Count();

            if (count == 0)
            {
                return(null);
            }
            //Parse logs to string array
            StringBuilder sbLogs = new StringBuilder();

            foreach (TempLog log in logs)
            {
                if (sbLogs.Length > 0)
                {
                    sbLogs.Append(",");
                }
                sbLogs.Append(log.Date_and_Time.ToString());
                sbLogs.Append(",");
                sbLogs.Append(log.Temperature.ToString());
            }

            return(sbLogs.ToString());
        }
        public string Notify(string Name,
                             decimal Temperature)
        {
            //Create database context
            PiDataContext db = new PiDataContext();

            string sFrom = "*****@*****.**";
            string sTo   = string.Empty;

            try
            {
                //Look up email address of recipient
                var Names = from n in db.Emails
                            where n.DisplayName == Name
                            select n.EmailAddress;

                //Confirm database match for recipient
                if (Names.Count() == 0)
                {
                    return("ERROR: Unable to find recipient "
                           + Name + " in database.");
                }
                else
                {
                    sTo = Names.First().ToString();
                }
            }
            catch (Exception ex)
            {
                return("ERROR: " + ex.Message);
            }
            try
            {
                using (MailMessage message = new MailMessage())
                {
                    //Build message
                    message.From = new MailAddress(sFrom);
                    message.To.Add(new MailAddress(sTo));
                    message.Subject = "Server Room Temperature Critical";
                    message.Body    = string.Format("Server room at {0:F1}°F.",
                                                    Temperature);
                    message.IsBodyHtml = false;
                    //Specify your IIS SMTP server
                    SmtpClient smtp = new SmtpClient("10.0.0.70", 25);
                    smtp.Send(message);
                    return("OK");
                }
            }
            catch (Exception ex)
            {
                return("ERROR: " + ex.Message);
            }
        }