├── .gitattributes ├── .gitignore ├── .nuget ├── NuGet.Config ├── NuGet.exe └── NuGet.targets ├── AppRolesForManifest.txt ├── CodeCoverage.runsettings ├── Common ├── Common.csproj ├── Configurations │ ├── ConfigurationProvider.cs │ ├── EnvironmentDescription.cs │ └── IConfigurationProvider.cs ├── Constants │ └── ApiRegistrationProviderTypes.cs ├── Deployment │ ├── Application.json │ ├── ConfigurationTemplate.config │ ├── DeploymentLib.ps1 │ ├── LocalMonitoring.json │ ├── PackageIoTSample.ps1 │ ├── PrepareIoTSample.ps1 │ ├── RemoteMonitoring.json │ ├── RemoteMonitoringMapKey.json │ ├── RemoteMonitoringStaging.json │ └── cleanNameCacheListTable.ps1 ├── Exceptions │ └── DeviceRequiredPropertyNotFoundException.cs ├── Extensions │ ├── ObjectExtension.cs │ ├── ProcessExtension.cs │ ├── StringExtension.cs │ ├── TimeSpanExtension.cs │ ├── TwinCollectionExtension.cs │ └── TwinExtension.cs ├── Factory │ └── SampleDeviceFactory.cs ├── Helpers │ ├── AzureRetryHelper.cs │ ├── AzureTableStorageClient.cs │ ├── AzureTableStorageClientFactory.cs │ ├── BlobStorageClient.cs │ ├── BlobStorageClientFactory.cs │ ├── BlobStorageReader.cs │ ├── DeviceCreatorHelper.cs │ ├── DocumentDBClient.cs │ ├── DynamicValuesHelper.cs │ ├── FunctionalHelper.cs │ ├── IAzureTableStorageClient.cs │ ├── IAzureTableStorageClientFactory.cs │ ├── IBlobStorageClient.cs │ ├── IBlobStorageClientFactory.cs │ ├── IDocumentDBClient.cs │ ├── ParsingHelper.cs │ ├── ReflectionHelper.cs │ └── SupportedMethodsHelper.cs ├── JsonContractResolvers │ └── SkipByNameContractResolver.cs ├── Mapper │ ├── MappingValidator.cs │ └── TypeMapper.cs ├── Models │ ├── ApiRegistrationModel.cs │ ├── ApiRegistrationTableEntity.cs │ ├── BlobContents.cs │ ├── CommandHistory.cs │ ├── Commands │ │ └── Command.cs │ ├── DeviceAssociationModel.cs │ ├── DeviceListEntity.cs │ ├── DeviceModel.cs │ ├── DeviceProperties.cs │ ├── DeviceRuleTableEntity.cs │ ├── IccidTableEntity.cs │ ├── InitialDeviceConfig.cs │ ├── IoTHub.cs │ ├── Parameter.cs │ ├── SecurityKeys.cs │ ├── SimStateModel.cs │ ├── SubscriptionPackageModel.cs │ ├── SupportedMethod.cs │ ├── SystemProperties.cs │ ├── TableStorageResponse.cs │ └── Telemetry.cs ├── Properties │ └── AssemblyInfo.cs ├── Repository │ ├── IVirtualDeviceStorage.cs │ └── VirtualDeviceTableStorage.cs ├── SampleDataGenerator │ ├── IRandomGenerator.cs │ ├── RandomGenerator.cs │ └── SampleDataGenerator.cs ├── Schema │ └── SchemaHelper.cs ├── app.config └── packages.config ├── Common_Props.proj ├── DeviceAdministration ├── DeviceAdministration.ruleset ├── Infrastructure │ ├── BusinessLogic │ │ ├── ActionLogic.cs │ │ ├── ActionMappingLogic.cs │ │ ├── AlertsLogic.cs │ │ ├── CommandParameterTypeLogic.cs │ │ ├── DeviceLogic.cs │ │ ├── DeviceLogicWithIoTHubDM.cs │ │ ├── DeviceRulesLogic.cs │ │ ├── DeviceTelemetryLogic.cs │ │ ├── DeviceTypeLogic.cs │ │ ├── FilterLogic.cs │ │ ├── IActionLogic.cs │ │ ├── IActionMappingLogic.cs │ │ ├── IAlertsLogic.cs │ │ ├── ICommandParameterTypeLogic.cs │ │ ├── IDeviceLogic.cs │ │ ├── IDeviceRulesLogic.cs │ │ ├── IDeviceTelemetryLogic.cs │ │ ├── IDeviceTypeLogic.cs │ │ ├── IFilterLogic.cs │ │ ├── IKeyLogic.cs │ │ ├── INameCacheLogic.cs │ │ ├── ISecurityKeyGenerator.cs │ │ ├── IUserSettingsLogic.cs │ │ ├── KeyLogic.cs │ │ ├── NameCacheLogic.cs │ │ ├── SecurityKeyGenerator.cs │ │ └── UserSettingsLogic.cs │ ├── Constants.cs │ ├── Exceptions │ │ ├── DeviceAdministrationExceptionBase.cs │ │ ├── DeviceAlreadyRegisteredException.cs │ │ ├── DeviceNotRegisteredException.cs │ │ ├── DeviceRegistrationException.cs │ │ ├── DuplicatedJobFoundException.cs │ │ ├── FilterDuplicatedNameException.cs │ │ ├── FilterNotFoundException.cs │ │ ├── FilterSaveException.cs │ │ ├── JobNotFoundException.cs │ │ ├── JobRepositoryRemoveException.cs │ │ ├── JobRepositorySaveException.cs │ │ ├── UnsupportedCommandException.cs │ │ └── ValidationException.cs │ ├── Infrastructure.csproj │ ├── Models │ │ ├── ActionMapping.cs │ │ ├── ActionMappingExtended.cs │ │ ├── ActionModel.cs │ │ ├── AlertHistoryItemModel.cs │ │ ├── Clause.cs │ │ ├── ClauseTableEntity.cs │ │ ├── ClauseType.cs │ │ ├── DeviceApplicableResult.cs │ │ ├── DeviceIcon.cs │ │ ├── DeviceIconResult.cs │ │ ├── DeviceListColumns.cs │ │ ├── DeviceListColumnsTableEntity.cs │ │ ├── DeviceListFilter.cs │ │ ├── DeviceListFilterResult.cs │ │ ├── DeviceListFilterTableEntity.cs │ │ ├── DeviceListLocationsModel.cs │ │ ├── DeviceLocationModel.cs │ │ ├── DevicePropertyMetadata.cs │ │ ├── DevicePropertyValueModel.cs │ │ ├── DeviceRule.cs │ │ ├── DeviceRuleBlobEntity.cs │ │ ├── DeviceRuleDataFields.cs │ │ ├── DeviceRuleUpdateRequest.cs │ │ ├── DeviceState.cs │ │ ├── DeviceTelemetryFieldModel.cs │ │ ├── DeviceTelemetryModel.cs │ │ ├── DeviceTelemetrySummaryModel.cs │ │ ├── DeviceType.cs │ │ ├── DeviceWithKeys.cs │ │ ├── Error.cs │ │ ├── Filter.cs │ │ ├── JobRepositoryModel.cs │ │ ├── JobSummary.cs │ │ ├── JobTableEntity.cs │ │ ├── MatchingDevices.cs │ │ ├── NameCacheEntity.cs │ │ ├── NameCacheEntityType.cs │ │ ├── NameCacheTableEntity.cs │ │ ├── PropertyType.cs │ │ ├── QuerySortOrder.cs │ │ ├── ServiceResponse.cs │ │ ├── TwinDataType.cs │ │ ├── UserSetting.cs │ │ └── UserSettingTableEntity.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── Repository │ │ ├── ActionMappingRepository.cs │ │ ├── ActionRepository.cs │ │ ├── AlertsRepository.cs │ │ ├── ApiRegistrationRepository.cs │ │ ├── DeviceIconRepository.cs │ │ ├── DeviceListFilterRepository.cs │ │ ├── DeviceRegistryRepository.cs │ │ ├── DeviceRegistryRepositoryWithIoTHubDM.cs │ │ ├── DeviceRulesRepository.cs │ │ ├── DeviceTelemetryRepository.cs │ │ ├── FilterHelper.cs │ │ ├── IActionMappingRepository.cs │ │ ├── IActionRepository.cs │ │ ├── IAlertsRepository.cs │ │ ├── IApiRegistrationRepository.cs │ │ ├── IDeviceIconRepository.cs │ │ ├── IDeviceListFilterRepository.cs │ │ ├── IDeviceRegistryCrudRepository.cs │ │ ├── IDeviceRegistryListRepository.cs │ │ ├── IDeviceRulesRepository.cs │ │ ├── IDeviceTelemetryRepository.cs │ │ ├── IDeviceTypeRepository.cs │ │ ├── IIccidRepository.cs │ │ ├── IIoTHubDeviceManager.cs │ │ ├── IIotHubRepository.cs │ │ ├── IJobRepository.cs │ │ ├── INameCacheRepository.cs │ │ ├── IUserSettingsRepository.cs │ │ ├── IccidRepository.cs │ │ ├── IoTHubDeviceManager.cs │ │ ├── IotHubRepository.cs │ │ ├── JobRepository.cs │ │ ├── NameCacheRepository.cs │ │ ├── SampleDeviceTypeRepository.cs │ │ └── UserSettingsRepository.cs │ ├── Strings.Designer.cs │ ├── Strings.cs.resx │ ├── Strings.de.resx │ ├── Strings.es.resx │ ├── Strings.fr.resx │ ├── Strings.hu.resx │ ├── Strings.it.resx │ ├── Strings.ja.resx │ ├── Strings.ko.resx │ ├── Strings.nl.resx │ ├── Strings.pl.resx │ ├── Strings.pt-BR.resx │ ├── Strings.pt-PT.resx │ ├── Strings.resx │ ├── Strings.ru.resx │ ├── Strings.sv.resx │ ├── Strings.tr.resx │ ├── Strings.zh-HANS.resx │ ├── Strings.zh-HANT.resx │ ├── app.config │ └── packages.config └── Web │ ├── App_Code │ └── IoTHelpers.cshtml │ ├── App_GlobalResources │ ├── Strings.Designer.cs │ ├── Strings.cs.resx │ ├── Strings.de.resx │ ├── Strings.es.resx │ ├── Strings.fr.resx │ ├── Strings.hu.resx │ ├── Strings.it.resx │ ├── Strings.ja.resx │ ├── Strings.ko.resx │ ├── Strings.nl.resx │ ├── Strings.pl.resx │ ├── Strings.pt-BR.resx │ ├── Strings.pt-PT.resx │ ├── Strings.resx │ ├── Strings.ru.resx │ ├── Strings.sv.resx │ ├── Strings.tr.resx │ ├── Strings.zh-HANS.resx │ └── Strings.zh-HANT.resx │ ├── App_Start │ ├── BundleConfig.cs │ ├── DataBinders.cs │ ├── FilterConfig.cs │ ├── RouteConfig.cs │ ├── Startup.Auth.cs │ ├── Startup.Autofac.cs │ ├── Startup.Json.cs │ └── Startup.WebApi.cs │ ├── Bundling │ └── LessTransform.cs │ ├── Constants.cs │ ├── Content │ ├── favicon.ico │ ├── img │ │ ├── IoT.svg │ │ ├── add.svg │ │ ├── button_back.svg │ │ ├── button_copy.svg │ │ ├── button_page_next.svg │ │ ├── button_page_prev.svg │ │ ├── clausechecked.svg │ │ ├── clausechecked2.svg │ │ ├── collapsed.svg │ │ ├── column_add.svg │ │ ├── column_delete.svg │ │ ├── column_down.svg │ │ ├── column_up.svg │ │ ├── delete-clause.svg │ │ ├── delete.svg │ │ ├── device_default.svg │ │ ├── edit_columns.svg │ │ ├── edit_filter.svg │ │ ├── edit_image.svg │ │ ├── edit_name.svg │ │ ├── expanded.svg │ │ ├── filters.svg │ │ ├── icon-account.png │ │ ├── icon-globe.png │ │ ├── icon_actions.svg │ │ ├── icon_add.svg │ │ ├── icon_add_dark.svg │ │ ├── icon_advanced.svg │ │ ├── icon_confirmed.svg │ │ ├── icon_dashboard.svg │ │ ├── icon_deviceExplorer_details_close.svg │ │ ├── icon_deviceExplorer_details_open.svg │ │ ├── icon_devices.svg │ │ ├── icon_error.svg │ │ ├── icon_info_gray.svg │ │ ├── icon_info_white.svg │ │ ├── icon_jasper.svg │ │ ├── icon_jobs.svg │ │ ├── icon_mysolutions.svg │ │ ├── icon_rules.svg │ │ ├── icon_status_alarm.svg │ │ ├── icon_status_all_clear.svg │ │ ├── icon_status_caution.svg │ │ ├── icon_status_critical.svg │ │ ├── icon_status_disabled.svg │ │ ├── icon_status_enabled.svg │ │ ├── icon_status_information.svg │ │ ├── icon_status_null.svg │ │ ├── logo.svg │ │ ├── map_addrs.png │ │ ├── map_copyrights.png │ │ ├── open_image.svg │ │ ├── open_query.svg │ │ ├── refresh.svg │ │ ├── save.svg │ │ ├── saveas.svg │ │ ├── schedule_job.svg │ │ ├── search.svg │ │ ├── sort_asc.png │ │ ├── sort_asc_disabled.png │ │ ├── sort_both.png │ │ ├── sort_desc.png │ │ └── sort_desc_disabled.png │ ├── styles │ │ ├── _bootstrap-datetimepicker.less │ │ ├── blocks │ │ │ ├── actions_view │ │ │ │ └── actions_block.less │ │ │ ├── add_device_views │ │ │ │ ├── add_device_copy_block.less │ │ │ │ ├── add_device_create_block.less │ │ │ │ └── add_device_select_type_block.less │ │ │ ├── advanced_view │ │ │ │ └── advanced_block.less │ │ │ ├── command_view │ │ │ │ └── commands_block.less │ │ │ ├── dashboard_view │ │ │ │ └── dashboard_block.less │ │ │ ├── device_view │ │ │ │ ├── device_details_block.less │ │ │ │ └── devices_filter_block.less │ │ │ ├── edit_view │ │ │ │ └── edit_form_block.less │ │ │ ├── headers │ │ │ │ ├── inner_page_header_block.less │ │ │ │ └── main_header_block.less │ │ │ ├── job_view │ │ │ │ └── job_details_block.less │ │ │ ├── remove_view │ │ │ │ └── remove_block.less │ │ │ ├── root_styles │ │ │ │ ├── loader_block.less │ │ │ │ ├── navigation_block.less │ │ │ │ ├── root_containers_block.less │ │ │ │ ├── root_grid_block.less │ │ │ │ └── root_style_values_block.less │ │ │ ├── rules_view │ │ │ │ ├── edit_rule_form_block.less │ │ │ │ └── rules_block.less │ │ │ └── text_copy │ │ │ │ └── text_copy_block.less │ │ ├── bootstrap-datetimepicker-build.less │ │ ├── bootstrap │ │ │ ├── bootstrap.less │ │ │ ├── component-animations.less │ │ │ ├── dropdowns.less │ │ │ ├── forms.less │ │ │ ├── glyphicon.less │ │ │ ├── grid.less │ │ │ ├── mixins.less │ │ │ ├── mixins │ │ │ │ ├── alerts.less │ │ │ │ ├── background-variant.less │ │ │ │ ├── border-radius.less │ │ │ │ ├── buttons.less │ │ │ │ ├── center-block.less │ │ │ │ ├── clearfix.less │ │ │ │ ├── forms.less │ │ │ │ ├── gradients.less │ │ │ │ ├── grid-framework.less │ │ │ │ ├── grid.less │ │ │ │ ├── hide-text.less │ │ │ │ ├── image.less │ │ │ │ ├── labels.less │ │ │ │ ├── list-group.less │ │ │ │ ├── nav-divider.less │ │ │ │ ├── nav-vertical-align.less │ │ │ │ ├── opacity.less │ │ │ │ ├── pagination.less │ │ │ │ ├── panels.less │ │ │ │ ├── progress-bar.less │ │ │ │ ├── reset-filter.less │ │ │ │ ├── reset-text.less │ │ │ │ ├── resize.less │ │ │ │ ├── responsive-visibility.less │ │ │ │ ├── size.less │ │ │ │ ├── tab-focus.less │ │ │ │ ├── table-row.less │ │ │ │ ├── text-emphasis.less │ │ │ │ ├── text-overflow.less │ │ │ │ └── vendor-prefixes.less │ │ │ ├── navbar.less │ │ │ ├── navs.less │ │ │ ├── popovers.less │ │ │ ├── utilities.less │ │ │ └── variables.less │ │ ├── datatables.css │ │ ├── elements │ │ │ ├── buttons.less │ │ │ ├── dialog.less │ │ │ ├── error_reporting.less │ │ │ ├── forms.less │ │ │ └── ui_styles.less │ │ ├── main.css │ │ ├── main.less │ │ ├── main.min.css │ │ ├── navbars.less │ │ ├── variables.less │ │ └── visuals.min.css │ └── themes │ │ └── base │ │ ├── accordion.css │ │ ├── all.css │ │ ├── autocomplete.css │ │ ├── base.css │ │ ├── button.css │ │ ├── core.css │ │ ├── datepicker.css │ │ ├── dialog.css │ │ ├── draggable.css │ │ ├── images │ │ ├── ui-bg_flat_0_aaaaaa_40x100.png │ │ ├── ui-bg_flat_75_ffffff_40x100.png │ │ ├── ui-bg_glass_55_fbf9ee_1x400.png │ │ ├── ui-bg_glass_65_ffffff_1x400.png │ │ ├── ui-bg_glass_75_dadada_1x400.png │ │ ├── ui-bg_glass_75_e6e6e6_1x400.png │ │ ├── ui-bg_glass_95_fef1ec_1x400.png │ │ ├── ui-bg_highlight-soft_75_cccccc_1x100.png │ │ ├── ui-icons_222222_256x240.png │ │ ├── ui-icons_2e83ff_256x240.png │ │ ├── ui-icons_454545_256x240.png │ │ ├── ui-icons_888888_256x240.png │ │ └── ui-icons_cd0a0a_256x240.png │ │ ├── menu.css │ │ ├── progressbar.css │ │ ├── resizable.css │ │ ├── selectable.css │ │ ├── selectmenu.css │ │ ├── slider.css │ │ ├── sortable.css │ │ ├── spinner.css │ │ ├── tabs.css │ │ ├── theme.css │ │ └── tooltip.css │ ├── Controllers │ ├── AccountController.cs │ ├── ActionsController.cs │ ├── AdvancedController.cs │ ├── CultureController.cs │ ├── DashboardController.cs │ ├── DeviceCommandController.cs │ ├── DeviceController.cs │ ├── DeviceMethodController.cs │ ├── DeviceRulesController.cs │ ├── JobController.cs │ └── NavigationController.cs │ ├── DataTables │ ├── Column.cs │ ├── DataTablesRequest.cs │ ├── DataTablesResponse.cs │ ├── Search.cs │ └── SortColumn.cs │ ├── Extensions │ ├── DateTimeExtensions.cs │ ├── JobTypeExtension.cs │ └── StringExtentions.cs │ ├── Filters │ └── ErrorHandlingFilter.cs │ ├── Global.asax │ ├── Global.asax.cs │ ├── Helpers │ ├── CellularExtensions.cs │ ├── CultureHelper.cs │ ├── DeviceDisplayHelper.cs │ ├── DeviceJobHelper.cs │ ├── HeaderHelper.cs │ ├── HtmlHelperExtensions.cs │ ├── ICellularExtensions.cs │ ├── JasperCredentialsProvider.cs │ └── NavigationHelper.cs │ ├── Models │ ├── ActionPropertiesModel.cs │ ├── AlertHistoryResultsModel.cs │ ├── AlerthistoryDeviceModel.cs │ ├── CellularActionModel.cs │ ├── CellularActionRequestModel.cs │ ├── CellularActionUpdateResponseModel.cs │ ├── CellularConnectivityProviderEnum.cs │ ├── CommandModel.cs │ ├── DashboardDevicePaneDataModel.cs │ ├── DashboardModel.cs │ ├── DeviceCommandModel.cs │ ├── DeviceConfigModel.cs │ ├── DeviceDetailModel.cs │ ├── DeviceDetailsKeysModel.cs │ ├── DeviceJobModel.cs │ ├── DeviceKeysModel.cs │ ├── EditDevicePropertiesModel.cs │ ├── EditDeviceRuleModel.cs │ ├── ErrorModel.cs │ ├── IconActionType.cs │ ├── LanguageModel.cs │ ├── NamedDeviceJob.cs │ ├── NamedJobResponseModel.cs │ ├── PreScheduleJobModel.cs │ ├── PropertyViewModel.cs │ ├── ReconnectDeviceModel.cs │ ├── RegisteredDeviceModel.cs │ ├── ScheduleDeviceMethodModel.cs │ ├── ScheduleJobModel.cs │ ├── ScheduleTwinUpdateModel.cs │ ├── SecurityKeysModel.cs │ ├── SendCommandModel.cs │ ├── SimInformationViewModel.cs │ ├── UnregisteredDeviceModel.cs │ ├── UpdateActionModel.cs │ ├── UpdateKeyModel.cs │ └── UpdateKeysModel.cs │ ├── Navigation │ ├── NavigationMenu.cs │ └── NavigationMenuItem.cs │ ├── Properties │ ├── AssemblyInfo.cs │ ├── Settings.Designer.cs │ └── Settings.settings │ ├── Scripts │ ├── Dialog.js │ ├── IoTHelperScripts.js │ ├── Views │ │ ├── Actions │ │ │ ├── ActionProperties.js │ │ │ └── ActionsIndex.js │ │ ├── Advanced │ │ │ └── Advanced.js │ │ ├── Dashboard │ │ │ ├── AlertHistory.js │ │ │ ├── DashboardDevicePane.js │ │ │ ├── JobIndicators.js │ │ │ ├── MapPane.js │ │ │ ├── TelemetryHistory.js │ │ │ └── TelemetryHistorySummary.js │ │ ├── Device │ │ │ ├── AddDevice.js │ │ │ ├── AddDeviceCopy.js │ │ │ ├── AddDeviceCreate.js │ │ │ ├── CellularActions.js │ │ │ ├── CellularInformation.js │ │ │ ├── DeviceDetails.js │ │ │ ├── DeviceFilter.js │ │ │ ├── DeviceIndex.js │ │ │ ├── DeviceListColumns.js │ │ │ ├── DeviceSelectType.js │ │ │ ├── EditDesiredProperties.js │ │ │ ├── EditDeviceProperties.js │ │ │ ├── EditIcon.js │ │ │ ├── EditTags.js │ │ │ └── RemoveDevice.js │ │ ├── DeviceCommand │ │ │ └── DeviceCommandIndex.js │ │ ├── DeviceRules │ │ │ ├── AllRulesAssigned.js │ │ │ ├── DeviceRuleProperties.js │ │ │ ├── DeviceRulesIndex.js │ │ │ ├── EditDeviceRuleProperties.js │ │ │ └── RemoveDeviceRule.js │ │ ├── IoTApp.js │ │ └── Job │ │ │ ├── JobIndex.js │ │ │ ├── JobProperties.js │ │ │ ├── JobResult.js │ │ │ ├── ScheduleDeviceMethod.js │ │ │ ├── ScheduleIconUpdate.js │ │ │ └── ScheduleTwinUpdate.js │ ├── _references.js │ ├── bootstrap-datetimepicker.min.js │ ├── bootstrap.min.js │ ├── controls.js │ ├── jquery-2.2.3.intellisense.js │ ├── jquery-2.2.3.js │ ├── jquery-2.2.3.min.js │ ├── jquery-2.2.3.min.map │ ├── jquery-dataTables-plugins.js │ ├── jquery-datatables-api-extensions.js │ ├── jquery-ui-1.11.4.js │ ├── jquery-ui-1.11.4.min.js │ ├── jquery-ui-i18n.js │ ├── jquery-ui-i18n.min.js │ ├── jquery.dataTables.min.js │ ├── jquery.unobtrusive-ajax.js │ ├── jquery.unobtrusive-ajax.min.js │ ├── jquery.validate-vsdoc.js │ ├── jquery.validate.js │ ├── jquery.validate.min.js │ ├── jquery.validate.unobtrusive.js │ ├── jquery.validate.unobtrusive.min.js │ ├── js.cookie-1.5.1.min.js │ ├── knockout-3.4.0.debug.js │ ├── knockout-3.4.0.js │ ├── knockout.mapping-2.0.js │ ├── moment-with-locales.js │ ├── moment-with-locales.min.js │ ├── moment.js │ ├── moment.min.js │ ├── papaparse.min.js │ └── powerbi-visuals.all.min.js │ ├── Security │ ├── Permission.cs │ ├── PermsChecker.cs │ ├── PrincipalHelper.cs │ ├── RequirePermissionAttribute.cs │ ├── RolePermissions.cs │ ├── WebApiCsrfValidationAttribute.cs │ └── WebApiRequirePermissionAttribute.cs │ ├── Startup.cs │ ├── Views │ ├── Account │ │ └── SignIn.cshtml │ ├── Actions │ │ ├── Index.cshtml │ │ ├── _ActionProperties.cshtml │ │ └── _ActionPropertiesUpdateAction.cshtml │ ├── Advanced │ │ ├── CellularConn.cshtml │ │ ├── HealthBeat.cshtml │ │ ├── LogicApps.cshtml │ │ ├── _ApiRegistration.cshtml │ │ ├── _DeviceAssociation.cshtml │ │ ├── _IccidAssociation.cshtml │ │ ├── _IccidUpload.cshtml │ │ └── _SelectAdvancedProcess.cshtml │ ├── Dashboard │ │ ├── Index.cshtml │ │ ├── _AlertHistory.cshtml │ │ ├── _DashboardDevicePane.cshtml │ │ ├── _JobIndicators.cshtml │ │ ├── _TelemetryHistory.cshtml │ │ └── _TelemetryHistorySummary.cshtml │ ├── Device │ │ ├── AddDevice.cshtml │ │ ├── EditDesiredProperties.cshtml │ │ ├── EditDeviceProperties.cshtml │ │ ├── EditIcon.cshtml │ │ ├── EditTags.cshtml │ │ ├── Index.cshtml │ │ ├── RemoveDevice.cshtml │ │ ├── _AddDeviceCopy.cshtml │ │ ├── _AddDeviceCreate.cshtml │ │ ├── _AddDeviceSelectType.cshtml │ │ ├── _CellularActions.cshtml │ │ ├── _CellularInformation.cshtml │ │ ├── _CellularInformationEricsson.cshtml │ │ ├── _CellularInformationJasper.cshtml │ │ ├── _DeviceDetails.cshtml │ │ ├── _DeviceDetailsCellular.cshtml │ │ ├── _DeviceDetailsDeviceProperties.cshtml │ │ ├── _DeviceDetailsKeyLink.cshtml │ │ ├── _DeviceDetailsKeys.cshtml │ │ ├── _DeviceDetailsNotRegistered.cshtml │ │ ├── _DeviceJobs.cshtml │ │ └── _DeviceListColumns.cshtml │ ├── DeviceCommand │ │ ├── Index.cshtml │ │ ├── _CommandResult.cshtml │ │ ├── _SendCommand.cshtml │ │ └── _SendCommandForm.cshtml │ ├── DeviceMethod │ │ ├── Index.cshtml │ │ ├── _InvokeMethod.cshtml │ │ ├── _InvokeMethodForm.cshtml │ │ └── _MethodResult.cshtml │ ├── DeviceRules │ │ ├── AllRulesAssigned.cshtml │ │ ├── EditDeviceRuleProperties.cshtml │ │ ├── Index.cshtml │ │ ├── RemoveDeviceRule.cshtml │ │ └── _DeviceRuleProperties.cshtml │ ├── Job │ │ ├── Index.cshtml │ │ ├── ScheduleDeviceMethod.cshtml │ │ ├── ScheduleIconUpdate.cshtml │ │ ├── ScheduleTwinUpdate.cshtml │ │ ├── _JobProperties.cshtml │ │ ├── _JobResult.cshtml │ │ └── _ScheduleJob.cshtml │ ├── Shared │ │ ├── DisplayTemplates │ │ │ ├── DateTime.cshtml │ │ │ └── ModelStateDictionary.cshtml │ │ ├── EditorTemplates │ │ │ ├── edit_binary.cshtml │ │ │ ├── edit_boolean.cshtml │ │ │ ├── edit_byte.cshtml │ │ │ ├── edit_date.cshtml │ │ │ ├── edit_datetimeOffset.cshtml │ │ │ ├── edit_decimal.cshtml │ │ │ ├── edit_double.cshtml │ │ │ ├── edit_guid.cshtml │ │ │ ├── edit_int16.cshtml │ │ │ ├── edit_int32.cshtml │ │ │ ├── edit_int64.cshtml │ │ │ ├── edit_sbyte.cshtml │ │ │ ├── edit_single.cshtml │ │ │ └── edit_string.cshtml │ │ ├── Error.cshtml │ │ ├── _BaseLayout.cshtml │ │ ├── _Dialogs.cshtml │ │ ├── _Layout.cshtml │ │ ├── _LayoutNoNavigation.cshtml │ │ ├── _NavigationMenu.cshtml │ │ └── _NavigationSubmenu.cshtml │ ├── Web.config │ └── _ViewStart.cshtml │ ├── Web.Debug.config │ ├── Web.Release.config │ ├── Web.config │ ├── Web.csproj │ ├── WebApiControllers │ ├── DeviceActionsApiController.cs │ ├── DeviceApiController.cs │ ├── DeviceIconApiController.cs │ ├── DeviceListColumnsApiController.cs │ ├── DeviceRulesApiController.cs │ ├── DeviceTwinApiController.cs │ ├── DeviceTypesApiController.cs │ ├── FilterApiController.cs │ ├── JobApiController.cs │ ├── JobIndicatorsApiController.cs │ ├── KeyApiController.cs │ ├── NameCacheApiController.cs │ ├── QueryGeneratorApiController.cs │ ├── TelemetryApiController.cs │ └── WebApiControllerBase.cs │ ├── compilerconfig.json │ ├── compilerconfig.json.defaults │ ├── fonts │ └── glyphicons-halflings-regular.svg │ └── packages.config ├── Docs ├── FAQ.md ├── cloud-deployment.md ├── configure-preconfigured-demo.md ├── dev-setup.md ├── local-deployment.md └── media │ ├── image1.png │ ├── image2.png │ ├── image3.png │ └── image4.png ├── EventProcessor └── EventProcessor.WebJob │ ├── EventProcessor.WebJob.csproj │ ├── EventProcessorModule.cs │ ├── Processors │ ├── ActionEventProcessor.cs │ ├── ActionProcessor.cs │ ├── ActionProcessorFactory.cs │ ├── DeviceAdministrationProcessor.cs │ ├── DeviceAdministrationProcessorFactory.cs │ ├── DeviceEventProcessor.cs │ ├── IActionEventProcessor.cs │ ├── IDeviceEventProcessor.cs │ ├── IMessageFeedbackProcessor.cs │ └── MessageFeedbackProcessor.cs │ ├── Program.cs │ ├── Properties │ ├── AssemblyInfo.cs │ └── webjob-publish-settings.json │ ├── app.config │ └── packages.config ├── README.md ├── RemoteMonitoring.sln ├── Simulator └── Simulator.WebJob │ ├── BulkDeviceTester.cs │ ├── Cooler │ ├── CommandProcessors │ │ ├── ChangeDeviceStateCommandProcessor.cs │ │ ├── ChangeSetPointTempCommandProcessor.cs │ │ ├── DiagnosticTelemetryCommandProcessor.cs │ │ ├── StartCommandProcessor.cs │ │ └── StopCommandProcessor.cs │ ├── Devices │ │ ├── CoolerDevice.cs │ │ └── Factory │ │ │ └── CoolerDeviceFactory.cs │ └── Telemetry │ │ ├── Data │ │ └── RemoteMonitorTelemetryData.cs │ │ ├── Factory │ │ └── CoolerTelemetryFactory.cs │ │ ├── PresenceTelemetry.cs │ │ ├── RemoteMonitorTelemetry.cs │ │ └── StartupTelemetry.cs │ ├── DataInitialization │ ├── DataInitializer.cs │ └── IDataInitializer.cs │ ├── DeviceManager.cs │ ├── Program.cs │ ├── Properties │ ├── AssemblyInfo.cs │ ├── Settings.Designer.cs │ ├── Settings.settings │ └── webjob-publish-settings.json │ ├── Simulator.WebJob.csproj │ ├── SimulatorCore │ ├── CommandProcessors │ │ ├── CommandProcessor.cs │ │ └── PingDeviceProcessor.cs │ ├── Devices │ │ ├── DMTasks │ │ │ ├── ConfigurationUpdate.cs │ │ │ ├── DMTaskBase.cs │ │ │ └── FirmwareUpdate.cs │ │ ├── DeviceBase.cs │ │ ├── Factory │ │ │ ├── DeviceFactory.cs │ │ │ └── IDeviceFactory.cs │ │ └── IDevice.cs │ ├── Logging │ │ ├── ILogger.cs │ │ └── TraceLogger.cs │ ├── Repository │ │ └── AppConfigRepository.cs │ ├── Telemetry │ │ ├── ConcreteTelemetry.cs │ │ ├── Factory │ │ │ ├── GenericConcreteTelemetryFactory.cs │ │ │ └── ITelemetryFactory.cs │ │ └── ITelemetry.cs │ └── Transport │ │ ├── DeserializableCommand.cs │ │ ├── EmptyTransport.cs │ │ ├── Factory │ │ ├── ITransportFactory.cs │ │ └── IoTHubTransportFactory.cs │ │ ├── ITransport.cs │ │ ├── IoTHubTransport.cs │ │ ├── IoTHubWorkaroundTransport.cs │ │ └── StateCollection.cs │ ├── SimulatorModule.cs │ ├── app.config │ ├── packages.config │ └── settings.job ├── THIRDPARTYNOTICE (Azure IoT Suite Monitoring Solutions).txt ├── Tutorials ├── iot-suite-v1-connecting-devices-linux.md ├── iot-suite-v1-connecting-devices-node.md ├── iot-suite-v1-connecting-devices.md ├── iot-suite-v1-custom-rule.md ├── iot-suite-v1-dynamic-telemetry.md ├── iot-suite-v1-faq.md ├── iot-suite-v1-getstarted-preconfigured-solutions.md ├── iot-suite-v1-guidance-on-customizing-preconfigured-solutions.md ├── iot-suite-v1-logic-apps-tutorial.md ├── iot-suite-v1-permissions.md ├── iot-suite-v1-raspberry-pi-kit-c-get-started-advanced.md ├── iot-suite-v1-raspberry-pi-kit-c-get-started-basic.md ├── iot-suite-v1-raspberry-pi-kit-c-get-started-simulator.md ├── iot-suite-v1-raspberry-pi-kit-get-started.md ├── iot-suite-v1-raspberry-pi-kit-node-get-started-advanced.md ├── iot-suite-v1-raspberry-pi-kit-node-get-started-basic.md ├── iot-suite-v1-raspberry-pi-kit-node-get-started-simulator.md ├── iot-suite-v1-remote-monitoring-device-info.md ├── iot-suite-v1-remote-monitoring-sample-walkthrough.md ├── iot-suite-v1-what-are-preconfigured-solutions.md ├── media │ ├── iot-suite-v1-dynamic-telemetry │ │ ├── image3.png │ │ ├── image4.png │ │ └── image5.png │ ├── iot-suite-v1-gateway-kit-get-started-sensortag │ │ ├── appoutput.png │ │ └── telemetry.png │ ├── iot-suite-v1-gateway-kit-get-started-simulator │ │ ├── appoutput.png │ │ └── telemetry.png │ ├── iot-suite-v1-getstarted-preconfigured-solutions │ │ ├── actions.png │ │ ├── adddevice.png │ │ ├── addnew.png │ │ ├── addrule.png │ │ ├── addrule2.png │ │ ├── addrule3.png │ │ ├── addrule4.png │ │ ├── alarms.png │ │ ├── changeinterval.png │ │ ├── columneditor.png │ │ ├── dashboard.png │ │ ├── definedevice.png │ │ ├── devicecommands.png │ │ ├── devicedetails.png │ │ ├── devicelist.png │ │ ├── editfiltericon.png │ │ ├── filtereditor.png │ │ ├── filteredlist.png │ │ ├── healthy.png │ │ ├── imagedit1.png │ │ ├── imagedit2.png │ │ ├── jobupdate1.png │ │ ├── jobupdate2.png │ │ ├── jobupdate3.png │ │ ├── launch.png │ │ ├── menu.png │ │ ├── methodupdate.png │ │ ├── noticeold.png │ │ ├── oldfilter.png │ │ ├── oldlist.png │ │ ├── openfilter.png │ │ ├── pingcommand.png │ │ ├── portal.png │ │ ├── rules.png │ │ ├── runningnew.png │ │ ├── runningnew2.png │ │ ├── savefilter.png │ │ ├── solutionportal_08.png │ │ ├── unhealthyfilter.png │ │ ├── unhealthylist.png │ │ └── updated.png │ ├── iot-suite-v1-logic-apps-tutorial │ │ ├── createlogicapp.png │ │ ├── logicappaction.png │ │ ├── logicappcode.png │ │ ├── logicapprun.png │ │ ├── logicappsdesigner.png │ │ ├── resourcegroup.png │ │ ├── sendgridaction.png │ │ └── sendgridconnection.png │ ├── iot-suite-v1-permissions │ │ └── flowchart.png │ ├── iot-suite-v1-raspberry-pi-kit-c-get-started-advanced │ │ ├── app-output.png │ │ ├── jobstatus.png │ │ ├── listdevices.png │ │ ├── methodhistory.png │ │ └── updateprogress.png │ ├── iot-suite-v1-raspberry-pi-kit-c-get-started-basic │ │ └── appoutput.png │ ├── iot-suite-v1-raspberry-pi-kit-c-get-started-simulator │ │ └── appoutput.png │ ├── iot-suite-v1-raspberry-pi-kit-node-get-started-advanced │ │ ├── app-output.png │ │ ├── jobstatus.png │ │ ├── listdevices.png │ │ ├── methodhistory.png │ │ └── updateprogress.png │ ├── iot-suite-v1-raspberry-pi-kit-node-get-started-basic │ │ └── app-output.png │ ├── iot-suite-v1-raspberry-pi-kit-node-get-started-simulator │ │ └── app-output.png │ ├── iot-suite-v1-raspberry-pi-kit-prepare-pi │ │ └── rpi2_remote_monitoring.png │ ├── iot-suite-v1-raspberry-pi-kit-view-solution │ │ ├── launch.png │ │ ├── menu.png │ │ ├── suite0.png │ │ ├── suite1.png │ │ ├── suite2.png │ │ └── suite3.png │ ├── iot-suite-v1-raspberry-pi-kit-view-telemetry-advanced │ │ └── telemetry.png │ ├── iot-suite-v1-raspberry-pi-kit-view-telemetry-simulator │ │ ├── listdevices.png │ │ ├── methodhistory.png │ │ ├── selectmethod.png │ │ └── telemetry.png │ ├── iot-suite-v1-raspberry-pi-kit-view-telemetry │ │ ├── listdevices.png │ │ ├── methodhistory.png │ │ ├── selectmethod.png │ │ └── telemetry.png │ ├── iot-suite-v1-remote-monitoring-device-info │ │ ├── image1.png │ │ ├── image2.png │ │ └── image3.png │ ├── iot-suite-v1-remote-monitoring-sample-walkthrough │ │ └── remote-monitoring-architecture.png │ ├── iot-suite-v1-selector-connecting │ │ ├── dashboard.png │ │ ├── suite0.png │ │ ├── suite1.png │ │ ├── suite2.png │ │ └── suite3.png │ ├── iot-suite-v1-send-external-temperature │ │ ├── image1.png │ │ └── image2.png │ ├── iot-suite-v1-visualize-connecting │ │ ├── history.png │ │ ├── suite10.png │ │ ├── suite4.png │ │ ├── suite7-1.png │ │ └── telemetry.png │ └── iot-suite-v1-what-are-preconfigured-solutions │ │ ├── dashboard.png │ │ └── remote-monitoring-arch1.png └── readme.md ├── UnitTests ├── Common │ ├── AzureRetryHelperTests.cs │ ├── ExceptionSerializationTests.cs │ ├── ObjectExtensionTest.cs │ ├── SampleDataGeneratorTests.cs │ ├── SampleDeviceFactoryTests.cs │ ├── SkipByNameContractResolverTests.cs │ ├── StringExtensionTests.cs │ ├── SupportedMethodsHelperTests.cs │ ├── TimeSpanExtensionTests.cs │ ├── TwinCollectionExtensionTests.cs │ ├── TwinExtensionTests.cs │ └── VirtualDeviceTableStorageTests.cs ├── Infrastructure │ ├── ActionLogicTest.cs │ ├── ActionMappingLogicTests.cs │ ├── ActionMappingRepositoryTest.cs │ ├── AlertsRepositoryTests.cs │ ├── ApiRegistrationRepositoryTest.cs │ ├── CommandParameterTypeLogicTests.cs │ ├── DeviceIconRepositoryTest.cs │ ├── DeviceListFilterRepositoryTests.cs │ ├── DeviceListFilterTests.cs │ ├── DeviceLogicTests.cs │ ├── DeviceLogicWithIoTHubDMTests.cs │ ├── DeviceRegistryRepositoryTests.cs │ ├── DeviceRegistryRepositoryWithIoTHubDMTests.cs │ ├── DeviceRulesLogicTests.cs │ ├── DeviceRulesRepositoryTests.cs │ ├── DeviceTelemetryLogicTest.cs │ ├── DeviceTelemetryRepositoryTest.cs │ ├── FilterHelperTests.cs │ ├── FilterLogicTests.cs │ ├── IoTHubRepositoryTests.cs │ ├── JobRepositoryTests.cs │ ├── NameCacheLogicTests.cs │ ├── NameCacheRepositoryTests.cs │ ├── SampleDeviceTypeRepositoryTest.cs │ ├── SecurityKeyGeneratorTests.cs │ ├── UserSettingsLogicTests.cs │ └── UserSettingsRepositoryTests.cs ├── Properties │ └── AssemblyInfo.cs ├── Simulator.WebJob │ ├── AppConfigRepositoryTests.cs │ ├── ChangeDeviceStateCommandProcessorTests.cs │ ├── ChangeSetPointTempCommandProcessorTests.cs │ ├── ConcreteTelemetryTests.cs │ ├── CoolerDeviceFactoryTests.cs │ ├── CoolerDeviceTests.cs │ ├── CoolerTelemetryFactoryTests.cs │ ├── DeserializableCommandTest.cs │ ├── DeviceBaseTests.cs │ ├── DiagnosticTelemetryCommandProcessorTests.cs │ ├── GenericConcreteTelemetryFactoryTests.cs │ ├── PingDeviceProcessorTests.cs │ ├── RemoteMonitorTelemetryTests.cs │ ├── StartCommandProcessorTests.cs │ ├── StartupTelemetryTests.cs │ └── StopCommandProcessorTests.cs ├── TestStubs │ ├── HttpMessageHandlerStub.cs │ └── RandomGeneratorStub.cs ├── UnitTests.csproj ├── Web │ ├── Controllers │ │ ├── ActionControllerTests.cs │ │ ├── AdvancedControllerTests.cs │ │ ├── DashboardControllerTests.cs │ │ ├── DeviceCommandControllerTests.cs │ │ ├── DeviceControllerTests.cs │ │ └── DeviceRulesControllerTests.cs │ ├── Extensions │ │ └── JobTypeExtensionTest.cs │ ├── Helpers │ │ ├── CellularExtensionsTests.cs │ │ ├── DeviceDisplayHelperTests.cs │ │ ├── DeviceJobHelperTests.cs │ │ └── JasperCredentialProviderTests.cs │ └── WebApiControllers │ │ ├── DeviceActionsApiControllerTests.cs │ │ ├── DeviceApiControllerTests.cs │ │ ├── DeviceIconApiControllerTests.cs │ │ ├── DeviceListColumnsApiControllerTests.cs │ │ ├── DeviceRulesApiControllerTests.cs │ │ ├── DeviceTypesControllerTests.cs │ │ ├── FilterApiControllerTests.cs │ │ ├── JobApiControllerTests.cs │ │ ├── KeyApiControllerTests.cs │ │ ├── NameCacheApiControllerTests.cs │ │ ├── TelemetryApiControllerTests.cs │ │ └── WebApiTestHelpers.cs ├── app.config └── packages.config ├── VERSION.txt ├── WebEssentials-Settings.json ├── WebJobHost ├── App.config ├── Global.asax ├── Global.asax.cs ├── Properties │ ├── AssemblyInfo.cs │ └── webjobs-list.json ├── Startup.cs ├── Web.Debug.config ├── Web.Release.config ├── Web.config ├── WebJobHost.csproj └── packages.config ├── build.cmd ├── infrastructure.connectivity.license.txt └── license.txt /.nuget/NuGet.Config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.nuget/NuGet.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/.nuget/NuGet.exe -------------------------------------------------------------------------------- /Common/Configurations/IConfigurationProvider.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Configurations 2 | { 3 | public interface IConfigurationProvider 4 | { 5 | string GetConfigurationSettingValue(string configurationSettingName); 6 | string GetConfigurationSettingValueOrDefault(string configurationSettingName, string defaultValue); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Common/Constants/ApiRegistrationProviderTypes.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Constants 2 | { 3 | public static class ApiRegistrationProviderTypes 4 | { 5 | public const string Jasper = "Jasper"; 6 | public const string Ericsson = "Ericsson"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Common/Helpers/AzureTableStorageClientFactory.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Helpers 2 | { 3 | public class AzureTableStorageClientFactory : IAzureTableStorageClientFactory 4 | { 5 | private IAzureTableStorageClient _tableStorageClient; 6 | 7 | public AzureTableStorageClientFactory() : this(null) 8 | { 9 | } 10 | 11 | public AzureTableStorageClientFactory(IAzureTableStorageClient customClient) 12 | { 13 | _tableStorageClient = customClient; 14 | } 15 | 16 | public IAzureTableStorageClient CreateClient(string storageConnectionString, string tableName) 17 | { 18 | if (_tableStorageClient == null) 19 | { 20 | _tableStorageClient = new AzureTableStorageClient(storageConnectionString, tableName); 21 | } 22 | return _tableStorageClient; 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /Common/Helpers/BlobStorageClientFactory.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Helpers 2 | { 3 | public class BlobStorageClientFactory : IBlobStorageClientFactory 4 | { 5 | private IBlobStorageClient _blobStorageClient; 6 | 7 | public BlobStorageClientFactory() : this(null) 8 | { 9 | } 10 | 11 | public BlobStorageClientFactory(IBlobStorageClient customClient) 12 | { 13 | _blobStorageClient = customClient; 14 | } 15 | 16 | public IBlobStorageClient CreateClient(string storageConnectionString, string containerName) 17 | { 18 | return _blobStorageClient ?? 19 | (_blobStorageClient = new BlobStorageClient(storageConnectionString, containerName)); 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /Common/Helpers/IAzureTableStorageClientFactory.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Helpers 2 | { 3 | public interface IAzureTableStorageClientFactory 4 | { 5 | IAzureTableStorageClient CreateClient(string storageConnectionString, string tableName); 6 | } 7 | } -------------------------------------------------------------------------------- /Common/Helpers/IBlobStorageClientFactory.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Helpers 2 | { 3 | public interface IBlobStorageClientFactory 4 | { 5 | IBlobStorageClient CreateClient(string storageConnectionString, string containerName); 6 | } 7 | } -------------------------------------------------------------------------------- /Common/JsonContractResolvers/SkipByNameContractResolver.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using Newtonsoft.Json; 5 | using Newtonsoft.Json.Serialization; 6 | 7 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.JsonContractResolvers 8 | { 9 | public class SkipByNameContractResolver : DefaultContractResolver 10 | { 11 | private IEnumerable _toBoSkipped; 12 | 13 | public SkipByNameContractResolver(params string[] toBeSkipped) 14 | { 15 | _toBoSkipped = toBeSkipped; 16 | } 17 | 18 | protected override IList CreateProperties(Type type, MemberSerialization memberSerialization) 19 | { 20 | return base.CreateProperties(type, memberSerialization).Where(p => !_toBoSkipped.Contains(p.PropertyName)).ToList(); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Common/Models/ApiRegistrationModel.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Constants; 2 | 3 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Models 4 | { 5 | public class ApiRegistrationModel 6 | { 7 | public string BaseUrl { get; set; } 8 | public string LicenceKey { get; set; } 9 | public string Username { get; set; } 10 | public string Password { get; set; } 11 | public string ApiRegistrationProvider { get; set; } 12 | 13 | public string EnterpriseSenderNumber { get; set; } 14 | public string RegistrationID { get; set; } 15 | public string SmsEndpointBaseUrl { get; set; } 16 | } 17 | } -------------------------------------------------------------------------------- /Common/Models/BlobContents.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | 4 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Models 5 | { 6 | public class BlobContents 7 | { 8 | public Stream Data { get; set; } 9 | public DateTime? LastModifiedTime { get; set; }} 10 | } -------------------------------------------------------------------------------- /Common/Models/DeviceAssociationModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Models 8 | { 9 | public class DeviceAssociationModel 10 | { 11 | public string ApiRegistrationProvider { get; set; } 12 | public bool HasRegistration { get; set; } 13 | public IEnumerable UnassignedIccidList { get; set; } 14 | public IEnumerable UnassignedDeviceIds { get; set; } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Common/Models/DeviceListEntity.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.WindowsAzure.Storage.Table; 2 | 3 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Models 4 | { 5 | public class DeviceListEntity : TableEntity 6 | { 7 | public DeviceListEntity(string hostName, string deviceId) 8 | { 9 | this.PartitionKey = deviceId; 10 | this.RowKey = hostName; 11 | } 12 | 13 | public DeviceListEntity() { } 14 | 15 | [IgnoreProperty] 16 | public string HostName 17 | { 18 | get { return this.RowKey; } 19 | set { this.RowKey = value; } 20 | } 21 | 22 | [IgnoreProperty] 23 | public string DeviceId 24 | { 25 | get { return this.PartitionKey; } 26 | set { this.PartitionKey = value; } 27 | } 28 | 29 | public string Key { get; set; } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Common/Models/IccidTableEntity.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.WindowsAzure.Storage.Table; 2 | 3 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Models 4 | { 5 | public class IccidTableEntity : TableEntity 6 | { 7 | public IccidTableEntity(string iccid) 8 | { 9 | RowKey = iccid; 10 | PartitionKey = IccidRegistrationKey.Default.ToString(); 11 | } 12 | 13 | public IccidTableEntity() 14 | { 15 | PartitionKey = IccidRegistrationKey.Default.ToString(); 16 | } 17 | 18 | public string Iccid { get; set; } 19 | public string ProviderName { get; set; } 20 | public string LastSetLocaleServiceRequestId { get; set; } 21 | } 22 | 23 | public enum IccidRegistrationKey 24 | { 25 | Default = 0 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Common/Models/InitialDeviceConfig.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Models 2 | { 3 | /// 4 | /// Device config that is read from a repository to init a set of devices 5 | /// in a single simulator for testing. 6 | /// 7 | public class InitialDeviceConfig 8 | { 9 | /// 10 | /// IoT Hub HostName 11 | /// 12 | public string HostName { get; set; } 13 | public string DeviceId { get; set; } 14 | public string Key { get; set; } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Common/Models/IoTHub.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Models 4 | { 5 | public class IoTHub 6 | { 7 | public string MessageId { get; set; } 8 | public string CorrelationId { get; set; } 9 | public string ConnectionDeviceId { get; set; } 10 | public string ConnectionDeviceGenerationId { get; set; } 11 | public DateTime EnqueuedTime { get; set; } 12 | public string StreamId { get; set; } 13 | public override string ToString() 14 | { 15 | return Newtonsoft.Json.JsonConvert.SerializeObject(this); 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /Common/Models/SecurityKeys.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel.DataAnnotations; 2 | 3 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Models 4 | { 5 | public class SecurityKeys 6 | { 7 | public SecurityKeys(string primaryKey, string secondaryKey) 8 | { 9 | PrimaryKey = primaryKey; 10 | SecondaryKey = secondaryKey; 11 | } 12 | 13 | public string PrimaryKey { get; set; } 14 | 15 | public string SecondaryKey { get; set; } 16 | } 17 | 18 | public enum SecurityKey 19 | { 20 | None = 0, 21 | [Display(Name = "primary")] 22 | Primary, 23 | [Display(Name = "secondary")] 24 | Secondary 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Common/Models/SimStateModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Models 8 | { 9 | public class SimStateModel 10 | { 11 | public string Id { get; set; } 12 | public string Name { get; set; } 13 | public bool IsActive { get; set; } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Common/Models/SubscriptionPackageModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Models 8 | { 9 | public class SubscriptionPackageModel 10 | { 11 | public string Id { get; set; } 12 | public string Name { get; set; } 13 | public bool IsActive { get; set; } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Common/Models/SupportedMethod.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Newtonsoft.Json; 3 | 4 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Models 5 | { 6 | public class SupportedMethod 7 | { 8 | [JsonConstructor] 9 | public SupportedMethod() 10 | { 11 | Parameters = new Dictionary(); 12 | } 13 | 14 | public string Name { get; set; } 15 | public Dictionary Parameters { get; set; } 16 | public string Description { get; set; } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Common/Models/SystemProperties.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Models 2 | { 3 | public class SystemProperties 4 | { 5 | public string ICCID { get; set; } 6 | public override string ToString() 7 | { 8 | return Newtonsoft.Json.JsonConvert.SerializeObject(this); 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /Common/Models/TableStorageResponse.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Models 8 | { 9 | public class TableStorageResponse 10 | { 11 | public T Entity { get; set; } 12 | public TableStorageResponseStatus Status { get; set; } 13 | } 14 | 15 | public enum TableStorageResponseStatus 16 | { 17 | Successful, ConflictError, UnknownError, DuplicateInsert, NotFound 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Common/Models/Telemetry.cs: -------------------------------------------------------------------------------- 1 | using Newtonsoft.Json; 2 | 3 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Models 4 | { 5 | public class Telemetry 6 | { 7 | [JsonConstructor] 8 | public Telemetry() 9 | { 10 | 11 | } 12 | 13 | public Telemetry(string name, string displayName, string type) 14 | { 15 | Name = name; 16 | DisplayName = displayName; 17 | Type = type; 18 | } 19 | 20 | public string Name { get; set; } 21 | public string DisplayName { get; set; } 22 | public string Type { get; set; } 23 | public override string ToString() 24 | { 25 | return Newtonsoft.Json.JsonConvert.SerializeObject(this); 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /Common/SampleDataGenerator/IRandomGenerator.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.SampleDataGenerator 2 | { 3 | public interface IRandomGenerator 4 | { 5 | double GetRandomDouble(); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Common/SampleDataGenerator/RandomGenerator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.SampleDataGenerator 4 | { 5 | public class RandomGenerator : IRandomGenerator 6 | { 7 | private static readonly Random _random = BuildRandomSource(); 8 | 9 | public RandomGenerator() 10 | { 11 | } 12 | 13 | public double GetRandomDouble() 14 | { 15 | lock (_random) 16 | { 17 | return _random.NextDouble(); 18 | } 19 | } 20 | 21 | private static Random BuildRandomSource() 22 | { 23 | return new Random(Guid.NewGuid().GetHashCode()); 24 | } 25 | } 26 | } -------------------------------------------------------------------------------- /DeviceAdministration/DeviceAdministration.ruleset: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/BusinessLogic/IActionLogic.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Threading.Tasks; 3 | 4 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.BusinessLogic 5 | { 6 | public interface IActionLogic 7 | { 8 | Task> GetAllActionIdsAsync(); 9 | 10 | Task ExecuteLogicAppAsync(string actionId, string deviceId, string measurementName, double measuredValue); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/BusinessLogic/IActionMappingLogic.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Threading.Tasks; 3 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models; 4 | 5 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.BusinessLogic 6 | { 7 | public interface IActionMappingLogic 8 | { 9 | Task IsInitializationNeededAsync(); 10 | Task InitializeDataIfNecessaryAsync(); 11 | Task> GetAllMappingsAsync(); 12 | Task GetActionIdFromRuleOutputAsync(string ruleOutput); 13 | Task SaveMappingAsync(ActionMapping action); 14 | Task> GetAvailableRuleOutputsAsync(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/BusinessLogic/IAlertsLogic.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Threading.Tasks; 4 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models; 5 | 6 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.BusinessLogic 7 | { 8 | public interface IAlertsLogic 9 | { 10 | Task> LoadLatestAlertHistoryAsync(DateTime cutoffTime, int minResults); 11 | } 12 | } -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/BusinessLogic/ICommandParameterTypeLogic.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.BusinessLogic 2 | { 3 | public interface ICommandParameterTypeLogic 4 | { 5 | bool IsValid(string typeName, object value); 6 | object Get(string typeName, object value); 7 | } 8 | } -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/BusinessLogic/IDeviceTelemetryLogic.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Threading.Tasks; 4 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models; 5 | 6 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.BusinessLogic 7 | { 8 | public interface IDeviceTelemetryLogic 9 | { 10 | Task> LoadLatestDeviceTelemetryAsync( 11 | string deviceId, 12 | IList telemetryFields, 13 | DateTime minTime); 14 | 15 | Task LoadLatestDeviceTelemetrySummaryAsync( 16 | string deviceId, 17 | DateTime? minTime); 18 | 19 | Func ProduceGetLatestDeviceAlertTime( 20 | IEnumerable alertHistoryModels); 21 | } 22 | } -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/BusinessLogic/IDeviceTypeLogic.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Threading.Tasks; 3 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models; 4 | 5 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.BusinessLogic 6 | { 7 | public interface IDeviceTypeLogic 8 | { 9 | Task> GetAllDeviceTypesAsync(); 10 | Task GetDeviceTypeAsync(int deviceTypeId); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/BusinessLogic/IKeyLogic.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Models; 3 | 4 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.BusinessLogic 5 | { 6 | public interface IKeyLogic 7 | { 8 | Task GetKeysAsync(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/BusinessLogic/ISecurityKeyGenerator.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Models; 2 | 3 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.BusinessLogic 4 | { 5 | public interface ISecurityKeyGenerator 6 | { 7 | /// 8 | /// Creates a random security key pair 9 | /// 10 | /// Populated SecurityKeys object 11 | SecurityKeys CreateRandomKeys(); 12 | } 13 | } -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/BusinessLogic/IUserSettingsLogic.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Threading.Tasks; 3 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models; 4 | 5 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.BusinessLogic 6 | { 7 | public interface IUserSettingsLogic 8 | { 9 | Task> GetDeviceListColumnsAsync(string userId); 10 | Task> GetGlobalDeviceListColumnsAsync(); 11 | Task SetDeviceListColumnsAsync(string userId, IEnumerable columns, bool saveAsGlobal = false); 12 | } 13 | } -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/BusinessLogic/KeyLogic.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Models; 3 | 4 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.BusinessLogic 5 | { 6 | public class KeyLogic : IKeyLogic 7 | { 8 | private readonly ISecurityKeyGenerator _keyGenerator; 9 | 10 | public KeyLogic(ISecurityKeyGenerator keyGenerator) 11 | { 12 | _keyGenerator = keyGenerator; 13 | } 14 | 15 | public async Task GetKeysAsync() 16 | { 17 | return await Task.Run(() => { return _keyGenerator.CreateRandomKeys(); }); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Constants.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure 2 | { 3 | public static class Constants 4 | { 5 | public const string UnnamedFilterName = "Unnamed Filter"; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Exceptions/DuplicatedJobFoundException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Runtime.Serialization; 3 | 4 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Exceptions 5 | { 6 | [Serializable] 7 | public class DuplicatedJobFoundException : Exception 8 | { 9 | public string JobID { get; set; } 10 | 11 | public DuplicatedJobFoundException(string jobID) 12 | : base(FormattableString.Invariant($"Multiplte jobs with the same ID ({jobID}) were found in the table")) 13 | { 14 | JobID = jobID; 15 | } 16 | 17 | public override void GetObjectData(SerializationInfo info, StreamingContext context) 18 | { 19 | base.GetObjectData(info, context); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Exceptions/FilterNotFoundException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Runtime.Serialization; 3 | 4 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Exceptions 5 | { 6 | [Serializable] 7 | public class FilterNotFoundException : Exception 8 | { 9 | public string FilterId { get; set; } 10 | 11 | public FilterNotFoundException(string filterId) 12 | : base(FormattableString.Invariant($"Filter with Id = '{filterId}' could not be found.")) 13 | { 14 | FilterId = filterId; 15 | } 16 | 17 | public override void GetObjectData(SerializationInfo info, StreamingContext context) 18 | { 19 | base.GetObjectData(info, context); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Exceptions/FilterSaveException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Runtime.Serialization; 3 | 4 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Exceptions 5 | { 6 | [Serializable] 7 | public class FilterSaveException : Exception 8 | { 9 | public string FilterId { get; internal set; } 10 | public string FilterName { get; internal set; } 11 | 12 | public FilterSaveException(string filterId, string filterName) 13 | : base(FormattableString.Invariant($"Failed to save Filter with ID = '{filterId}' and Name = '{filterName}' into the table")) 14 | { 15 | FilterId = filterId; 16 | FilterName = filterName; 17 | } 18 | 19 | public override void GetObjectData(SerializationInfo info, StreamingContext context) 20 | { 21 | base.GetObjectData(info, context); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Exceptions/JobNotFoundException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Runtime.Serialization; 3 | 4 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Exceptions 5 | { 6 | [Serializable] 7 | public class JobNotFoundException : Exception 8 | { 9 | public string JobID { get; set; } 10 | 11 | public JobNotFoundException(string jobID) 12 | : base(FormattableString.Invariant($"Job with ID = '{jobID}' could not be found in the table")) 13 | { 14 | JobID = jobID; 15 | } 16 | 17 | public override void GetObjectData(SerializationInfo info, StreamingContext context) 18 | { 19 | base.GetObjectData(info, context); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Exceptions/JobRepositoryRemoveException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Runtime.Serialization; 3 | 4 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Exceptions 5 | { 6 | [Serializable] 7 | public class JobRepositoryRemoveException : Exception 8 | { 9 | public string JobID { get; set; } 10 | 11 | public JobRepositoryRemoveException(string jobID) 12 | : base(FormattableString.Invariant($"Failed to delete Job with ID = '{jobID}' from the table")) 13 | { 14 | JobID = jobID; 15 | } 16 | 17 | public override void GetObjectData(SerializationInfo info, StreamingContext context) 18 | { 19 | base.GetObjectData(info, context); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Exceptions/JobRepositorySaveException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Runtime.Serialization; 3 | 4 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Exceptions 5 | { 6 | [Serializable] 7 | public class JobRepositorySaveException : Exception 8 | { 9 | public string JobID { get; set; } 10 | 11 | public JobRepositorySaveException(string jobID) 12 | : base(FormattableString.Invariant($"Failed to save Job with ID = '{jobID}' into the table")) 13 | { 14 | JobID = jobID; 15 | } 16 | 17 | public override void GetObjectData(SerializationInfo info, StreamingContext context) 18 | { 19 | base.GetObjectData(info, context); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Models/ActionMapping.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models 2 | { 3 | /// 4 | /// Defines a mapping between a RuleOutput value (output from the ASA job looking 5 | /// for alarm-like conditions), and an ActionId (which is currently 6 | /// associated with a logic app). 7 | /// 8 | public class ActionMapping 9 | { 10 | public string RuleOutput { get; set; } 11 | 12 | public string ActionId { get; set; } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Models/ActionMappingExtended.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models 2 | { 3 | /// 4 | /// Model object that extends ActionMapping with additional data 5 | /// 6 | public class ActionMappingExtended : ActionMapping 7 | { 8 | public int NumberOfDevices { get; set; } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Models/Clause.cs: -------------------------------------------------------------------------------- 1 | using Newtonsoft.Json; 2 | using Newtonsoft.Json.Converters; 3 | 4 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models 5 | { 6 | /// 7 | /// Represents a single set of filtering data for a device 8 | /// 9 | public class Clause 10 | { 11 | public string ColumnName { get; set; } 12 | [JsonConverter(typeof(StringEnumConverter))] 13 | public ClauseType ClauseType { get; set; } 14 | public string ClauseValue { get; set; } 15 | public TwinDataType ClauseDataType { get; set; } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Models/DeviceApplicableResult.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models 8 | { 9 | public class DeviceApplicableResult 10 | { 11 | public int Total { get; set; } 12 | public int Applicable { get; set; } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Models/DeviceIconResult.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models 8 | { 9 | public class DeviceIconResult 10 | { 11 | public int TotalCount; 12 | public IEnumerable Results; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Models/DeviceListColumns.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models 2 | { 3 | public class DeviceListColumns 4 | { 5 | public string Name { get; set; } 6 | 7 | public string Alias { get; set; } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Models/DeviceListColumnsTableEntity.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Microsoft.WindowsAzure.Storage.Table; 3 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Extensions; 4 | 5 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models 6 | { 7 | public class DeviceListColumnsTableEntity : TableEntity 8 | { 9 | public DeviceListColumnsTableEntity(string userId) 10 | { 11 | if (userId.IsAllowedTableKey()) 12 | { 13 | this.RowKey = userId; 14 | } 15 | else 16 | { 17 | throw new ArgumentException("Incorrect name as table key: {0}", userId); 18 | } 19 | } 20 | 21 | public DeviceListColumnsTableEntity() { } 22 | 23 | public string Columns { get; set; } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Models/DeviceListFilterResult.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Models; 3 | 4 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models 5 | { 6 | public class DeviceListFilterResult 7 | { 8 | public int TotalDeviceCount { get; set; } 9 | public int TotalFilteredCount { get; set; } 10 | public List Results { get; set; } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Models/DeviceListLocationsModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models 8 | { 9 | public class DeviceListLocationsModel 10 | { 11 | public List DeviceLocationList { get; set; } 12 | public double MinimumLatitude { get; set; } 13 | public double MaximumLatitude { get; set; } 14 | public double MinimumLongitude { get; set; } 15 | public double MaximumLongitude { get; set; } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Models/DeviceLocationModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models 8 | { 9 | public class DeviceLocationModel 10 | { 11 | public string DeviceId { get; set; } 12 | public double Latitude { get; set; } 13 | public double Longitude { get; set; } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Models/DeviceRuleBlobEntity.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models 2 | { 3 | public class DeviceRuleBlobEntity 4 | { 5 | public DeviceRuleBlobEntity(string deviceId) 6 | { 7 | DeviceId = deviceId; 8 | } 9 | 10 | public string DeviceId { get; private set; } 11 | public double? Temperature { get; set; } 12 | public double? Humidity { get; set; } 13 | public string TemperatureRuleOutput { get; set; } 14 | public string HumidityRuleOutput { get; set; } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Models/DeviceRuleDataFields.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models 4 | { 5 | public static class DeviceRuleDataFields 6 | { 7 | public static string Temperature 8 | { 9 | get 10 | { 11 | return "Temperature"; 12 | } 13 | } 14 | 15 | public static string Humidity 16 | { 17 | get 18 | { 19 | return "Humidity"; 20 | } 21 | } 22 | 23 | private static List _availableDataFields = new List 24 | { 25 | Temperature, Humidity 26 | }; 27 | 28 | public static List GetListOfAvailableDataFields() 29 | { 30 | return _availableDataFields; 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Models/DeviceRuleUpdateRequest.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models 2 | { 3 | public class DeviceRuleUpdateRequest 4 | { 5 | public DeviceRule UpdatedRule { get; set; } 6 | public DeviceRule UnmodifiedRule { get; set; } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Models/DeviceState.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models 2 | { 3 | public class DeviceState 4 | { 5 | public DeviceState(string deviceId, string sensorValue) 6 | { 7 | DeviceId = deviceId; 8 | SensorValue = sensorValue; 9 | } 10 | 11 | public string DeviceId { get; set; } 12 | public string SensorValue { get; set; } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Models/DeviceType.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models 4 | { 5 | /// 6 | /// Represents a type of device that can be selected during the add device wizard 7 | /// 8 | public class DeviceType 9 | { 10 | public int DeviceTypeId { get; set; } 11 | public string Name { get; set; } 12 | public string Description { get; set; } 13 | public Uri ImageUrl { get; set; } 14 | public string InstructionsUrl { get; set; } 15 | public bool IsSimulatedDevice { get; set; } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Models/DeviceWithKeys.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Models; 2 | 3 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models 4 | { 5 | public class DeviceWithKeys 6 | { 7 | public DeviceModel Device { get; set; } 8 | public SecurityKeys SecurityKeys { get; set; } 9 | 10 | public DeviceWithKeys(DeviceModel device, SecurityKeys securityKeys) 11 | { 12 | Device = device; 13 | SecurityKeys = securityKeys; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Models/JobSummary.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models 2 | { 3 | public class JobSummary 4 | { 5 | public JobSummaryType SummaryType { get; set; } 6 | 7 | public int Total { get; set; } 8 | 9 | public enum JobSummaryType 10 | { 11 | ActiveJobs, 12 | DeviceWithScheduledJobs, 13 | FailedJobsInLast24Hours 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Models/MatchingDevices.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models 2 | { 3 | public class MatchingDevices 4 | { 5 | public int MatchedCount { get; set; } 6 | 7 | public int UnMatchCount { get; set; } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Models/NameCacheEntity.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Models; 2 | using System.Collections.Generic; 3 | 4 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models 5 | { 6 | public class NameCacheEntity 7 | { 8 | public string Name { get; set; } 9 | public List Parameters { get; set; } 10 | public string Description { get; set; } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Models/NameCacheEntityType.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models 4 | { 5 | [Flags] 6 | public enum NameCacheEntityType 7 | { 8 | DeviceInfo = 1, 9 | Tag = 2, 10 | DesiredProperty = 4, 11 | ReportedProperty = 8, 12 | Method = 16, 13 | Property = DesiredProperty | ReportedProperty, 14 | All = DeviceInfo | Tag | DesiredProperty | ReportedProperty | Method, 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Models/NameCacheTableEntity.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.WindowsAzure.Storage.Table; 2 | 3 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models 4 | { 5 | public class NameCacheTableEntity : TableEntity 6 | { 7 | public NameCacheTableEntity(NameCacheEntityType entityType, string name) 8 | { 9 | this.PartitionKey = entityType.ToString(); 10 | this.RowKey = name; 11 | } 12 | 13 | public NameCacheTableEntity() { } 14 | 15 | [IgnoreProperty] 16 | public string Name 17 | { 18 | get { return this.RowKey; } 19 | set { this.RowKey = value; } 20 | } 21 | 22 | public string MethodParameters { get; set; } 23 | 24 | public string MethodDescription { get; set; } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Models/QuerySortOrder.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models 2 | { 3 | public enum QuerySortOrder 4 | { 5 | Ascending, 6 | Descending 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Models/TwinDataType.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models 2 | { 3 | public enum TwinDataType 4 | { 5 | String, 6 | Number, 7 | Boolean 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Models/UserSetting.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models 8 | { 9 | public class UserSetting 10 | { 11 | public UserSetting() 12 | { 13 | 14 | } 15 | 16 | public UserSetting(UserSettingTableEntity entity) 17 | { 18 | Key = entity.RowKey; 19 | Value = entity.SettingValue; 20 | Etag = entity.ETag; 21 | } 22 | 23 | public UserSetting(string key, string value) 24 | { 25 | Key = key; 26 | Value = value; 27 | } 28 | 29 | public string Etag { get; set; } 30 | public string Key { get; set; } 31 | public string Value { get; set; } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Models/UserSettingTableEntity.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.WindowsAzure.Storage.Table; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models 9 | { 10 | public class UserSettingTableEntity : TableEntity 11 | { 12 | public UserSettingTableEntity() 13 | { 14 | 15 | } 16 | 17 | public UserSettingTableEntity(string userId, UserSetting setting) 18 | { 19 | PartitionKey = userId; 20 | RowKey = setting.Key; 21 | SettingValue = setting.Value; 22 | ETag = "*"; 23 | } 24 | 25 | public string SettingValue { get; set; } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Repository/IActionMappingRepository.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Threading.Tasks; 3 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models; 4 | 5 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Repository 6 | { 7 | /// 8 | /// Defines the interface to the actions repository, which stores the 9 | /// mappings of ActionId values to logic app actions. 10 | /// 11 | public interface IActionMappingRepository 12 | { 13 | Task> GetAllMappingsAsync(); 14 | Task SaveMappingAsync(ActionMapping m); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Repository/IActionRepository.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Threading.Tasks; 3 | 4 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Repository 5 | { 6 | /// 7 | /// Represents a repository for actions in response to rules (actions are currently logic apps) 8 | /// 9 | public interface IActionRepository 10 | { 11 | Task AddActionEndpoint(string actionId, string endpoint); 12 | 13 | Task> GetAllActionIdsAsync(); 14 | 15 | Task ExecuteLogicAppAsync(string actionId, string deviceId, string measurementName, double measuredValue); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Repository/IAlertsRepository.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Threading.Tasks; 4 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models; 5 | 6 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Repository 7 | { 8 | public interface IAlertsRepository 9 | { 10 | Task> LoadLatestAlertHistoryAsync(DateTime minTime, int minResults); 11 | } 12 | } -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Repository/IApiRegistrationRepository.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Models; 2 | 3 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Repository 4 | { 5 | public interface IApiRegistrationRepository 6 | { 7 | bool AmendRegistration(ApiRegistrationModel apiRegistrationModel); 8 | ApiRegistrationModel RecieveDetails(); 9 | bool IsApiRegisteredInAzure(); 10 | bool DeleteApiDetails(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Repository/IDeviceIconRepository.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.IO; 3 | using System.Threading.Tasks; 4 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models; 5 | 6 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Repository 7 | { 8 | public interface IDeviceIconRepository 9 | { 10 | Task AddIcon(string fileName, Stream fileStream); 11 | Task GetIcon(string name); 12 | Task GetIcons(int skip, int take); 13 | Task SaveIcon(string name); 14 | Task DeleteIcon(string name); 15 | Task GetIconStorageUriPrefix(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Repository/IDeviceRegistryListRepository.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models; 3 | 4 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Repository 5 | { 6 | public interface IDeviceRegistryListRepository 7 | { 8 | /// 9 | /// Gets a list of type Device depending on search parameters, sort column, sort direction, 10 | /// starting point, page size, and filters. 11 | /// 12 | /// The device filter. 13 | /// 14 | Task GetDeviceList(DeviceListFilter filter); 15 | } 16 | } -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Repository/IDeviceTelemetryRepository.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Threading.Tasks; 4 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models; 5 | 6 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Repository 7 | { 8 | public interface IDeviceTelemetryRepository 9 | { 10 | Task> LoadLatestDeviceTelemetryAsync( 11 | string deviceId, 12 | IList telemetryFields, 13 | DateTime minTime); 14 | 15 | Task LoadLatestDeviceTelemetrySummaryAsync( 16 | string deviceId, 17 | DateTime? minTime); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Repository/IDeviceTypeRepository.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Threading.Tasks; 3 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models; 4 | 5 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Repository 6 | { 7 | public interface IDeviceTypeRepository 8 | { 9 | Task> GetAllDeviceTypesAsync(); 10 | Task GetDeviceTypeAsync(int deviceTypeId); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Repository/IIccidRepository.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using DeviceManagement.Infrustructure.Connectivity.Models.TerminalDevice; 3 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Models; 4 | 5 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Repository 6 | { 7 | public interface IIccidRepository 8 | { 9 | bool AddIccid(Iccid iccid, string providerName); 10 | bool AddIccids(List iccids, string providerName); 11 | bool DeleteIccidTableEntity(IccidTableEntity iccidTableEntity); 12 | bool DeleteAllIccids(); 13 | IList GetIccids(); 14 | string GetLastSetLocaleServiceRequestId(string iccid); 15 | void SetLastSetLocaleServiceRequestId(string iccid, string serviceRequestId); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Repository/IJobRepository.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Threading.Tasks; 3 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models; 4 | 5 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Repository 6 | { 7 | public interface IJobRepository 8 | { 9 | Task AddAsync(JobRepositoryModel job); 10 | Task DeleteAsync(string jobId); 11 | Task QueryByJobIDAsync(string jobId); 12 | Task> QueryByFilterIdAsync(string filterId); 13 | Task> UpdateAssociatedFilterNameAsync(IEnumerable jobs); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /DeviceAdministration/Infrastructure/Repository/IUserSettingsRepository.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Models; 2 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Linq; 6 | using System.Text; 7 | using System.Threading.Tasks; 8 | 9 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Repository 10 | { 11 | public interface IUserSettingsRepository 12 | { 13 | Task GetUserSettingAsync(string userId, string settingKey); 14 | Task GetGlobalUserSettingAsync(string settingKey); 15 | Task SetUserSettingAsync(string userId, UserSetting setting, bool saveAsGlobal); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/App_Code/IoTHelpers.cshtml: -------------------------------------------------------------------------------- 1 | @using GlobalResources 2 | @helper TextCopy(string idPrefix, string classname, string content, string class_styles_modifier = "", string button_style_modifier = "") 3 | { 4 | var uniqueId = string.Format("{0}_{1}", idPrefix, Guid.NewGuid()); 5 | 6 |
7 | 8 | 11 |
12 | } 13 | 14 | @helper ErrorLabel(string content) 15 | { 16 | 17 | @content 18 | 19 | } 20 | 21 | 22 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/App_Start/FilterConfig.cs: -------------------------------------------------------------------------------- 1 | using System.Web.Mvc; 2 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Filters; 3 | 4 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web 5 | { 6 | public class FilterConfig 7 | { 8 | public static void RegisterGlobalFilters(GlobalFilterCollection filters) 9 | { 10 | filters.Add(new HandleErrorAttribute()); 11 | filters.Add(new ErrorHandlingFilter()); 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/App_Start/RouteConfig.cs: -------------------------------------------------------------------------------- 1 | using System.Web.Mvc; 2 | using System.Web.Routing; 3 | 4 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web 5 | { 6 | public class RouteConfig 7 | { 8 | public static void RegisterRoutes(RouteCollection routes) 9 | { 10 | routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 11 | 12 | routes.MapRoute( 13 | name: "Default", 14 | url: "{controller}/{action}/{id}", 15 | defaults: new { controller = "Account", action = "SignIn", id = UrlParameter.Optional } 16 | ); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/App_Start/Startup.Json.cs: -------------------------------------------------------------------------------- 1 | using System.Net.Http.Formatting; 2 | using Newtonsoft.Json; 3 | using Newtonsoft.Json.Serialization; 4 | using Owin; 5 | 6 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web 7 | { 8 | public partial class Startup 9 | { 10 | public void ConfigureJson(IAppBuilder app) 11 | { 12 | MediaTypeFormatterCollection formatters = Startup.HttpConfiguration.Formatters; 13 | JsonMediaTypeFormatter jsonFormatter = formatters.JsonFormatter; 14 | JsonSerializerSettings settings = jsonFormatter.SerializerSettings; 15 | settings.ContractResolver = new CamelCasePropertyNamesContractResolver(); 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/App_Start/Startup.WebApi.cs: -------------------------------------------------------------------------------- 1 | using System.Web.Http; 2 | using System.Net.Http.Formatting; 3 | using Owin; 4 | 5 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web 6 | { 7 | public partial class Startup 8 | { 9 | public void ConfigureWebApi(IAppBuilder app) 10 | { 11 | app.UseWebApi(Startup.HttpConfiguration); 12 | Startup.HttpConfiguration.MapHttpAttributeRoutes(); 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Constants.cs: -------------------------------------------------------------------------------- 1 | // --------------------------------------------------------------- 2 | // Copyright (c) Microsoft Corporation. All rights reserved. 3 | // --------------------------------------------------------------- 4 | 5 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web 6 | { 7 | public static class Constants 8 | { 9 | public const string JSVersion = "1.6.0.0"; 10 | public const string CultureCookieName = "_culture"; 11 | public const string DeviceIconTagName = "__icon__"; 12 | public const string DeviceIconFullTagName = "tags." + DeviceIconTagName; 13 | } 14 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/DeviceAdministration/Web/Content/favicon.ico -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/add.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/button_back.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/button_page_next.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/button_page_prev.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/clausechecked.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/clausechecked2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 15 | 16 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/collapsed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/column_add.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 8 | 9 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/expanded.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/icon-account.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/DeviceAdministration/Web/Content/img/icon-account.png -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/icon-globe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/DeviceAdministration/Web/Content/img/icon-globe.png -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/icon_actions.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/icon_add.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/icon_add_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/icon_confirmed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 8 | 9 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/icon_dashboard.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/icon_deviceExplorer_details_close.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/icon_deviceExplorer_details_open.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/icon_info_gray.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 13 | 14 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/icon_info_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 13 | 14 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/icon_jasper.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/icon_status_alarm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/icon_status_all_clear.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/icon_status_caution.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/icon_status_critical.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/icon_status_disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/icon_status_enabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/icon_status_information.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/icon_status_null.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/map_addrs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/DeviceAdministration/Web/Content/img/map_addrs.png -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/map_copyrights.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/DeviceAdministration/Web/Content/img/map_copyrights.png -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/schedule_job.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/search.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/sort_asc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/DeviceAdministration/Web/Content/img/sort_asc.png -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/sort_asc_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/DeviceAdministration/Web/Content/img/sort_asc_disabled.png -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/sort_both.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/DeviceAdministration/Web/Content/img/sort_both.png -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/sort_desc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/DeviceAdministration/Web/Content/img/sort_desc.png -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/img/sort_desc_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/DeviceAdministration/Web/Content/img/sort_desc_disabled.png -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/blocks/actions_view/actions_block.less: -------------------------------------------------------------------------------- 1 | .action_properties_id { 2 | overflow: auto; 3 | background-color: @background-color; 4 | margin: 5px 20px 20px 20px; 5 | padding: 10px 10px 10px 20px; 6 | } 7 | 8 | .action_properties_id__select { 9 | width: 250px; 10 | font-size: @font-size-property-value; 11 | display: block; 12 | float: left; 13 | margin: .25em 1em 1.4em 0; 14 | border-color: @form-textbox-border; 15 | background-color: @form-textbox-background; 16 | border-width: 1px; 17 | padding: 0 5px; 18 | min-height: 30px; 19 | box-sizing: content-box; 20 | } 21 | 22 | .action_properties_id__update_action_id { 23 | font-size: @font-size-property-value; 24 | } 25 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/blocks/add_device_views/add_device_copy_block.less: -------------------------------------------------------------------------------- 1 | .device_credentials_header { 2 | color: @text-mainhead-color; 3 | font-size: 26px; 4 | margin-bottom: .4em; 5 | } 6 | 7 | 8 | .table_credentials { 9 | width: 100%; 10 | background-color: @background-color; 11 | padding: 30px; 12 | margin: 0 0 10px 0; 13 | } 14 | 15 | .table_credentials__label { 16 | text-align: right; 17 | width: 1em; 18 | white-space: nowrap; 19 | padding: .52em 1em .52em 0; 20 | font-size: 1.4em; 21 | } 22 | 23 | .table_credentials__value { 24 | padding: .52em 0; 25 | font-size: 1.4em; 26 | } 27 | 28 | .content_instructions { 29 | clear: both; 30 | margin-bottom: 20px; 31 | } 32 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/blocks/remove_view/remove_block.less: -------------------------------------------------------------------------------- 1 | .remove_form { 2 | padding: 15px 30px; 3 | background-color: @background-color; 4 | font-size: 1.4em; 5 | color: #4d4d4d; 6 | } 7 | 8 | .remove_form__remove_confirmation { 9 | margin: .4em 0 .85em 0; 10 | } 11 | 12 | 13 | .remove_checkbox { 14 | margin: 15px 0; 15 | height:16px; 16 | } 17 | 18 | .remove_checkbox__label { 19 | clear: none; 20 | position: absolute; 21 | top: 0; 22 | left: 1.7em; 23 | display: block; 24 | font-size: 16px; 25 | } 26 | 27 | .remove_checkbox_check{ 28 | position:absolute; 29 | top:2px; 30 | } 31 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/blocks/root_styles/root_containers_block.less: -------------------------------------------------------------------------------- 1 | .content_outer { 2 | width: 100%; 3 | overflow-x: hidden; 4 | overflow-y: auto; 5 | background-color: @secondary-color; 6 | } 7 | 8 | .content_outer--background_color { 9 | background-color: @background-color; 10 | } 11 | 12 | .content_outer--inherit_overflow { 13 | overflow: inherit; 14 | } 15 | 16 | .content_inner { 17 | width: auto; 18 | margin: 0 50px; 19 | } 20 | 21 | .content_inner_with_messages { 22 | background-color: @background-color; 23 | margin: 20px 50px 10px 0; 24 | padding: 30px; 25 | } 26 | 27 | .content_inner_with_messages__mesage_text { 28 | margin-bottom: 1.4em; 29 | } 30 | 31 | .content_inner_with_messages__mesage_text:last-child { 32 | margin-bottom: 0; 33 | } 34 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/blocks/rules_view/edit_rule_form_block.less: -------------------------------------------------------------------------------- 1 | .edit_form__select { 2 | display: block; 3 | float: left; 4 | margin: .25em 1em 1.4em 0; 5 | border-color: @form-textbox-border; 6 | background-color: @form-textbox-background; 7 | border-width: 1px; 8 | font-size: .85em; 9 | padding: 0 5px; 10 | min-height: 30px; 11 | box-sizing: content-box; 12 | width: 460px; 13 | } 14 | 15 | .edit_form__edit_rule_value_display { 16 | margin-bottom: 20px; 17 | } 18 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/blocks/rules_view/rules_block.less: -------------------------------------------------------------------------------- 1 | .grid_rules_details { 2 | overflow: auto; 3 | background-color: @background-color; 4 | margin: 5px 20px 20px 20px; 5 | padding: 20px 20px 0 20px; 6 | } 7 | 8 | .grid_rules_details__rule_status_container { 9 | width: 150px; 10 | padding-bottom: 20px; 11 | } 12 | 13 | .rule_status_container___rule_status_button { 14 | width: 100%; 15 | display: block; 16 | padding-top: 5px; 17 | padding-bottom: 5px; 18 | font-size: @font-size-property-value; 19 | margin-bottom: 20px; 20 | } 21 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/bootstrap-datetimepicker-build.less: -------------------------------------------------------------------------------- 1 | // Import bootstrap variables including default color palette and fonts 2 | @import "bootstrap/variables.less"; 3 | 4 | // Import datepicker component 5 | @import "_bootstrap-datetimepicker.less"; 6 | 7 | //this is here so the compiler doesn't complain about a missing bootstrap mixin 8 | .sr-only { 9 | position: absolute; 10 | width: 1px; 11 | height: 1px; 12 | margin: -1px; 13 | padding: 0; 14 | overflow: hidden; 15 | clip: rect(0,0,0,0); 16 | border: 0; 17 | } 18 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/bootstrap/bootstrap.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.3.5 (http://getbootstrap.com) 3 | * Copyright 2011-2015 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */ 6 | 7 | @import "variables.less"; 8 | @import "mixins.less"; 9 | @import "dropdowns.less"; 10 | @import "navbar.less"; 11 | @import "navs.less"; 12 | @import "grid.less"; 13 | @import "component-animations.less"; 14 | @import "popovers.less"; -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/bootstrap/component-animations.less: -------------------------------------------------------------------------------- 1 | // 2 | // Component animations 3 | // -------------------------------------------------- 4 | 5 | // Heads up! 6 | // 7 | // We don't use the `.opacity()` mixin here since it causes a bug with text 8 | // fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552. 9 | 10 | .fade { 11 | opacity: 0; 12 | .transition(opacity .15s linear); 13 | &.in { 14 | opacity: 1; 15 | } 16 | } 17 | 18 | .collapse { 19 | display: none; 20 | 21 | &.in { display: block; } 22 | tr&.in { display: table-row; } 23 | tbody&.in { display: table-row-group; } 24 | } 25 | 26 | .collapsing { 27 | position: relative; 28 | height: 0; 29 | overflow: hidden; 30 | .transition-property(~"height, visibility"); 31 | .transition-duration(.35s); 32 | .transition-timing-function(ease); 33 | } 34 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/bootstrap/mixins/alerts.less: -------------------------------------------------------------------------------- 1 | // Alerts 2 | 3 | .alert-variant(@background; @border; @text-color) { 4 | background-color: @background; 5 | border-color: @border; 6 | color: @text-color; 7 | 8 | hr { 9 | border-top-color: darken(@border, 5%); 10 | } 11 | .alert-link { 12 | color: darken(@text-color, 10%); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/bootstrap/mixins/background-variant.less: -------------------------------------------------------------------------------- 1 | // Contextual backgrounds 2 | 3 | .bg-variant(@color) { 4 | background-color: @color; 5 | a&:hover, 6 | a&:focus { 7 | background-color: darken(@color, 10%); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/bootstrap/mixins/border-radius.less: -------------------------------------------------------------------------------- 1 | // Single side border-radius 2 | 3 | .border-top-radius(@radius) { 4 | border-top-right-radius: @radius; 5 | border-top-left-radius: @radius; 6 | } 7 | .border-right-radius(@radius) { 8 | border-bottom-right-radius: @radius; 9 | border-top-right-radius: @radius; 10 | } 11 | .border-bottom-radius(@radius) { 12 | border-bottom-right-radius: @radius; 13 | border-bottom-left-radius: @radius; 14 | } 15 | .border-left-radius(@radius) { 16 | border-bottom-left-radius: @radius; 17 | border-top-left-radius: @radius; 18 | } 19 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/bootstrap/mixins/center-block.less: -------------------------------------------------------------------------------- 1 | // Center-align a block level element 2 | 3 | .center-block() { 4 | display: block; 5 | margin-left: auto; 6 | margin-right: auto; 7 | } 8 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/bootstrap/mixins/clearfix.less: -------------------------------------------------------------------------------- 1 | // Clearfix 2 | // 3 | // For modern browsers 4 | // 1. The space content is one way to avoid an Opera bug when the 5 | // contenteditable attribute is included anywhere else in the document. 6 | // Otherwise it causes space to appear at the top and bottom of elements 7 | // that are clearfixed. 8 | // 2. The use of `table` rather than `block` is only necessary if using 9 | // `:before` to contain the top-margins of child elements. 10 | // 11 | // Source: http://nicolasgallagher.com/micro-clearfix-hack/ 12 | 13 | .clearfix() { 14 | &:before, 15 | &:after { 16 | content: " "; // 1 17 | display: table; // 2 18 | } 19 | &:after { 20 | clear: both; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/bootstrap/mixins/hide-text.less: -------------------------------------------------------------------------------- 1 | // CSS image replacement 2 | // 3 | // Heads up! v3 launched with only `.hide-text()`, but per our pattern for 4 | // mixins being reused as classes with the same name, this doesn't hold up. As 5 | // of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. 6 | // 7 | // Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757 8 | 9 | // Deprecated as of v3.0.1 (will be removed in v4) 10 | .hide-text() { 11 | font: ~"0/0" a; 12 | color: transparent; 13 | text-shadow: none; 14 | background-color: transparent; 15 | border: 0; 16 | } 17 | 18 | // New mixin to use as of v3.0.1 19 | .text-hide() { 20 | .hide-text(); 21 | } 22 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/bootstrap/mixins/labels.less: -------------------------------------------------------------------------------- 1 | // Labels 2 | 3 | .label-variant(@color) { 4 | background-color: @color; 5 | 6 | &[href] { 7 | &:hover, 8 | &:focus { 9 | background-color: darken(@color, 10%); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/bootstrap/mixins/list-group.less: -------------------------------------------------------------------------------- 1 | // List Groups 2 | 3 | .list-group-item-variant(@state; @background; @color) { 4 | .list-group-item-@{state} { 5 | color: @color; 6 | background-color: @background; 7 | 8 | a&, 9 | button& { 10 | color: @color; 11 | 12 | .list-group-item-heading { 13 | color: inherit; 14 | } 15 | 16 | &:hover, 17 | &:focus { 18 | color: @color; 19 | background-color: darken(@background, 5%); 20 | } 21 | &.active, 22 | &.active:hover, 23 | &.active:focus { 24 | color: #fff; 25 | background-color: @color; 26 | border-color: @color; 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/bootstrap/mixins/nav-divider.less: -------------------------------------------------------------------------------- 1 | // Horizontal dividers 2 | // 3 | // Dividers (basically an hr) within dropdowns and nav lists 4 | 5 | .nav-divider(@color: #e5e5e5) { 6 | height: 1px; 7 | margin: ((@line-height-computed / 2) - 1) 0; 8 | overflow: hidden; 9 | background-color: @color; 10 | } 11 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/bootstrap/mixins/nav-vertical-align.less: -------------------------------------------------------------------------------- 1 | // Navbar vertical align 2 | // 3 | // Vertically center elements in the navbar. 4 | // Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin. 5 | 6 | .navbar-vertical-align(@element-height) { 7 | margin-top: ((@navbar-height - @element-height) / 2); 8 | margin-bottom: ((@navbar-height - @element-height) / 2); 9 | } 10 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/bootstrap/mixins/opacity.less: -------------------------------------------------------------------------------- 1 | // Opacity 2 | 3 | .opacity(@opacity) { 4 | opacity: @opacity; 5 | // IE8 filter 6 | @opacity-ie: (@opacity * 100); 7 | filter: ~"alpha(opacity=@{opacity-ie})"; 8 | } 9 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/bootstrap/mixins/pagination.less: -------------------------------------------------------------------------------- 1 | // Pagination 2 | 3 | .pagination-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) { 4 | > li { 5 | > a, 6 | > span { 7 | padding: @padding-vertical @padding-horizontal; 8 | font-size: @font-size; 9 | line-height: @line-height; 10 | } 11 | &:first-child { 12 | > a, 13 | > span { 14 | .border-left-radius(@border-radius); 15 | } 16 | } 17 | &:last-child { 18 | > a, 19 | > span { 20 | .border-right-radius(@border-radius); 21 | } 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/bootstrap/mixins/panels.less: -------------------------------------------------------------------------------- 1 | // Panels 2 | 3 | .panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) { 4 | border-color: @border; 5 | 6 | & > .panel-heading { 7 | color: @heading-text-color; 8 | background-color: @heading-bg-color; 9 | border-color: @heading-border; 10 | 11 | + .panel-collapse > .panel-body { 12 | border-top-color: @border; 13 | } 14 | .badge { 15 | color: @heading-bg-color; 16 | background-color: @heading-text-color; 17 | } 18 | } 19 | & > .panel-footer { 20 | + .panel-collapse > .panel-body { 21 | border-bottom-color: @border; 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/bootstrap/mixins/progress-bar.less: -------------------------------------------------------------------------------- 1 | // Progress bars 2 | 3 | .progress-bar-variant(@color) { 4 | background-color: @color; 5 | 6 | // Deprecated parent class requirement as of v3.2.0 7 | .progress-striped & { 8 | #gradient > .striped(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/bootstrap/mixins/reset-filter.less: -------------------------------------------------------------------------------- 1 | // Reset filters for IE 2 | // 3 | // When you need to remove a gradient background, do not forget to use this to reset 4 | // the IE filter for IE9 and below. 5 | 6 | .reset-filter() { 7 | filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)")); 8 | } 9 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/bootstrap/mixins/reset-text.less: -------------------------------------------------------------------------------- 1 | .reset-text() { 2 | font-family: @font-family-base; 3 | // We deliberately do NOT reset font-size. 4 | font-style: normal; 5 | font-weight: normal; 6 | letter-spacing: normal; 7 | line-break: auto; 8 | line-height: @line-height-base; 9 | text-align: left; // Fallback for where `start` is not supported 10 | text-align: start; 11 | text-decoration: none; 12 | text-shadow: none; 13 | text-transform: none; 14 | white-space: normal; 15 | word-break: normal; 16 | word-spacing: normal; 17 | word-wrap: normal; 18 | } 19 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/bootstrap/mixins/resize.less: -------------------------------------------------------------------------------- 1 | // Resize anything 2 | 3 | .resizable(@direction) { 4 | resize: @direction; // Options: horizontal, vertical, both 5 | overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible` 6 | } 7 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/bootstrap/mixins/responsive-visibility.less: -------------------------------------------------------------------------------- 1 | // Responsive utilities 2 | 3 | // 4 | // More easily include all the states for responsive-utilities.less. 5 | .responsive-visibility() { 6 | display: block !important; 7 | table& { display: table !important; } 8 | tr& { display: table-row !important; } 9 | th&, 10 | td& { display: table-cell !important; } 11 | } 12 | 13 | .responsive-invisibility() { 14 | display: none !important; 15 | } 16 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/bootstrap/mixins/size.less: -------------------------------------------------------------------------------- 1 | // Sizing shortcuts 2 | 3 | .size(@width; @height) { 4 | width: @width; 5 | height: @height; 6 | } 7 | 8 | .square(@size) { 9 | .size(@size; @size); 10 | } 11 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/bootstrap/mixins/tab-focus.less: -------------------------------------------------------------------------------- 1 | // WebKit-style focus 2 | 3 | .tab-focus() { 4 | // Default 5 | outline: thin dotted; 6 | // WebKit 7 | outline: 5px auto -webkit-focus-ring-color; 8 | outline-offset: -2px; 9 | } 10 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/bootstrap/mixins/table-row.less: -------------------------------------------------------------------------------- 1 | // Tables 2 | 3 | .table-row-variant(@state; @background) { 4 | // Exact selectors below required to override `.table-striped` and prevent 5 | // inheritance to nested tables. 6 | .table > thead > tr, 7 | .table > tbody > tr, 8 | .table > tfoot > tr { 9 | > td.@{state}, 10 | > th.@{state}, 11 | &.@{state} > td, 12 | &.@{state} > th { 13 | background-color: @background; 14 | } 15 | } 16 | 17 | // Hover states for `.table-hover` 18 | // Note: this is not available for cells or rows within `thead` or `tfoot`. 19 | .table-hover > tbody > tr { 20 | > td.@{state}:hover, 21 | > th.@{state}:hover, 22 | &.@{state}:hover > td, 23 | &:hover > .@{state}, 24 | &.@{state}:hover > th { 25 | background-color: darken(@background, 5%); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/bootstrap/mixins/text-emphasis.less: -------------------------------------------------------------------------------- 1 | // Typography 2 | 3 | .text-emphasis-variant(@color) { 4 | color: @color; 5 | a&:hover, 6 | a&:focus { 7 | color: darken(@color, 10%); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/bootstrap/mixins/text-overflow.less: -------------------------------------------------------------------------------- 1 | // Text overflow 2 | // Requires inline-block or block for proper styling 3 | 4 | .text-overflow() { 5 | overflow: hidden; 6 | text-overflow: ellipsis; 7 | white-space: nowrap; 8 | } 9 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/styles/elements/forms.less: -------------------------------------------------------------------------------- 1 | .form_input { 2 | margin-bottom: 0.4em; 3 | display: block; 4 | float: left; 5 | width: 90%; 6 | margin: .25em 1em 0.4em 0; 7 | border: 1px solid @form-textbox-border; 8 | background-color: @form-textbox-background; 9 | font-size: .85em; 10 | padding: 0 5px; 11 | min-height: 30px; 12 | box-sizing: content-box; 13 | &.space_below{ 14 | margin-bottom: 20px; 15 | } 16 | } 17 | 18 | .button_no_float{ 19 | float:none; 20 | &.space_below{ 21 | margin-bottom: 15px; 22 | } 23 | } 24 | 25 | .text_area.tall{ 26 | height: 100px; 27 | } 28 | 29 | .success_text { 30 | color: #39b54a; 31 | font-size: 1em; 32 | clear: both; 33 | } 34 | 35 | .error_text { 36 | color: red; 37 | font-size: 1em; 38 | clear: both; 39 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/themes/base/accordion.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Accordion 1.11.4 3 | * http://jqueryui.com 4 | * 5 | * Copyright jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | * 9 | * http://api.jqueryui.com/accordion/#theming 10 | */ 11 | .ui-accordion .ui-accordion-header { 12 | display: block; 13 | cursor: pointer; 14 | position: relative; 15 | margin: 2px 0 0 0; 16 | padding: .5em .5em .5em .7em; 17 | min-height: 0; /* support: IE7 */ 18 | font-size: 100%; 19 | } 20 | .ui-accordion .ui-accordion-icons { 21 | padding-left: 2.2em; 22 | } 23 | .ui-accordion .ui-accordion-icons .ui-accordion-icons { 24 | padding-left: 2.2em; 25 | } 26 | .ui-accordion .ui-accordion-header .ui-accordion-header-icon { 27 | position: absolute; 28 | left: .5em; 29 | top: 50%; 30 | margin-top: -8px; 31 | } 32 | .ui-accordion .ui-accordion-content { 33 | padding: 1em 2.2em; 34 | border-top: 0; 35 | overflow: auto; 36 | } 37 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/themes/base/all.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI CSS Framework 1.11.4 3 | * http://jqueryui.com 4 | * 5 | * Copyright jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | * 9 | * http://api.jqueryui.com/category/theming/ 10 | */ 11 | @import "base.css"; 12 | @import "theme.css"; 13 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/themes/base/autocomplete.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Autocomplete 1.11.4 3 | * http://jqueryui.com 4 | * 5 | * Copyright jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | * 9 | * http://api.jqueryui.com/autocomplete/#theming 10 | */ 11 | .ui-autocomplete { 12 | position: absolute; 13 | top: 0; 14 | left: 0; 15 | cursor: default; 16 | } 17 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/themes/base/base.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI CSS Framework 1.11.4 3 | * http://jqueryui.com 4 | * 5 | * Copyright jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | * 9 | * http://api.jqueryui.com/category/theming/ 10 | */ 11 | @import url("core.css"); 12 | 13 | @import url("accordion.css"); 14 | @import url("autocomplete.css"); 15 | @import url("button.css"); 16 | @import url("datepicker.css"); 17 | @import url("dialog.css"); 18 | @import url("draggable.css"); 19 | @import url("menu.css"); 20 | @import url("progressbar.css"); 21 | @import url("resizable.css"); 22 | @import url("selectable.css"); 23 | @import url("selectmenu.css"); 24 | @import url("sortable.css"); 25 | @import url("slider.css"); 26 | @import url("spinner.css"); 27 | @import url("tabs.css"); 28 | @import url("tooltip.css"); 29 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/themes/base/draggable.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Draggable 1.11.4 3 | * http://jqueryui.com 4 | * 5 | * Copyright jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | */ 9 | .ui-draggable-handle { 10 | -ms-touch-action: none; 11 | touch-action: none; 12 | } 13 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/DeviceAdministration/Web/Content/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/themes/base/images/ui-bg_flat_75_ffffff_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/DeviceAdministration/Web/Content/themes/base/images/ui-bg_flat_75_ffffff_40x100.png -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/DeviceAdministration/Web/Content/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/themes/base/images/ui-bg_glass_65_ffffff_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/DeviceAdministration/Web/Content/themes/base/images/ui-bg_glass_65_ffffff_1x400.png -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/themes/base/images/ui-bg_glass_75_dadada_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/DeviceAdministration/Web/Content/themes/base/images/ui-bg_glass_75_dadada_1x400.png -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/DeviceAdministration/Web/Content/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/DeviceAdministration/Web/Content/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/DeviceAdministration/Web/Content/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/themes/base/images/ui-icons_222222_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/DeviceAdministration/Web/Content/themes/base/images/ui-icons_222222_256x240.png -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/themes/base/images/ui-icons_2e83ff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/DeviceAdministration/Web/Content/themes/base/images/ui-icons_2e83ff_256x240.png -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/themes/base/images/ui-icons_454545_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/DeviceAdministration/Web/Content/themes/base/images/ui-icons_454545_256x240.png -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/themes/base/images/ui-icons_888888_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/DeviceAdministration/Web/Content/themes/base/images/ui-icons_888888_256x240.png -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/themes/base/images/ui-icons_cd0a0a_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/DeviceAdministration/Web/Content/themes/base/images/ui-icons_cd0a0a_256x240.png -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/themes/base/selectable.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Selectable 1.11.4 3 | * http://jqueryui.com 4 | * 5 | * Copyright jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | */ 9 | .ui-selectable { 10 | -ms-touch-action: none; 11 | touch-action: none; 12 | } 13 | .ui-selectable-helper { 14 | position: absolute; 15 | z-index: 100; 16 | border: 1px dotted black; 17 | } 18 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/themes/base/sortable.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Sortable 1.11.4 3 | * http://jqueryui.com 4 | * 5 | * Copyright jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | */ 9 | .ui-sortable-handle { 10 | -ms-touch-action: none; 11 | touch-action: none; 12 | } 13 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Content/themes/base/tooltip.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery UI Tooltip 1.11.4 3 | * http://jqueryui.com 4 | * 5 | * Copyright jQuery Foundation and other contributors 6 | * Released under the MIT license. 7 | * http://jquery.org/license 8 | * 9 | * http://api.jqueryui.com/tooltip/#theming 10 | */ 11 | .ui-tooltip { 12 | padding: 8px; 13 | position: absolute; 14 | z-index: 9999; 15 | max-width: 300px; 16 | background-color:#222; 17 | color:#fff; 18 | } 19 | body .ui-tooltip { 20 | 21 | } 22 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Controllers/AccountController.cs: -------------------------------------------------------------------------------- 1 | using System.Web; 2 | using System.Web.Mvc; 3 | 4 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Controllers 5 | { 6 | [OutputCache(CacheProfile = "NoCacheProfile")] 7 | public class AccountController : Controller 8 | { 9 | public ActionResult SignIn() 10 | { 11 | if (User.Identity.IsAuthenticated) 12 | { 13 | return RedirectToAction("Index", "Dashboard"); 14 | } 15 | else 16 | { 17 | return View(); 18 | } 19 | } 20 | 21 | // GET: SignOut 22 | public ActionResult SignOut() 23 | { 24 | HttpContext.GetOwinContext().Authentication.SignOut(); 25 | return RedirectToAction("Index", "Dashboard"); 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/DataTables/Column.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.DataTables 3 | { 4 | public class Column 5 | { 6 | public string Data { get; set; } 7 | public string Name { get; set; } 8 | public string Searchable { get; set; } 9 | public string Orderable { get; set; } 10 | public Search Search { get; set; } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/DataTables/DataTablesResponse.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Models; 2 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models; 3 | 4 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.DataTables 5 | { 6 | public class DataTablesResponse 7 | { 8 | public int Draw { get; set; } 9 | public int RecordsTotal { get; set; } 10 | public int RecordsFiltered { get; set; } 11 | public T[] Data { get; set; } 12 | } 13 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/DataTables/Search.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.DataTables 2 | { 3 | public class Search 4 | { 5 | public string Value { get; set; } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/DataTables/SortColumn.cs: -------------------------------------------------------------------------------- 1 | using System.Globalization; 2 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models; 3 | using Newtonsoft.Json; 4 | 5 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.DataTables 6 | { 7 | public class SortColumn 8 | { 9 | [JsonProperty("column")] 10 | public string ColumnIndexAsString { get; set; } 11 | public int ColumnIndex 12 | { 13 | get { return int.Parse(this.ColumnIndexAsString, NumberStyles.Integer, CultureInfo.CurrentCulture); } 14 | } 15 | [JsonProperty("dir")] 16 | private string Direction { get; set; } 17 | 18 | public QuerySortOrder SortOrder 19 | { 20 | get 21 | { 22 | return Direction == "asc" ? QuerySortOrder.Ascending : QuerySortOrder.Descending; 23 | } 24 | } 25 | } 26 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Extensions/StringExtentions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web; 5 | 6 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Extensions 7 | { 8 | public static class StringExtentions 9 | { 10 | public static string DefaultIfNull(this string value, string defaultValue = "") 11 | { 12 | return !string.IsNullOrWhiteSpace(value) ? value : defaultValue; 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Filters/ErrorHandlingFilter.cs: -------------------------------------------------------------------------------- 1 | using System.Diagnostics; 2 | using System.Web.Mvc; 3 | 4 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Filters 5 | { 6 | public class ErrorHandlingFilter : IExceptionFilter 7 | { 8 | public void OnException(ExceptionContext context) 9 | { 10 | var exception = context.Exception; 11 | 12 | Trace.TraceError("Unhandled Exception : {0}", exception.Message); 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Global.asax: -------------------------------------------------------------------------------- 1 | <%@ Application Codebehind="Global.asax.cs" Inherits="Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.MvcApplication" Language="C#" %> 2 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Helpers/HeaderHelper.cs: -------------------------------------------------------------------------------- 1 | using System.Web.Mvc; 2 | using GlobalResources; 3 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Configurations; 4 | 5 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Helpers 6 | { 7 | public static class HeaderHelper 8 | { 9 | public static string GetHeaderTitle() 10 | { 11 | var config = DependencyResolver.Current.GetService(); 12 | var defaultSolutionName = Strings.DefaultSolutionName; 13 | string solutionName = config.GetConfigurationSettingValueOrDefault("SolutionName", defaultSolutionName); 14 | return solutionName; 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Helpers/HtmlHelperExtensions.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Helpers 2 | { 3 | using System.Web; 4 | using System.Web.Mvc; 5 | 6 | public static class HtmlHelperExtensions 7 | { 8 | public static IHtmlString JavaScriptString(this HtmlHelper htmlHelper, string message) 9 | { 10 | return htmlHelper.Raw(HttpUtility.JavaScriptStringEncode(message)); 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Models/ActionPropertiesModel.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Security; 2 | 3 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Models 4 | { 5 | public class ActionPropertiesModel 6 | { 7 | public string RuleOutput { get; set; } 8 | public string ActionId { get; set; } 9 | public bool HasAssignActionPerm 10 | { 11 | get 12 | { 13 | return PermsChecker.HasPermission(Permission.AssignAction); 14 | } 15 | } 16 | public UpdateActionModel UpdateActionModel { get; set; } 17 | } 18 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Models/AlerthistoryDeviceModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web; 5 | 6 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Models 7 | { 8 | public class AlertHistoryDeviceModel 9 | { 10 | public string DeviceId 11 | { 12 | get; 13 | set; 14 | } 15 | 16 | public double Latitude 17 | { 18 | get; 19 | set; 20 | } 21 | 22 | public double Longitude 23 | { 24 | get; 25 | set; 26 | } 27 | 28 | public AlertHistoryDeviceStatus Status 29 | { 30 | get; 31 | set; 32 | } 33 | } 34 | 35 | public enum AlertHistoryDeviceStatus 36 | { 37 | AllClear = 0, 38 | Caution, 39 | Critical 40 | } 41 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Models/CellularActionModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Models 4 | { 5 | public class CellularActionModel 6 | { 7 | public CellularActionType Type { get; set; } 8 | public string PreviousValue { get; set; } 9 | public string Value { get; set; } 10 | public Exception Exception { get; set; } 11 | } 12 | 13 | public enum CellularActionType 14 | { 15 | UpdateStatus = 1, 16 | UpdateSubscriptionPackage = 2, 17 | ReconnectDevice = 3, 18 | SendSms = 4, 19 | UpdateLocale = 5 20 | } 21 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Models/CellularActionRequestModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web; 5 | 6 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Models 7 | { 8 | public class CellularActionRequestModel 9 | { 10 | public string DeviceId { get; set; } 11 | public List CellularActions { get; set; } 12 | } 13 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Models/CellularActionUpdateResponseModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web; 5 | 6 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Models 7 | { 8 | public class CellularActionUpdateResponseModel 9 | { 10 | public List CompletedActions { get; set; } 11 | public List FailedActions { get; set; } 12 | public bool Success => !FailedActions.Any(); 13 | public string Error { get; set; } 14 | public List Exceptions { get; set; } 15 | } 16 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Models/CellularConnectivityProviderEnum.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web; 5 | 6 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Models 7 | { 8 | public enum CellularConnectivityProviderEnum 9 | { 10 | Jasper=1, 11 | Ericsson=2 12 | } 13 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Models/DeviceConfigModel.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel.DataAnnotations; 2 | using GlobalResources; 3 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Models; 4 | 5 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Models 6 | { 7 | public class DeviceConfigModel 8 | { 9 | [Required] 10 | public string DeviceId { get; set; } 11 | 12 | public SecurityKeys SecurityKeys { get; set; } 13 | 14 | [MaxLength(1024, ErrorMessageResourceType = typeof(Strings), ErrorMessageResourceName = "AppConfigLength")] 15 | public string AppConfig { get; set; } 16 | 17 | public string Hostname { get; set; } 18 | } 19 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Models/DeviceDetailsKeysModel.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Security; 2 | 3 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Models 4 | { 5 | public class DeviceDetailsKeysModel 6 | { 7 | public string DeviceId { get; set; } 8 | 9 | public bool IsAllowedToViewKeys 10 | { 11 | get 12 | { 13 | return PermsChecker.HasPermission(Permission.ViewDeviceSecurityKeys); 14 | } 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Models/DeviceKeysModel.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Models; 2 | 3 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Models 4 | { 5 | public class DeviceKeysModel 6 | { 7 | public SecurityKeys DeviceKeys { get; set; } 8 | public string DeviceId { get; set; } 9 | 10 | public UpdateKeysModel GetUpdateKeysModel() 11 | { 12 | return new UpdateKeysModel 13 | { 14 | DeviceKeys = DeviceKeys, 15 | DeviceId = DeviceId 16 | }; 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Models/ErrorModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web; 5 | 6 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Models 7 | { 8 | public class ErrorModel 9 | { 10 | public DateTime TimeStamp { get; set; } 11 | public string Message { get; set; } 12 | public string StackTrace { get; set; } 13 | 14 | public ErrorModel() 15 | { 16 | this.TimeStamp = DateTime.Now; 17 | } 18 | 19 | public ErrorModel(string Message) : this() 20 | { 21 | this.Message = Message; 22 | } 23 | 24 | public ErrorModel(System.Exception ex) : this(ex.Message) 25 | { 26 | this.StackTrace = ex.StackTrace; 27 | } 28 | 29 | public override string ToString() 30 | { 31 | return this.Message + this.StackTrace; 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Models/IconActionType.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web; 5 | 6 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Models 7 | { 8 | public enum IconActionType 9 | { 10 | Upload, 11 | Apply, 12 | Remove, 13 | } 14 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Models/LanguageModel.cs: -------------------------------------------------------------------------------- 1 | // --------------------------------------------------------------- 2 | // Copyright (c) Microsoft Corporation. All rights reserved. 3 | // --------------------------------------------------------------- 4 | 5 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Models 6 | { 7 | public sealed class LanguageModel 8 | { 9 | public string Name { get; set; } 10 | 11 | public string CultureName { get; set; } 12 | 13 | public bool IsCurrent { get; set; } 14 | } 15 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Models/NamedDeviceJob.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Models 2 | { 3 | public class NamedDeviceJob 4 | { 5 | public string Name { get; set; } 6 | public DeviceJob Job { get; set; } 7 | } 8 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Models/NamedJobResponseModel.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Models 2 | { 3 | public class NamedJobResponseModel 4 | { 5 | public string Name { get; set; } 6 | public JobResponse Job { get; set; } 7 | } 8 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Models/PreScheduleJobModel.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Security; 3 | 4 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Models 5 | { 6 | public class PreScheduleJobModel 7 | { 8 | public string FilterId { get; set; } 9 | 10 | public IEnumerable JobsSharingQuery { get; set; } 11 | 12 | public bool HasManageJobsPerm 13 | { 14 | get 15 | { 16 | return PermsChecker.HasPermission(Permission.ManageJobs); 17 | } 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Models/PropertyViewModel.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.Models; 2 | using Newtonsoft.Json; 3 | using Newtonsoft.Json.Converters; 4 | using System; 5 | using System.Collections.Generic; 6 | using System.Linq; 7 | using System.Web; 8 | 9 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Models 10 | { 11 | public class PropertyViewModel 12 | { 13 | public string Key { get; set; } 14 | public PropertyViewValue Value { get; set; } 15 | public bool IsDeleted { get; set; } 16 | 17 | [JsonConverter(typeof(StringEnumConverter))] 18 | public TwinDataType DataType { get; set; } 19 | } 20 | 21 | public class PropertyViewValue 22 | { 23 | public dynamic Value { get; set; } 24 | public string LastUpdate { get; set; } 25 | } 26 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Models/ReconnectDeviceModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web; 5 | 6 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Models 7 | { 8 | public class ReconnectDeviceModel 9 | { 10 | public string DeviceId { get; set; } 11 | } 12 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Models/ScheduleJobModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel.DataAnnotations; 3 | 4 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Models 5 | { 6 | public class ScheduleJobViewModel 7 | { 8 | [Required] 9 | public string FilterId { get; set; } 10 | 11 | [Required] 12 | public string FilterName { get; set; } 13 | 14 | public string OriginalJobId { get; set; } 15 | 16 | [Required] 17 | public string JobName { get; set; } 18 | 19 | [Required] 20 | public DateTime StartDateUtc { get; set; } 21 | 22 | [Required] 23 | public double MaxExecutionTimeInMinutes { get; set; } 24 | } 25 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Models/SecurityKeysModel.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Models 2 | { 3 | public class SecurityKeysModel 4 | { 5 | public string PrimaryKey { get; set; } 6 | public string SecondaryKey { get; set; } 7 | } 8 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Models/SendCommandModel.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Web.Mvc; 3 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Models.Commands; 4 | 5 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Models 6 | { 7 | public class SendCommandModel 8 | { 9 | public Command Command { get; set; } 10 | public IList CommandSelectList { get; set; } 11 | public string DeviceId { get; set; } 12 | public bool CanSendDeviceCommands { get; set; } 13 | public bool HasCommands 14 | { 15 | get 16 | { 17 | return CommandSelectList != null && CommandSelectList.Count > 0; 18 | } 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Models/UpdateActionModel.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Web.Mvc; 3 | 4 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Models 5 | { 6 | public class UpdateActionModel 7 | { 8 | public string RuleOutput { get; set; } 9 | public string ActionId { get; set; } 10 | public List ActionSelectList { get; set; } 11 | } 12 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Models/UpdateKeyModel.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Models 2 | { 3 | public class UpdateKeyModel 4 | { 5 | public string DeviceId { get; set; } 6 | public string KeyType { get; set; } 7 | } 8 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Models/UpdateKeysModel.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel.DataAnnotations; 2 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Models; 3 | 4 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Models 5 | { 6 | public class UpdateKeysModel 7 | { 8 | public SecurityKeys DeviceKeys { get; set; } 9 | public string KeyValue { get; set; } 10 | 11 | [Required] 12 | public string KeyType { get; set; } 13 | public string DeviceId { get; set; } 14 | } 15 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Navigation/NavigationMenuItem.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Security; 3 | 4 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Navigation 5 | { 6 | public class NavigationMenuItem 7 | { 8 | public string Text { get; set; } 9 | public string Action { get; set; } 10 | public string Controller { get; set; } 11 | public bool Selected { get; set; } 12 | public string Class { get; set; } 13 | public List Children { get; set; } 14 | 15 | /// 16 | /// Most basic permission user would need to display menu item 17 | /// 18 | public Permission MinimumPermission { get; set; } 19 | } 20 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Scripts/Views/Device/AddDevice.js: -------------------------------------------------------------------------------- 1 | $(function () { 2 | "use strict"; 3 | 4 | $(".header_main__head").text(resources.addDevice); 5 | $(".header_main__subhead").text(resources.stepOneHeader); 6 | $(".header_main__button_back").show(); 7 | $(".header_main__button_back").off("click").click(function () { 8 | location.href = resources.redirectToIndexUrl; 9 | }); 10 | }); -------------------------------------------------------------------------------- /DeviceAdministration/Web/Scripts/Views/Device/AddDeviceCopy.js: -------------------------------------------------------------------------------- 1 | $(function () { 2 | "use strict"; 3 | 4 | $(".header_main__head").text(resources.addDevice); 5 | $(".header_main__subhead").text(resources.stepThree); 6 | $(".header_main__button_back").hide(); 7 | $(".header_main__button_back").off("click"); 8 | }); 9 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Scripts/Views/Device/DeviceSelectType.js: -------------------------------------------------------------------------------- 1 | IoTApp.createModule('IoTApp.DeviceSelectType', (function () { 2 | "use strict"; 3 | 4 | var init = function() { 5 | $(".header_main__head").text(resources.addDevice); 6 | $(".header_main__subhead").text(resources.stepOneHeader); 7 | $(".content_outer").addClass("content_outer--select_device"); 8 | $(".content_inner").addClass("content_inner--select_device"); 9 | $(".header_main__button_back").hide(); 10 | $(".header_main__button_back").off("click"); 11 | } 12 | 13 | var onFailure = function () { 14 | IoTApp.Helpers.Dialog.displayError(resources.selectDeviceTypeError); 15 | } 16 | 17 | return { 18 | init: init, 19 | onFailure: onFailure 20 | } 21 | 22 | }), [jQuery, resources]); 23 | 24 | $(function () { 25 | "use strict"; 26 | 27 | IoTApp.DeviceSelectType.init(); 28 | }); -------------------------------------------------------------------------------- /DeviceAdministration/Web/Scripts/Views/Device/EditDeviceProperties.js: -------------------------------------------------------------------------------- 1 | IoTApp.createModule('IoTApp.EditDeviceProperties', (function () { 2 | "use strict"; 3 | 4 | var self = this; 5 | 6 | var init = function () { 7 | self.backButton = $(".header_main__button_back"); 8 | self.backButton.show(); 9 | self.backButton.off("click").click(backButtonClicked); 10 | } 11 | 12 | var backButtonClicked = function() { 13 | location.href = resources.redirectUrl; 14 | } 15 | 16 | $("form").submit(function () { 17 | $("#loadingElement").show(); 18 | }); 19 | 20 | 21 | return { 22 | init: init 23 | } 24 | }), [jQuery, resources]); 25 | 26 | $(function () { 27 | "use strict"; 28 | 29 | IoTApp.EditDeviceProperties.init(); 30 | }); -------------------------------------------------------------------------------- /DeviceAdministration/Web/Scripts/Views/DeviceRules/AllRulesAssigned.js: -------------------------------------------------------------------------------- 1 | IoTApp.createModule('IoTApp.AllRulesAssigned', (function () { 2 | "use strict"; 3 | 4 | var self = this; 5 | 6 | var init = function () { 7 | self.backButton = $(".header_main__button_back"); 8 | self.backButton.show(); 9 | self.backButton.off("click").click(backButtonClicked); 10 | 11 | $(".view_rules_button").click(viewRules); 12 | } 13 | 14 | var backButtonClicked = function () { 15 | history.back(); 16 | } 17 | 18 | var viewRules = function () { 19 | location.href = resources.redirectUrl; 20 | } 21 | 22 | return { 23 | init: init 24 | } 25 | }), [jQuery, resources]); 26 | 27 | $(function () { 28 | "use strict"; 29 | 30 | IoTApp.AllRulesAssigned.init(); 31 | }); -------------------------------------------------------------------------------- /DeviceAdministration/Web/Scripts/jquery-datatables-api-extensions.js: -------------------------------------------------------------------------------- 1 | jQuery.fn.dataTable.Api.register('page.jumpToRow()', function (arrayPosition) { 2 | "use strict"; 3 | 4 | var pos = -1; 5 | 6 | for (var i = 0, rows = this.rows() ; i < rows[0].length; i++) { 7 | if (rows[0][i] === arrayPosition) { 8 | pos = i; 9 | break; 10 | } 11 | } 12 | 13 | if (pos >= 0) { 14 | var page = Math.floor(pos / this.page.info().length); 15 | this.page(page).draw(false); 16 | } 17 | 18 | return this; 19 | }); 20 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Views/Actions/_ActionProperties.cshtml: -------------------------------------------------------------------------------- 1 | @model Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Models.ActionPropertiesModel 2 | 3 | 4 | @{ 5 | if (Model.HasAssignActionPerm) 6 | { 7 | Html.RenderPartial("_ActionPropertiesUpdateAction", Model.UpdateActionModel); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Views/Actions/_ActionPropertiesUpdateAction.cshtml: -------------------------------------------------------------------------------- 1 | @using System.Web.Mvc.Html 2 | @using GlobalResources 3 | @model Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Models.UpdateActionModel 4 | 5 |
6 |

@Strings.ActionIDProperties

7 |
8 | 9 |
10 |

@Strings.AvailableActions

11 | @Html.DropDownListFor(m => Model.ActionId, Model.ActionSelectList, new { @class = "action_properties_id__select" }) 12 | @Html.ValidationMessageFor(model => model.ActionId) 13 | @Html.AntiForgeryToken() 14 | 15 |
16 | 17 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Views/Advanced/_DeviceAssociation.cshtml: -------------------------------------------------------------------------------- 1 | @using GlobalResources 2 | @using Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Helpers 3 |
4 | @Html.Partial("_IccidAssociation") 5 |
6 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Views/Dashboard/_JobIndicators.cshtml: -------------------------------------------------------------------------------- 1 | @using GlobalResources 2 |
3 | 4 | 11 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Views/Device/_DeviceDetailsCellular.cshtml: -------------------------------------------------------------------------------- 1 | @using GlobalResources 2 | @using Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Helpers 3 | @model Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Models.DeviceDetailModel 4 | 5 |
6 |

@Strings.CellularConnectivityManagement

7 |
8 | 9 |
10 |

11 | @Strings.SIMDetails 12 |

13 |

14 | @Strings.RemoveSimAssociation 15 |

16 |
17 | 18 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Views/Device/_DeviceDetailsKeyLink.cshtml: -------------------------------------------------------------------------------- 1 | @using GlobalResources 2 | @model Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Models.DeviceDetailsKeysModel 3 | 4 |
5 |

@Strings.AuthenticationKeys

6 |
7 | 8 | 9 | @if (Model.IsAllowedToViewKeys) 10 | { 11 |
12 |

13 | @Strings.ViewAuthenticationKeys 14 |

15 |
16 | 17 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Views/Device/_DeviceDetailsKeys.cshtml: -------------------------------------------------------------------------------- 1 | @using GlobalResources 2 | @model Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Models.SecurityKeysModel 3 | 4 |

@Strings.IoTHub

5 | 6 |
@Strings.AuthKey1
7 |

@Model.PrimaryKey

8 | 9 |
@Strings.AuthKey2
10 |

@Model.SecondaryKey

11 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Views/DeviceCommand/_CommandResult.cshtml: -------------------------------------------------------------------------------- 1 | @using Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Helpers 2 | @using GlobalResources 3 | @model string 4 | @{ 5 | var separator = string.Empty; 6 | 7 | var localizedResults = 8 | DeviceDisplayHelper.GetLocalizedCommandResultText( 9 | Model, 10 | ViewData["ErrorMessage"]); 11 | 12 | var className = DeviceDisplayHelper.GetCommandResultClassName(Model); 13 | 14 | if (!string.IsNullOrEmpty(localizedResults.Value)) 15 | { 16 | separator = ":"; 17 | } 18 | 19 | @string.Format("{0}{1}", localizedResults.Key, separator) 20 | } 21 | 22 | @if (!string.IsNullOrEmpty(separator)) 23 | { 24 | @Strings.ClickToDisplayError 25 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Views/DeviceMethod/_MethodResult.cshtml: -------------------------------------------------------------------------------- 1 | @using Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Helpers 2 | @using GlobalResources 3 | @model string 4 | @{ 5 | var separator = string.Empty; 6 | 7 | var localizedResults = 8 | DeviceDisplayHelper.GetLocalizedCommandResultText( 9 | Model, 10 | ViewData["ErrorMessage"]); 11 | 12 | var className = DeviceDisplayHelper.GetCommandResultClassName(Model); 13 | 14 | if (!string.IsNullOrEmpty(localizedResults.Value)) 15 | { 16 | separator = ":"; 17 | } 18 | 19 | @string.Format("{0}{1}", localizedResults.Key, separator) 20 | } 21 | 22 | @if (!string.IsNullOrEmpty(separator)) 23 | { 24 | @Strings.ClickToDisplayError 25 | } -------------------------------------------------------------------------------- /DeviceAdministration/Web/Views/Shared/DisplayTemplates/DateTime.cshtml: -------------------------------------------------------------------------------- 1 | @model DateTime? 2 | 3 | @{ 4 | string appliedClass = this.ViewData["class"] as string; 5 | 6 | if (Model.HasValue) 7 | { 8 | if (string.IsNullOrEmpty(appliedClass)) 9 | { 10 | 11 | } 12 | else 13 | { 14 | 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Views/Shared/DisplayTemplates/ModelStateDictionary.cshtml: -------------------------------------------------------------------------------- 1 | @model ModelStateDictionary 2 | 3 | @{ 4 | var errors = Model.Values.SelectMany(modelState => modelState.Errors).ToList(); 5 | 6 | foreach (var error in errors) 7 | { 8 |
9 | @error.ErrorMessage 10 |
11 | } 12 | } 13 | 14 | 15 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Views/Shared/EditorTemplates/edit_binary.cshtml: -------------------------------------------------------------------------------- 1 | @using GlobalResources 2 | @model string 3 | 4 | @Html.TextBoxFor(m => m, new { Title = Strings.BinaryCommandHint, @class = "command_parameter_field__input--text" }) 5 | 6 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Views/Shared/EditorTemplates/edit_boolean.cshtml: -------------------------------------------------------------------------------- 1 | @model string 2 | @{ 3 | var isChecked = (Model == "true") ? "checked=\"checked\"" : ""; 4 | } 5 | 6 | @Html.HiddenFor(m => m, new { @Value = false }) -------------------------------------------------------------------------------- /DeviceAdministration/Web/Views/Shared/EditorTemplates/edit_byte.cshtml: -------------------------------------------------------------------------------- 1 | @using GlobalResources 2 | @model string 3 | 4 | @Html.TextBoxFor(m => m, new { @Value = Model ?? "", Title = string.Format(Strings.NumberCommandHint, "byte", Byte.MinValue, Byte.MaxValue), @class = "command_parameter_field__input--text" }) 5 | 6 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Views/Shared/EditorTemplates/edit_date.cshtml: -------------------------------------------------------------------------------- 1 | @model string 2 | 3 | @Html.TextBox("", Model, new { @class = "datetime command_parameter_field__input--text", placeholder = "YYYY-MM-DD" }) 4 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Views/Shared/EditorTemplates/edit_decimal.cshtml: -------------------------------------------------------------------------------- 1 | @using GlobalResources 2 | @model string 3 | 4 | @Html.TextBoxFor(m => m, new { @Value = Model ?? "", Title = Strings.DecimalCommandHint, @class = "command_parameter_field__input--text" }) 5 | 6 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Views/Shared/EditorTemplates/edit_double.cshtml: -------------------------------------------------------------------------------- 1 | @using GlobalResources 2 | @model string 3 | @Html.TextBoxFor(m => m, new { @Value = Model ?? "", Title = Strings.DoubleCommandHint, @class = "command_parameter_field__input--text" }) 4 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Views/Shared/EditorTemplates/edit_guid.cshtml: -------------------------------------------------------------------------------- 1 | @using GlobalResources 2 | @model string 3 | 4 | @Html.TextBoxFor(m => m, new { Title = Strings.GuidCommandHint, @class = "command_parameter_field__input--text" }) 5 | 6 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Views/Shared/EditorTemplates/edit_int16.cshtml: -------------------------------------------------------------------------------- 1 | @using GlobalResources 2 | @model string 3 | 4 | @Html.TextBoxFor(m => m, new { @Value = Model ?? "", Title = string.Format(Strings.NumberCommandHint, "int16", Int16.MinValue, Int16.MaxValue), @class = "command_parameter_field__input--text" }) 5 | 6 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Views/Shared/EditorTemplates/edit_int32.cshtml: -------------------------------------------------------------------------------- 1 | @using GlobalResources 2 | @model string 3 | 4 | @Html.TextBoxFor(m => m, new { @Value = Model ?? "", Title = string.Format(Strings.NumberCommandHint, "int32", Int32.MinValue, Int32.MaxValue), @class = "command_parameter_field__input--text" }) 5 | 6 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Views/Shared/EditorTemplates/edit_int64.cshtml: -------------------------------------------------------------------------------- 1 | @using GlobalResources 2 | @model string 3 | 4 | @Html.TextBoxFor(m => m, new { @Value = Model ?? "", Title = string.Format(Strings.NumberCommandHint, "int64", Int64.MinValue, Int64.MaxValue), @class = "command_parameter_field__input--text" }) 5 | 6 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Views/Shared/EditorTemplates/edit_sbyte.cshtml: -------------------------------------------------------------------------------- 1 | @using GlobalResources 2 | @model string 3 | 4 | @Html.TextBoxFor(m => m, new { @Value = Model ?? "", Title = string.Format(Strings.NumberCommandHint, "SByte", SByte.MinValue, SByte.MaxValue), @class = "command_parameter_field__input--text" }) 5 | 6 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Views/Shared/EditorTemplates/edit_single.cshtml: -------------------------------------------------------------------------------- 1 | @using GlobalResources 2 | @model string 3 | 4 | @Html.TextBoxFor(m => m, new { @Value = Model ?? "", Title = Strings.SingleCommandHint, @class = "command_parameter_field__input--text" }) 5 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Views/Shared/EditorTemplates/edit_string.cshtml: -------------------------------------------------------------------------------- 1 | @using GlobalResources 2 | @model string 3 | 4 | @Html.TextBoxFor(m => m, new { Title = Strings.StringCommandHint, @class = "command_parameter_field__input--text" }) 5 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Views/Shared/_Dialogs.cshtml: -------------------------------------------------------------------------------- 1 | @using GlobalResources 2 | 7 | 12 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Views/Shared/_Layout.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "_BaseLayout.cshtml"; 3 | } 4 | 5 | @section Navigation 6 | { 7 | @Html.Action("NavigationMenu", "Navigation") 8 | } 9 | 10 | @section Main 11 | { 12 |
13 | @{ Html.RenderAction("NavigationSubmenu", "Navigation"); } 14 | @RenderBody() 15 |
16 | } 17 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Views/Shared/_LayoutNoNavigation.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "_BaseLayout.cshtml"; 3 | } 4 | 5 | @section Main 6 | { 7 |
8 | @RenderBody() 9 |
10 | } 11 | 12 | @section scripts{ 13 | @RenderSection("scripts", required: false) 14 | } 15 | 16 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Views/Shared/_NavigationSubmenu.cshtml: -------------------------------------------------------------------------------- 1 | @using System.Collections.Generic 2 | @using Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Security 3 | @using GlobalResources 4 | 5 | @model List 6 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/Views/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "~/Views/Shared/_Layout.cshtml"; 3 | } 4 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/WebApiControllers/QueryGeneratorApiController.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.Security; 2 | using System.Net.Http; 3 | using System.Threading.Tasks; 4 | using System.Web.Http; 5 | 6 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.WebApiControllers 7 | { 8 | [RoutePrefix("api/v1/generatequery")] 9 | public class QueryGeneratorApiController : WebApiControllerBase 10 | { 11 | public QueryGeneratorApiController() 12 | { 13 | } 14 | 15 | [HttpGet] 16 | [Route("")] 17 | [WebApiRequirePermission(Permission.ViewDevices)] 18 | public async Task GenerateQuery() 19 | { 20 | //TODO: mock code 21 | return await GetServiceResponseAsync(async () => 22 | { 23 | return await Task.FromResult("select * from devices"); 24 | }); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /DeviceAdministration/Web/compilerconfig.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "outputFile": "Content/styles/main.css", 4 | "inputFile": "Content/styles/main.less" 5 | }, 6 | { 7 | "outputFile": "Content/styles/elements/forms.css", 8 | "inputFile": "Content/styles/elements/forms.less" 9 | } 10 | ] -------------------------------------------------------------------------------- /Docs/media/image1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Docs/media/image1.png -------------------------------------------------------------------------------- /Docs/media/image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Docs/media/image2.png -------------------------------------------------------------------------------- /Docs/media/image3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Docs/media/image3.png -------------------------------------------------------------------------------- /Docs/media/image4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Docs/media/image4.png -------------------------------------------------------------------------------- /EventProcessor/EventProcessor.WebJob/Processors/IActionEventProcessor.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.EventProcessor.WebJob.Processors 2 | { 3 | public interface IActionEventProcessor 4 | { 5 | void Start(); 6 | void Stop(); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /EventProcessor/EventProcessor.WebJob/Processors/IDeviceEventProcessor.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.EventProcessor.WebJob.Processors 2 | { 3 | using System.Threading; 4 | 5 | public interface IDeviceEventProcessor 6 | { 7 | void Start(); 8 | 9 | void Start(CancellationToken token); 10 | 11 | void Stop(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /EventProcessor/EventProcessor.WebJob/Processors/IMessageFeedbackProcessor.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.Azure.IoT.Samples.EventProcessor.WebJob.Processors 2 | { 3 | public interface IMessageFeedbackProcessor 4 | { 5 | void Start(); 6 | 7 | void Stop(); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /EventProcessor/EventProcessor.WebJob/Properties/webjob-publish-settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://schemastore.org/schemas/json/webjob-publish-settings.json", 3 | "webJobName": "EventProcessor-WebJob", 4 | "startTime": null, 5 | "endTime": null, 6 | "jobRecurrenceFrequency": null, 7 | "interval": null, 8 | "runMode": "Continuous" 9 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | This is the deprecated version of Azure IoT Remote Monitoring 2 | 3 | To view the updated Remote Monitoring solution, please see the following links: 4 | 5 | [Remote Monitoring DotNet](https://github.com/Azure/azure-iot-pcs-remote-monitoring-dotnet) 6 | 7 | [Remote Monitoring Java](https://github.com/Azure/azure-iot-pcs-remote-monitoring-java) 8 | -------------------------------------------------------------------------------- /Simulator/Simulator.WebJob/Cooler/Telemetry/Data/RemoteMonitorTelemetryData.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.Simulator.WebJob.Cooler.Telemetry.Data 2 | { 3 | public class RemoteMonitorTelemetryData 4 | { 5 | public string DeviceId { get; set; } 6 | public double Temperature { get; set; } 7 | public double Humidity { get; set; } 8 | public double? ExternalTemperature { get; set; } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Simulator/Simulator.WebJob/DataInitialization/IDataInitializer.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.Simulator.WebJob.DataInitialization 8 | { 9 | /// 10 | /// Represents component to create initial data for the system 11 | /// 12 | public interface IDataInitializer 13 | { 14 | void CreateInitialDataIfNeeded(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Simulator/Simulator.WebJob/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | <?xml version="1.0" encoding="utf-16"?> 7 | <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 8 | <string>0000-DEV-35234,vSU3G/UgOwJr6z5LQGbC5g==</string> 9 | <string>0000-DEV-35947,7Vc71Oh+OCo9O9IJ57jqVw==</string> 10 | </ArrayOfString> 11 | 12 | 13 | -------------------------------------------------------------------------------- /Simulator/Simulator.WebJob/Properties/webjob-publish-settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://schemastore.org/schemas/json/webjob-publish-settings.json", 3 | "webJobName": "DeviceSimulator-WebJob", 4 | "startTime": null, 5 | "endTime": null, 6 | "jobRecurrenceFrequency": null, 7 | "interval": null, 8 | "runMode": "Continuous" 9 | } -------------------------------------------------------------------------------- /Simulator/Simulator.WebJob/SimulatorCore/Devices/Factory/IDeviceFactory.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Configurations; 2 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.Models; 3 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.Simulator.WebJob.SimulatorCore.Telemetry.Factory; 4 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.Simulator.WebJob.SimulatorCore.Transport.Factory; 5 | 6 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.Simulator.WebJob.SimulatorCore.Devices.Factory 7 | { 8 | public interface IDeviceFactory 9 | { 10 | IDevice CreateDevice(Logging.ILogger logger, ITransportFactory transportFactory, 11 | ITelemetryFactory telemetryFactory, IConfigurationProvider configurationProvider, InitialDeviceConfig config); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Simulator/Simulator.WebJob/SimulatorCore/Logging/ILogger.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.Simulator.WebJob.SimulatorCore.Logging 2 | { 3 | /// 4 | /// Simple interface to insulate the app from the logging technology 5 | /// used. Intended for various informational, warning, and error messages. 6 | /// 7 | public interface ILogger 8 | { 9 | void LogInfo(string message); 10 | 11 | void LogInfo(string format, params object[] args); 12 | 13 | void LogWarning(string message); 14 | 15 | void LogWarning(string format, params object[] args); 16 | 17 | void LogError(string message); 18 | 19 | void LogError(string format, params object[] args); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Simulator/Simulator.WebJob/SimulatorCore/Telemetry/Factory/ITelemetryFactory.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.Simulator.WebJob.SimulatorCore.Devices; 2 | 3 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.Simulator.WebJob.SimulatorCore.Telemetry.Factory 4 | { 5 | public interface ITelemetryFactory 6 | { 7 | /// 8 | /// Populates a device with telemetry events or logic 9 | /// 10 | /// Device interface to populate 11 | /// 12 | /// Returns object as a way to handle returning the instance that is generating telemetry data 13 | /// so that it can be used by the caller of this method 14 | /// 15 | object PopulateDeviceWithTelemetryEvents(IDevice device); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Simulator/Simulator.WebJob/SimulatorCore/Transport/Factory/ITransportFactory.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.Simulator.WebJob.SimulatorCore.Devices; 2 | 3 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.Simulator.WebJob.SimulatorCore.Transport.Factory 4 | { 5 | public interface ITransportFactory 6 | { 7 | ITransport CreateTransport(IDevice device); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Simulator/Simulator.WebJob/settings.job: -------------------------------------------------------------------------------- 1 | { "is_singleton": true, "stopping_wait_time": 15 } 2 | -------------------------------------------------------------------------------- /THIRDPARTYNOTICE (Azure IoT Suite Monitoring Solutions).txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/THIRDPARTYNOTICE (Azure IoT Suite Monitoring Solutions).txt -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-dynamic-telemetry/image3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-dynamic-telemetry/image3.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-dynamic-telemetry/image4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-dynamic-telemetry/image4.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-dynamic-telemetry/image5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-dynamic-telemetry/image5.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-gateway-kit-get-started-sensortag/appoutput.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-gateway-kit-get-started-sensortag/appoutput.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-gateway-kit-get-started-sensortag/telemetry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-gateway-kit-get-started-sensortag/telemetry.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-gateway-kit-get-started-simulator/appoutput.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-gateway-kit-get-started-simulator/appoutput.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-gateway-kit-get-started-simulator/telemetry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-gateway-kit-get-started-simulator/telemetry.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/actions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/actions.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/adddevice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/adddevice.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/addnew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/addnew.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/addrule.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/addrule.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/addrule2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/addrule2.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/addrule3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/addrule3.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/addrule4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/addrule4.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/alarms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/alarms.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/changeinterval.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/changeinterval.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/columneditor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/columneditor.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/dashboard.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/definedevice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/definedevice.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/devicecommands.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/devicecommands.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/devicedetails.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/devicedetails.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/devicelist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/devicelist.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/editfiltericon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/editfiltericon.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/filtereditor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/filtereditor.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/filteredlist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/filteredlist.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/healthy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/healthy.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/imagedit1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/imagedit1.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/imagedit2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/imagedit2.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/jobupdate1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/jobupdate1.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/jobupdate2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/jobupdate2.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/jobupdate3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/jobupdate3.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/launch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/launch.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/menu.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/methodupdate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/methodupdate.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/noticeold.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/noticeold.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/oldfilter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/oldfilter.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/oldlist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/oldlist.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/openfilter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/openfilter.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/pingcommand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/pingcommand.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/portal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/portal.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/rules.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/rules.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/runningnew.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/runningnew.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/runningnew2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/runningnew2.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/savefilter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/savefilter.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/solutionportal_08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/solutionportal_08.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/unhealthyfilter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/unhealthyfilter.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/unhealthylist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/unhealthylist.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/updated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-getstarted-preconfigured-solutions/updated.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-logic-apps-tutorial/createlogicapp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-logic-apps-tutorial/createlogicapp.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-logic-apps-tutorial/logicappaction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-logic-apps-tutorial/logicappaction.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-logic-apps-tutorial/logicappcode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-logic-apps-tutorial/logicappcode.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-logic-apps-tutorial/logicapprun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-logic-apps-tutorial/logicapprun.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-logic-apps-tutorial/logicappsdesigner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-logic-apps-tutorial/logicappsdesigner.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-logic-apps-tutorial/resourcegroup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-logic-apps-tutorial/resourcegroup.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-logic-apps-tutorial/sendgridaction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-logic-apps-tutorial/sendgridaction.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-logic-apps-tutorial/sendgridconnection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-logic-apps-tutorial/sendgridconnection.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-permissions/flowchart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-permissions/flowchart.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-raspberry-pi-kit-c-get-started-advanced/app-output.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-raspberry-pi-kit-c-get-started-advanced/app-output.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-raspberry-pi-kit-c-get-started-advanced/jobstatus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-raspberry-pi-kit-c-get-started-advanced/jobstatus.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-raspberry-pi-kit-c-get-started-advanced/listdevices.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-raspberry-pi-kit-c-get-started-advanced/listdevices.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-raspberry-pi-kit-c-get-started-advanced/methodhistory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-raspberry-pi-kit-c-get-started-advanced/methodhistory.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-raspberry-pi-kit-c-get-started-advanced/updateprogress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-raspberry-pi-kit-c-get-started-advanced/updateprogress.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-raspberry-pi-kit-c-get-started-basic/appoutput.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-raspberry-pi-kit-c-get-started-basic/appoutput.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-raspberry-pi-kit-c-get-started-simulator/appoutput.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-raspberry-pi-kit-c-get-started-simulator/appoutput.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-raspberry-pi-kit-node-get-started-advanced/app-output.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-raspberry-pi-kit-node-get-started-advanced/app-output.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-raspberry-pi-kit-node-get-started-advanced/jobstatus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-raspberry-pi-kit-node-get-started-advanced/jobstatus.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-raspberry-pi-kit-node-get-started-advanced/listdevices.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-raspberry-pi-kit-node-get-started-advanced/listdevices.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-raspberry-pi-kit-node-get-started-advanced/methodhistory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-raspberry-pi-kit-node-get-started-advanced/methodhistory.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-raspberry-pi-kit-node-get-started-advanced/updateprogress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-raspberry-pi-kit-node-get-started-advanced/updateprogress.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-raspberry-pi-kit-node-get-started-basic/app-output.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-raspberry-pi-kit-node-get-started-basic/app-output.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-raspberry-pi-kit-node-get-started-simulator/app-output.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-raspberry-pi-kit-node-get-started-simulator/app-output.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-raspberry-pi-kit-prepare-pi/rpi2_remote_monitoring.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-raspberry-pi-kit-prepare-pi/rpi2_remote_monitoring.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-raspberry-pi-kit-view-solution/launch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-raspberry-pi-kit-view-solution/launch.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-raspberry-pi-kit-view-solution/menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-raspberry-pi-kit-view-solution/menu.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-raspberry-pi-kit-view-solution/suite0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-raspberry-pi-kit-view-solution/suite0.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-raspberry-pi-kit-view-solution/suite1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-raspberry-pi-kit-view-solution/suite1.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-raspberry-pi-kit-view-solution/suite2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-raspberry-pi-kit-view-solution/suite2.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-raspberry-pi-kit-view-solution/suite3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-raspberry-pi-kit-view-solution/suite3.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-raspberry-pi-kit-view-telemetry-advanced/telemetry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-raspberry-pi-kit-view-telemetry-advanced/telemetry.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-raspberry-pi-kit-view-telemetry-simulator/listdevices.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-raspberry-pi-kit-view-telemetry-simulator/listdevices.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-raspberry-pi-kit-view-telemetry-simulator/methodhistory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-raspberry-pi-kit-view-telemetry-simulator/methodhistory.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-raspberry-pi-kit-view-telemetry-simulator/selectmethod.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-raspberry-pi-kit-view-telemetry-simulator/selectmethod.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-raspberry-pi-kit-view-telemetry-simulator/telemetry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-raspberry-pi-kit-view-telemetry-simulator/telemetry.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-raspberry-pi-kit-view-telemetry/listdevices.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-raspberry-pi-kit-view-telemetry/listdevices.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-raspberry-pi-kit-view-telemetry/methodhistory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-raspberry-pi-kit-view-telemetry/methodhistory.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-raspberry-pi-kit-view-telemetry/selectmethod.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-raspberry-pi-kit-view-telemetry/selectmethod.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-raspberry-pi-kit-view-telemetry/telemetry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-raspberry-pi-kit-view-telemetry/telemetry.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-remote-monitoring-device-info/image1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-remote-monitoring-device-info/image1.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-remote-monitoring-device-info/image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-remote-monitoring-device-info/image2.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-remote-monitoring-device-info/image3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-remote-monitoring-device-info/image3.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-remote-monitoring-sample-walkthrough/remote-monitoring-architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-remote-monitoring-sample-walkthrough/remote-monitoring-architecture.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-selector-connecting/dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-selector-connecting/dashboard.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-selector-connecting/suite0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-selector-connecting/suite0.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-selector-connecting/suite1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-selector-connecting/suite1.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-selector-connecting/suite2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-selector-connecting/suite2.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-selector-connecting/suite3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-selector-connecting/suite3.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-send-external-temperature/image1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-send-external-temperature/image1.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-send-external-temperature/image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-send-external-temperature/image2.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-visualize-connecting/history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-visualize-connecting/history.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-visualize-connecting/suite10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-visualize-connecting/suite10.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-visualize-connecting/suite4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-visualize-connecting/suite4.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-visualize-connecting/suite7-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-visualize-connecting/suite7-1.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-visualize-connecting/telemetry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-visualize-connecting/telemetry.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-what-are-preconfigured-solutions/dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-what-are-preconfigured-solutions/dashboard.png -------------------------------------------------------------------------------- /Tutorials/media/iot-suite-v1-what-are-preconfigured-solutions/remote-monitoring-arch1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/Tutorials/media/iot-suite-v1-what-are-preconfigured-solutions/remote-monitoring-arch1.png -------------------------------------------------------------------------------- /UnitTests/Infrastructure/SecurityKeyGeneratorTests.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Infrastructure.BusinessLogic; 2 | using Xunit; 3 | 4 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.UnitTests.Infrastructure 5 | { 6 | public class SecurityKeyGeneratorTests 7 | { 8 | [Fact] 9 | public void CreateRandomKeysTest() 10 | { 11 | ISecurityKeyGenerator securityKeyGenerator = new SecurityKeyGenerator(); 12 | var keys1 = securityKeyGenerator.CreateRandomKeys(); 13 | var keys2 = securityKeyGenerator.CreateRandomKeys(); 14 | 15 | Assert.NotNull(keys1); 16 | Assert.NotEqual(keys1.PrimaryKey, keys1.SecondaryKey); 17 | Assert.NotEqual(keys1.PrimaryKey, keys2.PrimaryKey); 18 | Assert.NotEqual(keys1.SecondaryKey, keys2.SecondaryKey); 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /UnitTests/TestStubs/RandomGeneratorStub.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Azure.Devices.Applications.RemoteMonitoring.Common.SampleDataGenerator; 2 | 3 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.UnitTests.TestStubs 4 | { 5 | public class RandomGeneratorStub : IRandomGenerator 6 | { 7 | private readonly double _valueReturned; 8 | 9 | public RandomGeneratorStub(double valueReturned) 10 | { 11 | _valueReturned = valueReturned; 12 | } 13 | 14 | public double GetRandomDouble() 15 | { 16 | return _valueReturned; 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /VERSION.txt: -------------------------------------------------------------------------------- 1 | 1.5.0 2 | -------------------------------------------------------------------------------- /WebJobHost/Global.asax: -------------------------------------------------------------------------------- 1 | <%@ Application Codebehind="Global.asax.cs" Inherits="Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web.MvcApplication" Language="C#" %> 2 | -------------------------------------------------------------------------------- /WebJobHost/Global.asax.cs: -------------------------------------------------------------------------------- 1 | using System.Diagnostics; 2 | 3 | namespace Microsoft.Azure.Devices.Applications.RemoteMonitoring.DeviceAdmin.Web 4 | { 5 | public class MvcApplication : System.Web.HttpApplication 6 | { 7 | protected void Application_Start() 8 | { 9 | // Do nothing else here, need application class for host. 10 | Trace.TraceInformation("WebJobHost starting..."); 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /WebJobHost/Properties/webjobs-list.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://schemastore.org/schemas/json/webjobs-list.json", 3 | "WebJobs": [ 4 | { 5 | "filePath": "../EventProcessor/EventProcessor.WebJob/EventProcessor.WebJob.csproj" 6 | }, 7 | { 8 | "filePath": "../Simulator/Simulator.WebJob/Simulator.WebJob.csproj" 9 | } 10 | ] 11 | } -------------------------------------------------------------------------------- /WebJobHost/Startup.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Owin; 2 | using Owin; 3 | 4 | [assembly: OwinStartup(typeof(WebJobHost.Startup))] 5 | 6 | namespace WebJobHost 7 | { 8 | public class Startup 9 | { 10 | public void Configuration(IAppBuilder app) 11 | { 12 | // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=316888 13 | // Do nothing on startup 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /WebJobHost/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /infrastructure.connectivity.license.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/infrastructure.connectivity.license.txt -------------------------------------------------------------------------------- /license.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/azure-iot-remote-monitoring/7baee6a281facc9f332bf13daf7603c801143f8c/license.txt --------------------------------------------------------------------------------