summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2021-06-15build: Upgrade to Gradle 7.1Fabian Mastenbroek
This change upgrades the Gradle build system to version 7.1.
2021-06-15exp: Fix execution of energy experimentsFabian Mastenbroek
This change fixes the execution of the Energy21 experiments which failed due to various changes in the OpenDC codebase. First, the directory structure is now required to be pre-generated before the writer starts writing the experiment output. Second, we must include the configuration of the Capelin experiment in this experiment in order to workaround an issue with harness filtering.
2021-06-14simulator: Add energy modelling subsystem to OpenDCFabian Mastenbroek
This pull request adds a subsystem to OpenDC for modelling power components in datacenters, such as UPSes, PDUs and PSUs. These components also take into account electrical losses that occur in real-world scenarios. - Add module for datacenter power components (UPS, PDU) - Integrate power subsystem with compute subsystem (PSU) - Model power loss in power components **Breaking API Changes** 1. `SimBareMetalMachine.powerDraw` is replaced by `SimBareMetalMachine.psu.powerDraw`
2021-06-14simulator: Add model for PSU power lossHongyu He
This change introduces power loss to the PSU component.
2021-06-11simulator: Add model for UPSHongyu He
This change adds a new model for the UPS to the OpenDC simulator power subsystem.
2021-06-11simulator: Integrate power subsystem with compute subsystemFabian Mastenbroek
This change integrates the power subsystem of the simulator with the compute subsystem by exposing a new field on a SimBareMetalMachine, psu, which provides access to the machine's PSU, which in turn can be connected to a SimPowerOutlet.
2021-06-11simulator: Add power loss to SimPduHongyu He
This change adds a model for power loss to the Power Distribution Unit (PDU) model in OpenDC.
2021-06-10simulator: Add module for datacenter power componentsFabian Mastenbroek
This change adds a new module for simulating power components in datacenters such as PDUs and UPSes. This module will serve as the basis for the power monitoring framework in OpenDC and will future integrate with the other simulation components (such as compute).
2021-06-09simulator: Add memory resourceFabian Mastenbroek
This change introduces a memory resource which can be used to model memory usage. The SimMachineContext now exposes a memory field of type SimMemory which provides access to this resource and allows workloads to start a consumer on this resource.
2021-06-09Remove dependency on HadoopFabian Mastenbroek
This pull request attempts to remove the dependency of the simulator on Apache Hadoop which is pulled in as a consequence of using parquet-mr. The reason for removal is that Apache Hadoop does not work natively on Windows without user intervention, which makes adoption on this platform more difficult. * Add Windows as CI target for the OpenDC simulator * Use `LocalInputFile` for Parquet reader usages * Use `LocalOutputFile` for Parquet writer usages * Remove Apache Hadoop as dependency of OpenDC.
2021-06-09build: Eliminate most Hadoop dependenciesFabian Mastenbroek
This change eliminates all Hadoop dependencies that are not necessary for Parquet to work correctly. As a result, the number of dependencies should now be greatly reduced, which in turn leads to less artifacts that need to be retrieved at build time.
2021-06-09exp: Use LocalOutputFile for Parquet writersFabian Mastenbroek
This change updates the Parquet writers used in the Capelin experiments to use our OutputFile implementation for local files, to reduce our dependency on Apache Hadoop.
2021-06-09format: Add implementation of local Parquet OutputFileFabian Mastenbroek
This change adds an implementation of Parquet OutputFile for local files in order to eliminate the dependency on the entire Hadoop system. This implementation allows users to read Parquet files locally without needing a Parquet filesystem implementation.
2021-06-09exp: Use LocalInputFile for Parquet readersFabian Mastenbroek
This change updates the Parquet readers used in the Capelin experiments to use our InputFile implementation for local files, to reduce our dependency on Apache Hadoop.
2021-06-09format: Use LocalInputFile for Parquet readerFabian Mastenbroek
This change updates the format implementations that use Parquet by switching to our InputFile implementation for local files, which eliminates the need for Hadoop's filesystem support.
2021-06-09format: Add implementation of local Parquet InputFileFabian Mastenbroek
This change adds an implementation of Parquet's local InputFile in order to eliminate the dependency on the entire Hadoop system. This implementation allows users to read Parquet files locally without needing a Parquet filesystem implementation.
2021-06-08test: Fix logging warning for testsFabian Mastenbroek
This change fixes the SLF4J logging warnings that occur during the tests.
2021-06-08ci: Test simulator on WindowsFabian Mastenbroek
This change adds Windows as CI target for the OpenDC simulator in order to test that the simulator works on all major platforms.
2021-06-03exp: Remove Jupyter Notebook from Energy experimentsFabian Mastenbroek
This change removes the Jupyter Notebook that was shipped with the initial version of the Energy21 experiments. At the moment, it is not up to date anymore and we will probably move the plotting facility to the web interface.
2021-06-03simulator: Improve simulator resource model (#142)Fabian Mastenbroek
This pull request improves the existing simulator resource model that is at the core of all simulation models in OpenDC. Most importantly, we have changed the way of how metrics are reported by this layer. * Add `SimResourceInterpreter` which is responsible for efficiently scheduling communication between resources in OpenDC. The performance gain is in the 2x-5x range. * Add uniform interface for exposing resource metrics (using `SimResourceCounters`). * Split the CPUFreq subsystem in the compute simulator as it mixed responsibilities of different layers. **Breaking API Changes** * Resource providers now accept a `SimResourceInterpreter` which is responsible for coordinating the communication between resources. * `ScalingGovernor` is not part of the machine layer anymore. Instead, it should move in the OS/Hypervisor layer. * Workloads should now start CPU consumers using `cpu.startConsumer`.
2021-06-03simulator: Migrate frequency scaling governors to OS layerFabian Mastenbroek
This change moves the CPU frequency scaling governors from the bare-metal/firmware layer (SimBareMetalMachine) to the OS/Hypervisor layer (SimHypervisor) where it can make more informed decisions about the CPU frequency based on the load of the operating system or hypervisor.
2021-06-03simulator: Split CPUFreq subsystem in compute simulatorFabian Mastenbroek
This change splits the functionality present in the CPUFreq subsystem of the compute simulation. Currently, the DVFS functionality is embedded in SimBareMetalMachine. However, this functionality should not exist within the firmware layer of a machine. Instead, the operating system should perform this logic (in OpenDC this should be the hypervisor). Furthermore, this change moves the scaling driver into the power package. The power driver is a machine/firmware specific implementation that computes the power consumption of a machine.
2021-06-02simulator: Start consumers directly from workloadFabian Mastenbroek
This change updates the SimWorkload interfaces to allow implementations to start consumers for the machine resource providers directly.
2021-06-02simulator: Add uniform interface for resource metricsFabian Mastenbroek
This change adds a new interface to the resources library for accessing metrics of resources such as work, demand and overcommitted work. With this change, we do not need an implementation specific listener interface in SimResourceSwitchMaxMin anymore. Another benefit of this approach is that updates will be scheduled more efficiently and progress will only be reported once the system has reached a steady-state for that timestamp.
2021-06-02api: Bump urllib3 in /opendc-web/opendc-web-api (#141)dependabot[bot]
Bumps [urllib3](https://github.com/urllib3/urllib3) from 1.26.4 to 1.26.5. - [Release notes](https://github.com/urllib3/urllib3/releases) - [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst) - [Commits](https://github.com/urllib3/urllib3/compare/1.26.4...1.26.5) --- updated-dependencies: - dependency-name: urllib3 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-06-01simulator: Centralize resource logic in SimResourceInterpreterFabian Mastenbroek
This change introduces the SimResourceInterpreter which centralizes the logic for scheduling and interpreting the communication between resource consumer and provider. This approach offers better performance due to avoiding invalidating the state of the resource context when not necessary. Benchmarks show in the best case a 5x performance improvement and at worst a 2x improvement.
2021-06-01ci: Fix code coverage reporting for web APIFabian Mastenbroek
This change updates the build workflow to properly report the code coverage reports of the web API to Codecov.
2021-06-01build: Update to Next.js 10.2.3Fabian Mastenbroek
This change updates the web frontend to Next.js version 10.2.3. This addresses a vulnerability in a dependency in Next.js as well as enabling use of native ESLint integration of Next.js.
2021-06-01build: Update to Kotlin 1.5.10Fabian Mastenbroek
This change updates the build process to use Kotlin 1.5.10 for building OpenDC. This new update should address some of the incompatibilities between Gradle and Kotlin 1.5.
2021-05-18Migrate to Auth0 as Identity ProviderFabian Mastenbroek
This pull request removes the hard dependency on Google for authenticating users and migrates to Auth0 as Identity Provider for OpenDC. This has as benefit that we can authenticate users without having to manage user data ourselves and do not have a dependency on Google accounts anymore. - Frontend cleanup: - Use CSS modules everywhere to encapsulate the styling of React components. - Perform all communication in the frontend via the REST API (as opposed to WebSockets). The original approach was aimed at collaborative editing, but made normal operations harder to implement and debug. If we want to implement collaborative editing in the future, we can expose only a small WebSocket API specifically for collaborative editing. - Move to FontAwesome 5 (using the official React libraries) - Use Reactstrap where possible. Previously, we mixed raw Bootstrap classes with Reactstrap, which is confusing. - Reduce the scope of the Redux state. Some state in the frontend application can be kept locally and does not need to be managed by Redux. - Migrate from Create React App (CRA) to Next.js since it allows us to pre-render multiple pages as well as opt-in to Server Side Rendering. - Remove the Google login and use Auth0 for authentication now. - Use Node 16 - Backend cleanup: - Remove Socket.IO endpoint from backend, since it is not needed by the frontend anymore. Removing it reduces the attack surface of OpenDC as well as the maintenance efforts. - Use Auth0 JWT token for authorizing API accesses - Refactor API endpoints to use Flask Restful as opposed to our custom in-house routing logic. Previously, this was needed to support the Socket.IO endpoint, but increases maintenance effort. - Expose Swagger UI from API - Use Python 3.9 and uwsgi to host Flask application - Actualize OpenAPI schema and update to version 3.0. **Breaking API Changes** * This pull request removes the users collection from the database table. Instead, we now use the user identifier passed by Auth0 to identify the data that belongs to a user.
2021-05-18build: Add support for Java 16Fabian Mastenbroek
This pull request adds support for building OpenDC using Java 16. To make this possible, we have upgraded the following dependencies: - Kotlin from 1.4.3 to 1.5.0 - Jacoco from 0.8.6 to 0.8.7 - Gradle from 7.0 to 7.0.2
2021-05-18ui: Fix frontend deployment scriptsFabian Mastenbroek
This change fixes the deployment scripts necessary for the frontend and ensures that runtime variables work again.
2021-05-18ui: Re-add support for SentryFabian Mastenbroek
This change re-adds the support for Sentry. This was lost during the migration from CRA to Next.js.
2021-05-18docs: Add instructions on configuring Auth0 for OpenDCFabian Mastenbroek
This change updates the deployment guide to include instructions on configuring Auth0 for OpenDC. This process should not be much more difficult than creating the Google Application.
2021-05-18api: Add support for pre-specified Swagger OAuth2 client idFabian Mastenbroek
This change adds support for specifying the OAuth2 client identifier for Swagger API docs authentication. This allows users to experiment with the API documentation without needing to create an Auth0 account themselves.
2021-05-18ui: Migrate to FontAwesome 5 React libraryFabian Mastenbroek
This change updates the frontend to use the FontAwesome 5 React library that renders SVG icons as opposed to CSS icon fonts. This migration resolves a couple of issues we had with server-side rendering of the previous FontAwesome icons.
2021-05-18api: Upgrade to Python 3.9 as defaultFabian Mastenbroek
This change updates the API server to run by default using Python 3.9.
2021-05-18ui: Migrate to Auth0 as Identity ProviderFabian Mastenbroek
This change updates the frontend codebase to move away from the Google login and instead use Auth0 as generic Identity Provider. This allows users to login with other accounts as well. Since Auth0 has a free tier, users can experiment themselves with OpenDC locally without having to pay for the login functionality. The code has been written so that we should be able to migrate away from Auth0 once it is not a suitable Identity Provider for OpenDC anymore.
2021-05-18api: Update API Schema to OpenAPI v3Fabian Mastenbroek
This change updates the API Schema to the more recent OpenAPI version 3 and in addition actualizes the API specification to match the API again.
2021-05-18api: Add Swagger UI for API documentationFabian Mastenbroek
This change adds Swagger UI to the REST API endpoint in order to experiment with the API endpoints interactively. It also serves as the documentation for the API endpoints.
2021-05-18api: Migrate to Flask RestfulFabian Mastenbroek
This change updates the API to use Flask Restful instead of our own in-house REST library. This change reduces the maintenance effort and allows us to drastically simplify the API implementation needed for the OpenDC v2 API.
2021-05-18build: Update to Gradle 7.0.2Fabian Mastenbroek
2021-05-18build: Update Jacoco to version 0.8.7Fabian Mastenbroek
This change updates the Gradle build configuration to use Jacoco 0.8.7, which is necessary for Kotlin 1.5.0 to work nicely with Jacoco.
2021-05-18chore: Address deprecations due to Kotlin 1.5Fabian Mastenbroek
This change addresses the deprecations that were caused by the migration to Kotlin 1.5.
2021-05-18build: Update to Kotlin 1.5.0Fabian Mastenbroek
2021-05-18ci: Update to Java 16Fabian Mastenbroek
This change switches one of the CI builds to use Java 16 when building and testing the simulator.
2021-05-17api: Remove user handling from OpenDC API serverFabian Mastenbroek
This change removes any of the user handling and endpoints from the OpenDC API server. The API server does not need to store user information other than an identifier in the database.
2021-05-17api: Migrate to Auth0 for API authorizationFabian Mastenbroek
This change updates the OpenDC API to use Auth0 for API authorization. This removes the hard dependency on Google for logging into OpenDC and simplifies implementation as we do not have to store user information anymore, other than the user identifier.
2021-05-17api: Remove Socket.IO endpoint from public APIFabian Mastenbroek
This change removes the Socket.IO endpoint from the public API now that we have switched to the REST API instead. This decreases the possible exposure to vulnerabilities as well as the maintenance burden.
2021-05-17ui: Restructure OpenDC frontendFabian Mastenbroek
This change updates the structure of the OpenDC frontend in order to improve the maintainability of the frontend.