Exemple #1
0
        public async Task SetDeviceConfiguration(string deviceName, string configuration)
        {
            var loggerInfo = await db.LoggingDevices
                             .Where(dbLoggingDevice => dbLoggingDevice.DeviceName == deviceName)
                             .Select(dbLoggingDevice => new
            {
                LoggingDeviceId = dbLoggingDevice.Id
            })
                             .SingleOrDefaultAsync();

            if (loggerInfo == null)
            {
                // Could not find the supplied device name.
                throw new DeviceNotFoundException(deviceName);
            }

            LoggingDevice device = new LoggingDevice
            {
                Id = loggerInfo.LoggingDeviceId,
                PendingConfigurationString = configuration
            };

            db.LoggingDevices.Attach(device);
            db.Entry(device).Property(dbLoggingDevice => dbLoggingDevice.PendingConfigurationString).IsModified = true;
            await db.SaveChangesNoValidationAsync();

            db.Entry(device).State = EntityState.Detached;
        }
Exemple #2
0
        public async Task <bool> AssignFirmwareUpgradeToLoggers(int?firmwareUpgradeId, IEnumerable <int> loggerIds)
        {
            // Set all the loggers to the selected upgrade ID.
            foreach (int loggerId in loggerIds)
            {
                LoggingDevice device = new LoggingDevice
                {
                    Id = loggerId,
                    FirmwareUpgradeId       = firmwareUpgradeId,
                    FirmwareUpgradeAttempts = firmwareUpgradeId.HasValue ? 0 : (int?)null
                };
                db.LoggingDevices.Attach(device);
                db.Entry(device).Property(dbLoggingDevice => dbLoggingDevice.FirmwareUpgradeId).IsModified       = true;
                db.Entry(device).Property(dbLoggingDevice => dbLoggingDevice.FirmwareUpgradeAttempts).IsModified = true;
            }

            // Save the changes.
            try
            {
                await db.SaveChangesNoValidationAsync();
            }
            catch (Exception e)
            {
                Trace.TraceError("Failed to assign upgrade to loggers: {0}", e);
                return(false);
            }
            return(true);
        }
        public async Task <ActionResult> Delete(LoggingDeviceViewModel vm)
        {
            LoggingDevice device = new LoggingDevice
            {
                Id = vm.Id
            };
            await devicesService.DeleteLoggingDevice(device);

            return(RedirectToAction("Index"));
        }
Exemple #4
0
        public async Task UpdateLastContactTime(string deviceName)
        {
            LoggingDevice loggingDevice = await db.LoggingDevices
                                          .SingleOrDefaultAsync(dbLoggingDevice => dbLoggingDevice.DeviceName == deviceName);

            if (loggingDevice == null)
            {
                // Can't find the device.
                throw new DeviceNotFoundException(deviceName);
            }

            loggingDevice.LastContactTime = DateTime.UtcNow;
            await db.SaveChangesAsync();
        }
Exemple #5
0
        public async Task MarkConfigurationSent(string deviceName)
        {
            LoggingDevice loggingDevice = await db.LoggingDevices
                                          .SingleOrDefaultAsync(dbLoggingDevice => dbLoggingDevice.DeviceName == deviceName);

            if (loggingDevice == null)
            {
                // Can't find the device.
                throw new DeviceNotFoundException(deviceName);
            }

            loggingDevice.PendingConfigurationString = null;
            loggingDevice.LastConfigRetrieved        = DateTime.UtcNow;

            await db.SaveChangesAsync();
        }
Exemple #6
0
        public async Task <FirmwareUpgrade> GetNewFirmware(string deviceName, string deviceFirmwareHash)
        {
            // Save the device's reported firmware hash.
            var loggerInfo = await db.LoggingDevices
                             .Where(dbLoggingDevice => dbLoggingDevice.DeviceName == deviceName)
                             .Select(dbLoggingDevice => new
            {
                LoggingDevice       = dbLoggingDevice,
                AssignedUpgradeHash = dbLoggingDevice.FirmwareUpgrade.FileHash
            })
                             .SingleOrDefaultAsync();

            if (loggerInfo == null)
            {
                // Could not find the supplied device name.
                throw new DeviceNotFoundException(deviceName);
            }

            // Update firmware hash on device.
            LoggingDevice device = loggerInfo.LoggingDevice;

            device.FirmwareId = deviceFirmwareHash;

            // Get the device's upgrade data if it is different.
            if (!String.Equals(loggerInfo.AssignedUpgradeHash, deviceFirmwareHash) &&
                device.FirmwareUpgradeAttempts < MaxFirmwareUpgradeAttempts)
            {
                // Save changes to the number of upgrade attempts and the hash on the device.
                device.FirmwareUpgradeAttempts = (device.FirmwareUpgradeAttempts ?? 0) + 1;
                await db.SaveChangesAsync();

                return(await db.LoggingDevices
                       .Where(dbLoggingDevice => dbLoggingDevice.Id == device.Id)
                       .Select(dbLoggingDevice => dbLoggingDevice.FirmwareUpgrade)
                       .SingleOrDefaultAsync());
            }
            else
            {
                // Save change to the hash on the device.
                await db.SaveChangesAsync();

                // No new firmware upgrade to return.
                return(null);
            }
        }
        public async Task <ActionResult> Register(LoggingDeviceViewModel newDevice)
        {
            if (ModelState.IsValid)
            {
                LoggingDevice device = await devicesService.RegisterLoggingDevice(newDevice.DeviceName, newDevice.FriendlyName);

                if (device != null)
                {
                    return(RedirectToAction("Index"));
                }
                else
                {
                    ModelState.AddModelError("RegisterDeviceFailure", "Failed to register device. Has the device already been registered?");
                }
            }

            return(View(newDevice));
        }
Exemple #8
0
        public async Task <LoggingDevice> RegisterLoggingDevice(string deviceId, string deviceName)
        {
            LoggingDevice newDevice = new LoggingDevice
            {
                DeviceName   = deviceId,
                FriendlyName = deviceName
            };

            try
            {
                db.Entry(newDevice).State = EntityState.Added;
                await db.SaveChangesAsync();
            }
            catch (Exception e)
            {
                Trace.TraceError("Error saving logging device: {0}", e);
                return(null);
            }
            return(newDevice);
        }
Exemple #9
0
 public async Task DeleteLoggingDevice(LoggingDevice device)
 {
     db.Entry(device).State = EntityState.Deleted;
     await db.SaveChangesAsync();
 }