Compare commits

...

709 Commits

Author SHA1 Message Date
Simon Larsen
0b3765594f feat: Add EnableDocumentation decorator to File model for improved documentation generation 2025-06-25 18:33:50 +01:00
Simon Larsen
9f77e8d82d feat: Update access control in FileModel to include AuthenticatedRequest permission 2025-06-25 18:26:51 +01:00
Simon Larsen
78fca73b8a feat: Update File access control to include AuthenticatedRequest permission 2025-06-25 18:24:13 +01:00
Simon Larsen
82e2bc75bf feat: Add spacing div in AnnouncementView for improved layout 2025-06-25 17:30:28 +01:00
Simon Larsen
85de170031 feat: Add AnnouncementView component and update routing for viewing announcements 2025-06-25 17:28:27 +01:00
Simon Larsen
338a2dc2cc refactor: Rename MCP-Generated directory to MCP and update related references in scripts and documentation 2025-06-25 17:09:27 +01:00
Simon Larsen
d400271f3c refactor: Remove MCPServerGenerator class and related methods for code cleanup 2025-06-25 16:56:59 +01:00
Simon Larsen
8c735e1500 fix: Update API key example in README for clarity and consistency 2025-06-25 16:56:26 +01:00
Simon Larsen
d4b0ac7b9c feat: Update README and MCPServerGenerator for consistent directory usage and improved API key example 2025-06-25 16:56:10 +01:00
Simon Larsen
8edcdd37e3 feat: Update MCP package configuration and add server generator
- Enhanced package.json with detailed description, keywords, and repository information.
- Updated scripts for building and starting the server.
- Added new dependencies for axios and dotenv.
- Modified tsconfig.json for improved TypeScript settings.
- Introduced MCPServerGenerator class to automate server file generation.
- Implemented methods to generate essential files: package.json, Index.ts, MCPService, APIClient, configuration utilities, README, tsconfig, nodemon config, and Dockerfile.
- Ensured proper error handling and environment variable validation in the generated code.
2025-06-25 16:53:24 +01:00
Simon Larsen
ed65a477e4 feat: Rename MCP-Generated directory to MCP for consistency across workflows and scripts 2025-06-25 16:51:30 +01:00
Simon Larsen
98e3386d22 feat: Implement OpenAPI Parser and MCP Server Generator
- Added OpenAPIParser class for parsing OpenAPI specifications and extracting MCP tools.
- Introduced StringUtils class for string manipulation utilities.
- Defined TypeScript interfaces for OpenAPI operations, parameters, and schemas.
- Created GenerateMCPServer script to orchestrate the generation of the MCP server from OpenAPI spec.
- Developed README.md for comprehensive documentation on usage and features of the MCP server.
- Implemented publish-mcp-server.sh script for automating the publishing process to NPM and GitHub.
- Established a structured output directory for generated MCP server files, including configuration and documentation.
2025-06-25 16:47:23 +01:00
Simon Larsen
fe879d86ce feat: Update linting commands to use npx eslint with increased memory limit and caching 2025-06-24 21:45:10 +01:00
Simon Larsen
9e63a4cbf5 feat: Enhance lint-batches.sh with configurable options for cache, memory, format, timeout, and batch size 2025-06-24 21:25:44 +01:00
Simon Larsen
6c5ba10a52 feat: Remove ESLint configuration file to streamline linting process 2025-06-24 20:46:09 +01:00
Simon Larsen
9c9751c2c7 feat: Remove ignore rule for TerraformProvider in ESLint configuration to address linting issues 2025-06-24 20:31:21 +01:00
Simon Larsen
1b70517463 feat: Refactor DataSourceGenerator, DocumentationGenerator, OpenAPIParser, ResourceGenerator, and StringUtils for improved readability and maintainability 2025-06-24 20:16:45 +01:00
Simon Larsen
38f79900cc feat: Enhance multi-platform build process and improve error messages for provider generation 2025-06-24 20:03:02 +01:00
Simon Larsen
9fc8d679d8 feat: Enhance ModelSchema to combine column and permissions descriptions for improved schema clarity 2025-06-24 18:43:13 +01:00
Simon Larsen
83838da879 feat: Enhance DataSourceGenerator and OpenAPIParser to support dynamic imports and identify read operations for GET and POST methods 2025-06-24 18:37:11 +01:00
Simon Larsen
4e6e7cf354 feat: Replace linting commands with a new script to handle batch linting and prevent memory issues 2025-06-24 18:23:34 +01:00
Simon Larsen
dfc4e2e7f8 feat: Update access control and add computed properties for various models to enhance notification handling 2025-06-24 18:13:49 +01:00
Simon Larsen
8f9c463d85 feat: Enhance OpenAPIParser and ResourceGenerator to support optional and computed fields in schema handling 2025-06-24 15:20:04 +01:00
Simon Larsen
82af0bee58 feat: Update Alert, Incident, and Monitor models to include isDefaultValueColumn and enhance access control permissions 2025-06-24 15:07:50 +01:00
Simon Larsen
babf818963 feat: Enhance ModelSchema to mark computed fields as readOnly and update create/update operations handling 2025-06-24 15:03:05 +01:00
Simon Larsen
b4477e04ef feat: Update Incident, Monitor, and ScheduledMaintenance models to use isDefaultValueColumn for state ID fields 2025-06-24 14:54:54 +01:00
Simon Larsen
f0457df102 feat: Add computed property to various database models for enhanced data handling 2025-06-24 14:53:56 +01:00
Simon Larsen
73a1997f4c feat: Skip computed fields for create operations in ModelSchema to enhance data handling 2025-06-24 14:23:32 +01:00
Simon Larsen
e4e7b7c7d8 feat: Update Incident and Monitor models to include computed properties and simplify access control 2025-06-24 14:08:54 +01:00
Simon Larsen
aa7bd3140c feat: Add computed property to various database models for enhanced data handling 2025-06-24 14:02:56 +01:00
Simon Larsen
095ad5dbf4 feat: Add computed property support in TableColumnMetadata and update related permissions logic 2025-06-24 13:47:53 +01:00
Simon Larsen
f8c8f26cab feat: Enhance response handling for list and object types in ResourceGenerator 2025-06-24 13:29:57 +01:00
Simon Larsen
a923b0f885 refactor: Update default value handling to consider both create and update schemas in ResourceGenerator 2025-06-24 13:18:38 +01:00
Simon Larsen
d352610ca7 refactor: Remove unused onBeforeUpdate method from MonitorService 2025-06-24 13:01:31 +01:00
Simon Larsen
23c57a1483 feat: Add support for complex objects in OpenAPIParser and ResourceGenerator 2025-06-24 12:52:00 +01:00
Simon Larsen
d3106e4ac8 refactor: Enhance resource schema handling by adding support for default values and list types in ResourceGenerator 2025-06-24 12:17:47 +01:00
Simon Larsen
a0acf8cac2 feat: Add operationSchemas to TerraformResource and implement schema generation for CRUD operations in OpenAPIParser 2025-06-24 11:53:18 +01:00
Simon Larsen
b29df21b4d refactor: Enhance OpenAPI schema handling by incorporating default values in ModelSchema and ResourceGenerator 2025-06-24 11:21:47 +01:00
Simon Larsen
e1f52ebd26 refactor: Implement helper function to add default values to OpenAPI schema in AnalyticsModelSchema and ModelSchema 2025-06-23 18:29:06 +01:00
Simon Larsen
0248ae5ec6 Add default values for boolean fields across various database models
- Set defaultValue to false for boolean fields in Monitor, MonitorGroupOwnerTeam, MonitorGroupOwnerUser, MonitorOwnerTeam, MonitorOwnerUser, MonitorProbe, MonitorStatus, MonitorStatusTimeline, MonitorTest, OnCallDutyPolicy, OnCallDutyPolicyExecutionLog, OnCallDutyPolicyOwnerTeam, OnCallDutyPolicyOwnerUser, Probe, ProbeOwnerTeam, ProbeOwnerUser, Project, ProjectSmtpConfig, ProjectSso, PromoCode, ScheduledMaintenance, ScheduledMaintenanceInternalNote, ScheduledMaintenanceOwnerTeam, ScheduledMaintenanceOwnerUser, ScheduledMaintenancePublicNote, ScheduledMaintenanceStateTimeline, ScheduledMaintenanceTemplate, ServiceCopilotCodeRepository, SmsLog, StatusPage, StatusPageAnnouncement, StatusPageAnnouncementTemplate, StatusPageDomain, StatusPageGroup, StatusPageOwnerTeam, StatusPageOwnerUser, StatusPagePrivateUser, StatusPageResource, StatusPageSso, StatusPageSubscriber, TeamMember, TeamPermission, TelemetryException, User, UserEmail, UserNotificationSetting, UserSMS, UserTwoFactorAuth, Workflow, WorkflowVariable.
- Set defaultValue to true for specific boolean fields in MonitorProbe, MonitorTest, OnCallDutyPolicy, ScheduledMaintenance, StatusPage, and StatusPageResource.
- Adjusted default values for various fields to ensure consistent behavior across the application.
2025-06-23 18:16:18 +01:00
Simon Larsen
064ff68147 refactor: Add JSONObject type to defaultValue in TableColumnMetadata interface 2025-06-23 16:31:19 +01:00
Simon Larsen
5794e40fd1 docs: Update contributing guidelines to clarify repository status and forking instructions 2025-06-23 15:52:45 +01:00
Simon Larsen
51faf12723 refactor: Enhance OpenAPI example handling in DocumentationGenerator and OpenAPIParser 2025-06-23 15:50:06 +01:00
Simon Larsen
1c658651ac refactor: Change provider parameter from "host" to "oneuptime_url" for clarity and consistency 2025-06-23 15:42:28 +01:00
Simon Larsen
482c6d3e0b refactor: Improve toSnakeCase method to handle consecutive uppercase letters and camelCase conversion 2025-06-23 15:41:01 +01:00
Simon Larsen
441ab82acf refactor: Update documentation to mark api_key as required for authentication 2025-06-23 15:27:14 +01:00
Simon Larsen
7d18b81ea5 refactor: Update api_key to be required for authentication in DocumentationGenerator and ProviderGenerator 2025-06-23 15:20:29 +01:00
Simon Larsen
a8c3ca5f01 refactor: Change provider parameter from "host" to "oneuptime_url" for clarity and consistency 2025-06-23 15:18:49 +01:00
Simon Larsen
1d57657b72 refactor: Make "Project ID" optional in ModelSchema when derived from API key 2025-06-23 14:55:35 +01:00
Simon Larsen
a4bb6744f4 refactor: Add isDefaultValueColumn property to Current Monitor Status ID in Monitor model 2025-06-23 14:41:33 +01:00
Simon Larsen
4d3ef70765 refactor: Adjust logic for handling optional columns in ModelSchema 2025-06-23 14:40:25 +01:00
Simon Larsen
6f71a67adf refactor: Update example values and adjust optionality for default value columns in ModelSchema 2025-06-23 14:37:09 +01:00
Simon Larsen
a701f5eff0 refactor: Improve code formatting for better readability in DataSourceGenerator, ResourceGenerator, and StringUtils 2025-06-23 14:22:20 +01:00
Simon Larsen
7f7f3cf62b refactor: Add --test-release flag to publish-terraform-provider command 2025-06-20 22:06:36 +01:00
Simon Larsen
2f4d51b833 refactor: Remove Terraform configuration and provider files from TerraformTest 2025-06-20 22:05:12 +01:00
Simon Larsen
c09369c351 refactor: Add TerraformTest directory to .gitignore 2025-06-20 22:04:22 +01:00
Simon Larsen
aeb3d93a1f refactor: Update authentication error message to include API key requirement 2025-06-20 21:59:38 +01:00
Simon Larsen
24803362cb refactor: Enhance publish script for OneUptime Terraform Provider with improved argument parsing, validation, and error handling 2025-06-20 21:28:19 +01:00
Simon Larsen
1dcd3664c7 refactor: Add PostWithSelect method and update resource handling for API calls 2025-06-20 17:34:22 +01:00
Simon Larsen
3e51f3542b refactor: Update path for get item endpoint in OpenAPIUtil to include '/get-item' 2025-06-20 16:50:29 +01:00
Simon Larsen
f8d80b59ac refactor: Add createdByUserId and deletedByUserId to computed fields check in OpenAPIParser 2025-06-20 16:41:24 +01:00
Simon Larsen
36f6561b2c refactor: Enhance response value handling in generateResponseSetter method 2025-06-20 15:55:06 +01:00
Simon Larsen
5ed9b8ec24 refactor: Improve handling of Terraform map and response data in ResourceGenerator 2025-06-20 15:49:02 +01:00
Simon Larsen
672caa8c0a refactor: Change authorization header from Bearer token to APIKey in DoRequest method 2025-06-20 14:40:46 +01:00
Simon Larsen
46e7d9aca6 refactor: Preserve original OpenAPI parameter and property names in ResourceGenerator and OpenAPIParser 2025-06-20 14:38:24 +01:00
Simon Larsen
aa617ec0ba refactor: Enhance handling of Terraform map and list types in ResourceGenerator 2025-06-20 14:33:49 +01:00
Simon Larsen
aaa8d13526 refactor: Exclude Entity columns while retaining EntityArray columns in ModelSchema 2025-06-20 14:15:32 +01:00
Simon Larsen
b055a999e3 refactor: Clarify logic for making fields optional in ModelSchema 2025-06-20 14:00:12 +01:00
Simon Larsen
3c7426ffac refactor: Sanitize attribute names in DataSourceGenerator and ResourceGenerator to avoid reserved keywords 2025-06-20 13:50:49 +01:00
Simon Larsen
09a8d89106 refactor: Update API host URL in README and scripts for consistency 2025-06-20 12:35:30 +01:00
Simon Larsen
3e8273ce55 refactor: Improve code formatting and readability in OpenAPIParser and StringUtils 2025-06-20 12:17:02 +01:00
Simon Larsen
7f08319da2 refactor: Enhance type annotations for methods and variables in OpenAPIParser, ResourceGenerator, StringUtils, and TerraformProviderGenerator 2025-06-20 00:09:33 +01:00
Simon Larsen
9f8c88ec91 refactor: Improve code formatting and readability across multiple generator files 2025-06-20 00:02:47 +01:00
Simon Larsen
571858aad5 refactor: Enhance type annotations and access modifiers across the Terraform provider codebase
- Updated constructors and methods in various classes to use public access modifiers for better clarity.
- Added explicit type annotations for variables and function return types to improve type safety and readability.
- Refactored the DocumentationGenerator, FileGenerator, GoCodeGenerator, GoModuleGenerator, OpenAPIParser, ProviderGenerator, ResourceGenerator, StringUtils, TerraformProviderGenerator, and GenerateProvider scripts.
- Removed deprecated Index.ts file related to Terraform provider generation.
2025-06-19 23:57:50 +01:00
Simon Larsen
6c6612fde9 refactor: Improve readability and consistency in example generation and resource imports 2025-06-19 23:45:00 +01:00
Simon Larsen
30dd60f01f feat: Add example generation for resource documentation and enhance schema handling 2025-06-19 23:32:39 +01:00
Simon Larsen
f9372928fd refactor: Enhance handling of map and list types in resource generation, adding comments for future implementation 2025-06-19 21:35:42 +01:00
Simon Larsen
0475f1cbea refactor: Update import determination logic based on actual usage and resource operations 2025-06-19 21:25:18 +01:00
Simon Larsen
461b64eb56 Refactor code for improved readability and consistency
- Updated formatting in DocumentationGenerator.ts for better readability.
- Enhanced writeFileInDir method in FileGenerator.ts with consistent formatting.
- Refactored GoCodeGenerator.ts for improved code structure and readability.
- Improved error handling and formatting in OpenAPIParser.ts.
- Enhanced ProviderGenerator.ts with consistent formatting for file writing.
- Refactored ResourceGenerator.ts for improved readability and consistency.
- Updated StringUtils.ts for better formatting and readability.
- Improved TerraformProviderGenerator.ts with consistent formatting.
- Refactored GenerateProvider.ts for better error handling and readability.
- Updated Index.ts for improved formatting and consistency.
2025-06-19 21:05:06 +01:00
Simon Larsen
22d326bf6f feat: Implement dynamic example generation for model schemas and enhance schema descriptions 2025-06-19 20:54:39 +01:00
Simon Larsen
e8b0d76bf0 refactor: Enhance schema handling for unknown column types and improve descriptions in ModelSchema 2025-06-19 20:39:17 +01:00
Simon Larsen
37c8ab5405 refactor: Remove debug logging from schema processing in OpenAPIParser 2025-06-19 19:51:26 +01:00
Simon Larsen
f73a964916 feat: Add build and installation script generation for Terraform provider 2025-06-19 19:50:32 +01:00
Simon Larsen
d9412b6c0c refactor: Improve operation type determination and schema extraction in OpenAPIParser 2025-06-19 19:46:49 +01:00
Simon Larsen
eed38eed8d refactor: Update host configuration to remove '/api' path and clarify documentation 2025-06-19 19:14:04 +01:00
Simon Larsen
fdfabe080c refactor: Enhance toSnakeCase method to replace multiple underscores with a single underscore 2025-06-19 19:07:50 +01:00
Simon Larsen
8b41779fa2 refactor: Update provider configuration to use default host and remove unused authentication fields 2025-06-19 19:03:33 +01:00
Simon Larsen
1ef5894325 feat: Implement Terraform Provider Generator with OpenAPI integration
- Added StringUtils class for string manipulation and formatting.
- Created TerraformProviderGenerator class to handle provider generation.
- Defined TypeScript interfaces for Terraform provider configuration and OpenAPI specifications.
- Developed GenerateProvider script to orchestrate the provider generation process.
- Added README documentation for the Terraform provider generator.
- Implemented installation script for local provider installation.
- Created publish script for preparing and publishing the provider to Terraform Registry.
2025-06-19 18:55:46 +01:00
Simon Larsen
aec4878948 refactor: remove unused select schema references in OpenAPIUtil 2025-06-19 18:31:36 +01:00
Simon Larsen
f28dd9468f refactor: remove unused select schema reference in OpenAPIUtil 2025-06-19 18:29:31 +01:00
Simon Larsen
ba3d665e19 refactor: remove unused select schema reference in create API spec 2025-06-19 18:28:42 +01:00
Simon Larsen
035e9273d9 Refactor: Remove old Terraform provider implementation and scripts
- Deleted main.go and provider.go files as part of the provider refactor.
- Removed publish-terraform-provider.sh script, which was responsible for publishing the provider to the Terraform Registry.
- Eliminated validate-generation.sh script used for local validation of the provider generation process.
- Introduced new Index.ts file to initiate the Terraform provider generation process from the OpenAPI specification.
- Updated the generation process to ensure a clean slate by removing any existing Terraform directory before generating new files.
2025-06-19 17:58:39 +01:00
Simon Larsen
849e06ec35 feat: implement type conflict resolution in TypeConflictResolver 2025-06-19 17:39:26 +01:00
Simon Larsen
9e1cc85c09 refactor: improve resource and data source handling in GeneratorConfig 2025-06-19 17:22:23 +01:00
Simon Larsen
04ce633338 refactor: simplify response schema registration in OpenAPIUtil 2025-06-19 17:17:29 +01:00
Simon Larsen
a04c561ad5 fix: add missing newline for better readability in GenerateProvider.ts 2025-06-19 16:05:52 +01:00
Simon Larsen
f221b2b4ff feat: add response schemas for list, create, get, update, and analytics operations in OpenAPIUtil 2025-06-19 15:33:39 +01:00
Simon Larsen
4ab7b09661 fix: correct function call for provider initialization in main.go 2025-06-19 14:32:23 +01:00
Simon Larsen
523b842e57 fix: ensure error is thrown after failed Go module initialization and tidy command 2025-06-19 14:27:19 +01:00
Simon Larsen
023fe0b742 fix: correct import statement for provider package in main.go 2025-06-19 14:26:32 +01:00
Simon Larsen
e06085a16a feat: implement initial provider structure and functionality for OneUptime Terraform provider 2025-06-19 14:19:25 +01:00
Simon Larsen
e074b38e3d fix: correct path references in Go module initialization and main.go file reading 2025-06-19 13:38:23 +01:00
Simon Larsen
3d6a61ddc1 feat: add Go module setup and main entry point for Terraform provider generation 2025-06-19 13:28:00 +01:00
Simon Larsen
f3dc3e976e refactor: format output path for Terraform provider generation for improved readability 2025-06-19 13:18:54 +01:00
Simon Larsen
f556cf1174 fix: update output path for Terraform provider generation to include full provider name 2025-06-18 17:11:27 +01:00
Simon Larsen
6b7a102b9a refactor: replace <span> with <div> for monitor status elements to improve structure 2025-06-18 14:50:19 +01:00
Simon Larsen
a7d672263a refactor: rename 'type' to 'fileType' in various components for consistency and clarity 2025-06-18 14:47:18 +01:00
Simon Larsen
3ebc19fb78 refactor: rename 'type' columns to 'fileType', 'paymentMethodType', and 'customFieldType' in migration files for clarity; update related code references 2025-06-18 13:48:54 +01:00
Simon Larsen
7c509791f4 fix: update fieldType references to use customFieldType for consistency in CustomFieldsDetail component 2025-06-18 13:43:13 +01:00
Simon Larsen
5225fdde0d feat: add migration to rename 'type' columns to improve clarity in database schema 2025-06-18 13:41:31 +01:00
Simon Larsen
8a57fdbac7 refactor: rename 'type' to 'customFieldType' and 'paymentMethodType' in various models and components for clarity 2025-06-18 13:40:15 +01:00
Simon Larsen
77e097bf5f feat: implement ProviderCodeSpecGenerator for generating provider code specifications 2025-06-18 12:04:49 +01:00
Simon Larsen
b13f1d03c0 fix: remove Go module setup from provider generation process and add scaffolding for framework output directory 2025-06-18 11:15:01 +01:00
Simon Larsen
9af40e0efb feat: enhance provider.go generation with dynamic resource and data source implementations 2025-06-17 20:55:22 +01:00
Simon Larsen
eceeffec2e fix: remove unnecessary terraform block from example configuration 2025-06-17 20:44:14 +01:00
Simon Larsen
f057710abf fix: update get_provider_version function to return a default version for testing 2025-06-17 20:34:31 +01:00
Simon Larsen
bdf21e3598 chore: remove local installation script for OneUptime Terraform provider 2025-06-17 20:32:47 +01:00
Simon Larsen
55a40d80d5 fix: update .gitignore to include Terraform provider files and modify install script to use --force option 2025-06-17 20:31:05 +01:00
Simon Larsen
70cd4e7a46 feat: Add OneUptime Terraform Provider Publisher script
- Implemented a comprehensive bash script to automate the publishing process of the OneUptime Terraform provider to the Terraform Registry.
- Included functionalities for version specification, testing mode, dependency installation, provider generation, GitHub repository interaction, release creation, and asset uploading.
- Added error handling, prerequisite validation, and detailed logging for better user experience.
- Integrated GPG signing for release assets and SHA256 checksum generation.
- Provided usage instructions and examples for ease of use.
2025-06-17 20:28:24 +01:00
Simon Larsen
301cf0611d feat: add local installation script and update README for Terraform provider 2025-06-17 20:14:05 +01:00
Simon Larsen
16fd822f4f fix: update GPG private key reference in Terraform provider workflow 2025-06-17 12:26:00 +01:00
Simon Larsen
100bfbe5db fix: enhance GPG signing process with key validation and debugging output 2025-06-17 12:00:42 +01:00
Simon Larsen
e420e44bee fix: add GPG key import and export steps in Terraform provider publishing process 2025-06-17 11:34:42 +01:00
Simon Larsen
18b5323bc2 fix: add asset existence check and deletion before uploading in release process 2025-06-17 11:24:17 +01:00
Simon Larsen
cb002e25f9 fix: remove GPG key import and export steps from Terraform provider publishing process 2025-06-17 11:12:01 +01:00
Simon Larsen
19a0cfd3fd fix: add GPG key import and export steps in Terraform provider generation workflow 2025-06-17 11:06:26 +01:00
Simon Larsen
3b6a746d41 fix: streamline GPG key handling in SHASUMS signing process 2025-06-17 11:00:04 +01:00
Simon Larsen
f27090dc4f fix: improve GPG key import error handling and output for better debugging 2025-06-17 10:50:41 +01:00
Simon Larsen
2b68ec3d1b fix: enhance GPG key import process by using a temporary file and improving status messages 2025-06-17 10:44:18 +01:00
Simon Larsen
02e3d1138e fix: update Terraform provider publish command to use quotes for better handling of secrets 2025-06-17 10:32:08 +01:00
Simon Larsen
fdb2823fda fix: streamline GPG key handling in Terraform provider publish workflow 2025-06-17 10:27:29 +01:00
Simon Larsen
0ed160f68f fix: streamline GPG key handling and enhance publish script options for Terraform provider 2025-06-17 10:20:42 +01:00
Simon Larsen
66f6952ad9 fix: remove fallback for GPG private key in release workflow 2025-06-17 10:11:16 +01:00
Simon Larsen
d08387d4c8 fix: improve GPG key import process with enhanced error handling and automation 2025-06-17 09:59:12 +01:00
Simon Larsen
78835f8fb4 fix: enhance GPG signing process with improved error handling and automation 2025-06-17 09:48:14 +01:00
Simon Larsen
ae9af32768 fix: update GitHub release title and name format to simplify versioning 2025-06-17 09:42:13 +01:00
Simon Larsen
16de3a0380 fix: include signature files in release asset creation and upload process 2025-06-17 09:39:55 +01:00
Simon Larsen
5196fc1385 fix: enhance GPG signing process with validation and improved error handling 2025-06-16 23:14:37 +01:00
Simon Larsen
964afb0a1d fix: streamline provider generation by removing redundant validations and enhancing zip archive creation 2025-06-16 23:05:03 +01:00
Simon Larsen
c5b382c122 fix: replace multi-platform build process with verification of existing builds 2025-06-16 22:47:46 +01:00
Simon Larsen
e74fddfe75 fix: update build command in publish script to use variable for ldflags 2025-06-16 22:44:28 +01:00
Simon Larsen
2ef6698f1b fix: update publish script to validate provider framework directory and adjust paths for Go operations 2025-06-16 22:31:27 +01:00
Simon Larsen
7dac270540 fix: enhance provider generation validation with checks for essential files and Go module dependencies 2025-06-16 22:02:57 +01:00
Simon Larsen
bfb0cf1a79 fix: update file paths in provider generation and build scripts to reflect new directory structure 2025-06-16 21:54:59 +01:00
Simon Larsen
8765bc07ed fix: add retry logic with exponential backoff to Slack API requests 2025-06-16 21:51:21 +01:00
Simon Larsen
388a842da4 fix: add checks for essential files in provider generation and build process 2025-06-16 21:45:02 +01:00
Simon Larsen
157e5563db fix: add multi-platform build, SHASUM generation, and asset upload to publish script 2025-06-16 21:31:21 +01:00
Simon Larsen
619dacf18b fix: simplify GitHub release title in publish-terraform-provider script 2025-06-16 21:23:59 +01:00
Simon Larsen
f76915f56f fix: enhance push_to_repository function to handle remote changes and tag management 2025-06-16 21:14:46 +01:00
Simon Larsen
37dc6a82cb fix: update publish-terraform-provider script to use 'master' branch instead of 'main'
fix: revise Terraform documentation to clarify project creation and resource structure
fix: enhance examples and quick start guide for better clarity on project ID usage
2025-06-16 21:07:14 +01:00
Simon Larsen
a0b980fb56 fix: remove unnecessary closing brace in publish-terraform-provider script 2025-06-16 20:56:32 +01:00
Simon Larsen
8065dcdb18 fix: update publish-terraform-provider script for test release mode 2025-06-16 20:50:58 +01:00
Simon Larsen
3be7b0e4ee fix: improve formatting of manifestContent declaration in GoModuleSetup 2025-06-16 20:44:43 +01:00
Simon Larsen
1e3f5fb7e4 fix: improve GitHub release creation logic for dry runs and actual releases 2025-06-16 20:39:26 +01:00
Simon Larsen
df52df8fe0 fix: clean up formatting and whitespace in FormField and GoModuleSetup files 2025-06-16 20:35:54 +01:00
Simon Larsen
514ee1e6ed fix: enhance repository access validation and clarify GITHUB_TOKEN permissions in publish script 2025-06-16 20:31:39 +01:00
Simon Larsen
5350c22833 fix: ensure SSH directory exists before setting up deploy key for GitHub release 2025-06-16 20:23:54 +01:00
Simon Larsen
e82092dbd7 fix: remove unnecessary fail-fast strategy from multiple Docker image deploy jobs 2025-06-16 20:18:56 +01:00
Simon Larsen
44e80d6707 fix: update environment variables for publish-terraform-provider job in release workflows 2025-06-16 20:17:28 +01:00
Simon Larsen
6c67b61cc1 fix: enhance GitHub authentication method in publish script to support deploy keys 2025-06-16 20:15:59 +01:00
Simon Larsen
d58b5170d9 fix: update description type in multiple components to support ReactElement 2025-06-16 16:57:09 +01:00
Simon Larsen
8262cc5a00 fix: correct script path casing for publish-terraform-provider in package.json 2025-06-16 16:49:09 +01:00
Simon Larsen
c579bc21a8 fix: update dependencies for test-helm-chart job to include publish-terraform-provider 2025-06-16 16:37:54 +01:00
Simon Larsen
ac131d6ae6 feat: add publishing workflow for Terraform provider with versioning and dependency management 2025-06-16 16:36:53 +01:00
Simon Larsen
6b03b541b3 fix: improve dry run handling in Terraform provider publishing script 2025-06-16 16:36:07 +01:00
Simon Larsen
14f95d54f4 fix: enhance GitHub authentication and error handling in publishing script 2025-06-16 16:20:41 +01:00
Simon Larsen
bd2c70e5fe fix: remove redundant success message from publishing process 2025-06-16 16:16:26 +01:00
Simon Larsen
498a481162 feat: add multi-platform build support for Terraform provider 2025-06-16 15:56:04 +01:00
Simon Larsen
3ec126eed9 fix: update Go module setup to create cmd directory and adjust main.go path 2025-06-16 15:43:30 +01:00
Simon Larsen
b0d9e08f1b feat: implement Go module setup and build configuration for Terraform provider 2025-06-16 15:08:48 +01:00
Simon Larsen
625ad9cc47 fix: remove unnecessary whitespace in features table for cleaner code 2025-06-16 14:52:43 +01:00
Simon Larsen
d17b272c61 fix: update feature descriptions for clarity and consistency 2025-06-16 14:26:04 +01:00
Simon Larsen
5188f0fb2d fix: remove PR comment step from OpenAPI spec generation workflow 2025-06-16 14:17:07 +01:00
Simon Larsen
cafe51ed38 fix: remove comment PR step from Terraform provider generation workflow 2025-06-16 14:16:53 +01:00
Simon Larsen
25ff258d83 fix: remove unnecessary blank lines in route definitions for cleaner code 2025-06-16 13:14:29 +01:00
Simon Larsen
140547d796 fix: update link styling for improved visibility in Markdown cheatsheet 2025-06-16 13:07:59 +01:00
Simon Larsen
b68f25b80d fix: ensure consistent styling for Markdown link in cheatsheet 2025-06-16 13:07:29 +01:00
Simon Larsen
6521009e29 feat: add Terraform support option to pricing plans and improve route formatting 2025-06-16 13:07:26 +01:00
Simon Larsen
589cd8d8ee feat: add Markdown description support across various components for enhanced user guidance 2025-06-16 13:04:14 +01:00
Simon Larsen
bc644a75f8 fix: update Markdown utility import path and adjust helpText state type in CodeEditor component 2025-06-16 12:45:40 +01:00
Simon Larsen
d564c573e5 refactor: remove unused Markdown imports and improve description formatting in various components 2025-06-16 12:44:02 +01:00
Simon Larsen
60b6b55f0f fix: update descriptions in Alert, ScheduledMaintenanceTemplate, and StatusPageAnnouncement models to clarify Markdown usage 2025-06-16 12:39:55 +01:00
Simon Larsen
5179107c02 fix: update remediation notes description in Alert model and remove unused Markdown import in IncidentNoteTemplate 2025-06-16 12:38:55 +01:00
Simon Larsen
fa6ef8070c feat: enhance Markdown support with utility functions and update descriptions across various components 2025-06-16 12:36:41 +01:00
Simon Larsen
c21623d275 feat: add Terraform Provider navigation links and restructure publishing documentation 2025-06-16 09:56:37 +01:00
Simon Larsen
f9d17364f3 Add comprehensive documentation for OneUptime Terraform Provider
- Created main documentation index for Terraform Provider.
- Added Quick Start Guide for rapid setup and configuration.
- Developed detailed installation and usage guide from Terraform Registry.
- Introduced Self-Hosted Configuration Guide emphasizing version compatibility.
- Included troubleshooting sections and best practices for self-hosted users.
- Provided complete configuration examples for various environments.
2025-06-16 09:41:10 +01:00
Simon Larsen
a1c719b653 Merge branch 'master' of github.com:OneUptime/oneuptime 2025-06-16 09:32:27 +01:00
Simon Larsen
42e9016c31 feat: implement Terraform provider release workflow and documentation 2025-06-16 09:32:24 +01:00
Simon Larsen
6c4d64455f Merge pull request #1949 from OneUptime/snyk-fix-dee1b14b5aa17ca1ba382a4c7a01772c
[Snyk] Security upgrade jest from 29.7.0 to 30.0.0
2025-06-14 21:30:46 +01:00
snyk-bot
1931b9a45b fix: package.json & package-lock.json to reduce vulnerabilities
The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-JS-BABELHELPERS-9397697
- https://snyk.io/vuln/SNYK-JS-INFLIGHT-6095116
- https://snyk.io/vuln/SNYK-JS-BRACEEXPANSION-9789073
2025-06-14 11:29:13 +00:00
Simon Larsen
5b4233a61c feat: add Terraform provider publishing workflow and script 2025-06-13 22:13:37 +01:00
Simon Larsen
e059d9ee0c style: format code for better readability in AnnouncementCreate and StatusPageAnnouncementTemplates components 2025-06-13 20:55:55 +01:00
Simon Larsen
0c3a90ed83 fix: correct PageRoute structure in StatusPagesRoutes component 2025-06-13 20:53:17 +01:00
Simon Larsen
b62e6a4b23 feat: create AnnouncementCreate component and update routing for announcements 2025-06-13 20:51:08 +01:00
Simon Larsen
c42e13d160 feat: enhance Status Pages field structure in StatusPageAnnouncementTemplates 2025-06-13 20:49:29 +01:00
Simon Larsen
febb0c77e6 feat: add Announcement creation page and update routing for announcements 2025-06-13 20:43:00 +01:00
Simon Larsen
d5706167a6 refactor: remove unused overrideFieldKey property from StatusPageAnnouncementTemplateView and StatusPageAnnouncementTemplates 2025-06-13 20:22:32 +01:00
Simon Larsen
bcbddd480d refactor: standardize formatting and improve readability in StatusPageAnnouncementTemplateView and SpecificationConverter 2025-06-13 20:20:25 +01:00
Simon Larsen
58067a989b feat: update permissions for Status Page Announcement Template and enhance route handling in the settings page 2025-06-13 14:11:48 +01:00
Simon Larsen
242b6a3dde feat: add Status Page Announcement Template view and update routes for enhanced functionality 2025-06-13 14:08:27 +01:00
Simon Larsen
17a67eb19d refactor: improve code readability by standardizing formatting across multiple files 2025-06-13 13:54:36 +01:00
Simon Larsen
0ef1b717aa refactor: add type annotations for improved type safety across various components 2025-06-13 13:50:06 +01:00
Simon Larsen
c0be3e2fa5 fix: standardize formatting and improve readability in various files 2025-06-13 12:58:46 +01:00
Simon Larsen
739256bd19 Merge branch 'master' of github.com:OneUptime/oneuptime 2025-06-13 12:53:37 +01:00
Simon Larsen
cdf26234d5 feat: add disableSpellCheck prop to various components to enhance user experience 2025-06-13 11:53:12 +00:00
Simon Larsen
025ceb7a3d feat: add Status Page Announcement Template API integration 2025-06-13 12:51:17 +01:00
Simon Larsen
fae86b13d7 feat: add routes for Status Page Announcement Templates in settings 2025-06-13 12:46:52 +01:00
Simon Larsen
6f26f1b5f9 feat: add migration for Status Page Announcement Template and related tables with foreign key constraints 2025-06-13 12:23:13 +01:00
Simon Larsen
81ec5a42de refactor: improve readability of template selection logic in AnnouncementTable 2025-06-13 12:16:43 +01:00
Simon Larsen
3084438cf9 feat: add functionality for creating announcements from templates with modal integration and error handling 2025-06-13 12:13:52 +01:00
Simon Larsen
d74be2e23a feat: add Status Page Announcement Template functionality with permissions and UI integration 2025-06-13 12:09:13 +01:00
Simon Larsen
3234f730fe Refactor ToolInstaller and ProviderSpec for improved readability and consistency
- Updated import statements to use double quotes for consistency.
- Refactored ToolInstaller methods to enhance readability and maintainability.
- Improved error handling and logging in ToolInstaller methods.
- Simplified the installation verification process for tools.
- Enhanced the ProviderSpec class to maintain consistent formatting and error handling.
- Refactored SpecificationConverter for better structure and clarity.
- Improved the extraction and sanitization of resource names in SpecificationConverter.
- Enhanced schema generation logic to accommodate various OpenAPI specifications.
2025-06-13 12:07:22 +01:00
Simon Larsen
60a6714e40 feat: update spellCheck behavior in Input component to conditionally disable based on input type 2025-06-13 11:04:31 +00:00
Simon Larsen
a2be299583 feat: add disableSpellCheck prop to MarkdownEditor, CodeEditor, and FormField components with corresponding tests 2025-06-13 11:02:39 +00:00
Simon Larsen
22c705881c feat: add disableSpellCheck prop to Input and TextArea components and update tests for spellcheck behavior 2025-06-13 10:54:00 +00:00
Simon Larsen
d4225d35a0 feat: add resource name sanitization to follow Terraform naming conventions 2025-06-13 10:57:53 +01:00
Simon Larsen
577b5ea0a7 feat: enhance GenerateProvider to include Framework Generator installation and add detailed logging for each step 2025-06-13 10:50:16 +01:00
Simon Larsen
d71338ffae feat: implement FrameworkGenerator class for Terraform provider code generation and scaffolding 2025-06-13 10:41:01 +01:00
Simon Larsen
9b8bf4c997 feat: add openapi.json to .gitignore to prevent tracking of generated files 2025-06-13 10:40:18 +01:00
Simon Larsen
7fcd7d7769 feat: enhance ToolInstaller to support installation of Framework Generator and improve logging 2025-06-13 10:40:03 +01:00
Simon Larsen
d39f59e33f feat: remove unused miscDataProps from create API specifications 2025-06-13 10:39:38 +01:00
Simon Larsen
85c643dd8b feat: refactor Terraform provider code generation into ProviderSpec class 2025-06-13 10:20:51 +01:00
Simon Larsen
dc114e7b6f feat: enhance resource handling in generator config for Terraform provider 2025-06-12 23:17:31 +01:00
Simon Larsen
ab9d6cceac feat: add ToolInstaller for managing Terraform Plugin Codegen OpenAPI installation and integrate it into GenerateProvider 2025-06-12 23:12:19 +01:00
Simon Larsen
858a04ea36 feat: update generate-openapi-spec script to use relative path for OpenAPI spec file 2025-06-12 23:04:14 +01:00
Simon Larsen
4db1320d47 feat: update generate-openapi-spec script to accept output path as an argument 2025-06-12 23:04:07 +01:00
Simon Larsen
962071aa21 feat: update OpenAPI spec path in GenerateProvider to ensure correct file location 2025-06-12 22:52:06 +01:00
Simon Larsen
350943f78b feat: update output path for Terraform provider generator config to ensure correct file placement 2025-06-12 22:50:46 +01:00
Simon Larsen
270eafef6a feat: enhance resource and data source generation logic based on operationId for better handling of CRUD operations 2025-06-12 22:40:35 +01:00
Simon Larsen
61d7cbd6a6 feat: add operationId to API paths for better identification and organization 2025-06-12 22:34:50 +01:00
Simon Larsen
4e53dd45db feat: remove debug logging from AnalyticsModelSchema to streamline code 2025-06-12 22:26:05 +01:00
Simon Larsen
35b1c50f18 feat: remove debug logging from ModelSchema class to clean up code 2025-06-12 22:24:54 +01:00
Simon Larsen
eaf11e42ea feat: improve resource and data source naming by prioritizing operationId and refining fallback logic 2025-06-12 22:00:44 +01:00
Simon Larsen
38b0113842 feat: enhance resource and data source naming by using operationId or fallback to path and method 2025-06-12 21:56:56 +01:00
Simon Larsen
faa7f3a8aa feat: implement Terraform provider generator configuration and OpenAPI spec generation 2025-06-12 21:54:09 +01:00
Simon Larsen
7beb0be9a9 feat: enhance generateOpenAPISpec function to accept output path and ensure directory exists 2025-06-12 21:42:23 +01:00
Simon Larsen
b47494073b feat: remove GenerateProvider.ts file and its associated logic 2025-06-12 21:17:05 +01:00
Simon Larsen
e172c7c80a feat: enhance Terraform provider generation by extracting resources and data sources from OpenAPI spec 2025-06-12 21:04:11 +01:00
Simon Larsen
a92dc56c55 fix: update generator configuration path and ensure output directory exists 2025-06-12 19:38:17 +01:00
Simon Larsen
9f8fe31b70 feat: dynamically generate resources and datasources in generator configuration 2025-06-12 19:36:09 +01:00
Simon Larsen
14023df7a6 fix: improve error message formatting in ProjectMiddleware and its tests 2025-06-12 18:23:20 +01:00
Simon Larsen
0e6761d291 fix: standardize error messages for API key validation in ProjectMiddleware 2025-06-12 18:20:53 +01:00
Simon Larsen
53ff7ebc5c fix: improve code formatting and readability in Routes and OpenAPI service files 2025-06-12 18:00:45 +01:00
Simon Larsen
8190ae0624 feat: add OpenAPI specification support and update navigation links 2025-06-12 17:57:27 +01:00
Simon Larsen
c1009a3361 fix: standardize formatting and improve readability in various schema and model files 2025-06-12 17:38:28 +01:00
Simon Larsen
917e43143a fix: simplify ObjectID schema and update ModelSchema to use string format for identifiers 2025-06-12 17:29:21 +01:00
Simon Larsen
657cdfd2d9 fix: refactor column type handling in AnalyticsModelSchema and simplify example value assignment in ModelSchema 2025-06-12 12:17:51 +01:00
Simon Larsen
3cdedee597 fix: filter out columns marked to be hidden in documentation from table columns 2025-06-12 11:51:54 +01:00
Simon Larsen
bfc958dffe fix: update TableColumn metadata to include hideColumnInDocumentation flag and enhance date schema handling in ModelSchema 2025-06-12 11:48:44 +01:00
Simon Larsen
01916e6323 fix: return baseValue for EqualTo operator in AnalyticsModelSchema and ModelSchema 2025-06-12 11:20:57 +01:00
Simon Larsen
2621b69d9f fix: clean up formatting and improve OpenAPI schema examples in ModelSchema 2025-06-12 11:16:57 +01:00
Simon Larsen
1c3c612306 fix: enhance error message for missing API key and improve project ID handling in ProjectMiddleware 2025-06-12 11:13:06 +01:00
Simon Larsen
b42665ec67 fix: update error message for invalid API key in ProjectMiddleware 2025-06-12 10:05:36 +01:00
Simon Larsen
823886e15e fix: improve error handling for invalid API key in ProjectMiddleware 2025-06-12 10:01:26 +01:00
Simon Larsen
1943ecdfe6 fix: format mockRefreshProjectUsersByProject declaration for improved readability 2025-06-11 22:06:58 +01:00
Simon Larsen
d426a54f09 fix: enhance type definition for mockRefreshProjectUsersByProject in TeamMemberService tests 2025-06-11 22:05:04 +01:00
Simon Larsen
e20fbe1662 fix: update ProjectAuthorization and TeamMemberService tests for improved mock handling 2025-06-11 17:28:30 +01:00
Simon Larsen
92eb79c954 fix: simplify error handling in afterEach of TeamMemberService tests 2025-06-11 17:20:31 +01:00
Simon Larsen
19917dfc29 fix: add projectId selection to ProjectMiddleware test and improve error handling in TeamMemberService tests 2025-06-11 17:09:20 +01:00
Simon Larsen
cf428ea5a9 fix: simplify techStackItems mapping in TechStackView component 2025-06-11 16:49:42 +01:00
Simon Larsen
39f873b34d fix: update test assertions and remove unused subscription status in BillingService tests 2025-06-11 16:44:00 +01:00
Simon Larsen
cc20f041a5 fix: enhance type definition for techStackItems in TechStackView component 2025-06-11 15:52:29 +01:00
Simon Larsen
6389a70207 fix: update context type in VMRunner to allow string values 2025-06-11 15:42:37 +01:00
Simon Larsen
0e210320e5 fix: update ComponentProps to allow string type and adjust TechStackView to map tech stack items correctly 2025-06-11 15:40:40 +01:00
Simon Larsen
801ded5bb4 fix: update type constraints in QueryHelper methods to use FindWhereProperty<any> 2025-06-11 15:24:33 +01:00
Simon Larsen
74dc22fcff fix: remove unused import of GenericObject in StatementGenerator tests 2025-06-11 15:04:09 +01:00
Simon Larsen
bd45b59725 fix: update test cases in AnalyticsDatabaseService to use specific query and props objects 2025-06-11 15:03:54 +01:00
Simon Larsen
c05e5cb0ef fix: ensure async handling of billing service mock initialization in tests 2025-06-11 14:42:25 +01:00
Simon Larsen
2c02500fd3 fix: update type constraints in QueryOperator and initialize query/props as empty objects in tests 2025-06-11 14:37:31 +01:00
Simon Larsen
1a4c652bfc fix: format type assertion for mocked Navigation module for consistency 2025-06-11 14:28:34 +01:00
Simon Larsen
a069fa97df fix: refactor conditional checks for onChange props across multiple components 2025-06-11 14:25:35 +01:00
Simon Larsen
a7f00105ac fix: update ESLint configuration and ignore patterns for improved linting performance 2025-06-11 13:46:53 +01:00
Simon Larsen
29339b75ba fix: update Navigation mock structure to use default export for consistency in tests 2025-06-11 13:38:16 +01:00
Simon Larsen
8a3afb8fb0 fix: simplify event handler checks using optional chaining for onClick and onChange props across multiple components 2025-06-11 13:30:57 +01:00
Simon Larsen
be6627cd2e fix: refactor onClick handler in ColorInput to use explicit check for props.onClick 2025-06-11 13:18:05 +01:00
Simon Larsen
d200ee3d6f fix: format import statement for BillingService in mockIsBillingEnabled function 2025-06-11 13:11:32 +01:00
Simon Larsen
dd52a97dfa fix: improve error handling by replacing catch blocks with empty catch statements across multiple components 2025-06-11 13:08:28 +01:00
Simon Larsen
2b801c3d08 fix: update action start and end handlers to use explicit checks before calling 2025-06-11 10:28:36 +01:00
Simon Larsen
d6d5ecec64 fix: correct syntax for checking disabled attribute in ConfirmModal test 2025-06-11 10:27:53 +01:00
Simon Larsen
73f248c367 fix: improve error handling in CommonModel and update mock function to return a promise in BillingServiceHelper 2025-06-11 10:27:42 +01:00
Simon Larsen
9d3b2b5fc9 fix: correct function call syntax in OrderedStatesList test and improve error handling in various classes 2025-06-11 10:26:42 +01:00
Simon Larsen
98a4f058dd fix: add error logging across multiple components and services 2025-06-11 10:14:09 +01:00
Simon Larsen
289308b01e fix: enhance error logging for statusPageId conversion in StatusPageAPI
fix: improve onClick handler in Logo component for better readability
2025-06-10 15:23:32 +01:00
Simon Larsen
dd05f540c1 fix: update error logging to include error details in data migration classes
refactor: change GenericObject type from Object to object for consistency
fix: increase memory limit for eslint commands in package.json
2025-06-10 15:17:55 +01:00
Simon Larsen
656420ac7b Remove dotenv and sass dependencies from Dashboard and StatusPage package.json files 2025-06-10 15:07:58 +01:00
Simon Larsen
f7597bf35e fix: add null checks for startTimeUnixNano and timeUnixNano in getMetricFromDatapoint method 2025-06-10 14:22:22 +01:00
Simon Larsen
a579b97584 fix: update script tags to use type="module" for improved compatibility 2025-06-10 12:26:54 +01:00
Simon Larsen
0cc64550c9 refactor: change esbuild output format from IIFE to ESM to enable code splitting 2025-06-10 12:24:52 +01:00
Simon Larsen
0931ae577a refactor: remove development environment setup from Dockerfiles and nodemon configurations 2025-06-10 12:02:20 +01:00
Simon Larsen
67636da2dd fix: update script references from bundle.js to Index.js in multiple views 2025-06-10 10:13:40 +01:00
Simon Larsen
26aef9c2ea fix: disable minification in esbuild configuration for development 2025-06-10 10:10:24 +01:00
Simon Larsen
2c512abb7b feat: add sass as a development dependency 2025-06-09 20:48:06 +01:00
Simon Larsen
2d0752aede refactor: update esbuild configuration paths and add esbuild dependency 2025-06-09 20:14:47 +01:00
Simon Larsen
b1383029f3 fix: remove unnecessary comments from port mappings in docker-compose.dev.yml 2025-06-09 20:04:57 +01:00
Simon Larsen
1392aba0dc refactor: remove webpack dependencies and update documentation for migration to esbuild 2025-06-09 20:04:36 +01:00
Simon Larsen
f5e6b04070 refactor: migrate from webpack to esbuild for all services
- Updated package.json scripts to use esbuild instead of webpack.
- Removed webpack.config.js files from all services.
- Added esbuild.config.js files for Dashboard, Accounts, AdminDashboard, and StatusPage.
- Created a shared esbuild configuration in Scripts/esbuild-config.js.
- Implemented CSS and file loader plugins for handling styles and assets.
- Added a migration cleanup script to remove webpack dependencies and configurations.
- Updated ESLint configuration to ignore webpack.config.js.
2025-06-09 20:02:24 +01:00
Simon Larsen
4ae8a64857 fix: update ESLint rule references and upgrade TypeScript dependencies 2025-06-09 15:58:01 +01:00
Simon Larsen
ddb8bdb5f2 fix: update output directory name for Terraform provider generation 2025-06-09 15:35:05 +01:00
Simon Larsen
c16ef4b8fd fix: correct syntax errors and improve error messages in Terraform provider generation 2025-06-09 15:32:33 +01:00
Simon Larsen
5177af1b33 fix: install script dependencies and export generateOpenAPISpec function for Terraform provider generation 2025-06-09 15:30:48 +01:00
Simon Larsen
e00ee85483 fix: correct directory name for installing script dependencies in OpenAPI spec generation workflow 2025-06-09 15:26:20 +01:00
Simon Larsen
1d01ffd293 fix: ensure script dependencies are installed before generating OpenAPI spec 2025-06-09 15:22:50 +01:00
Simon Larsen
7d069065c9 Merge pull request #1939 from OneUptime/terraform
Terraform
2025-06-09 15:01:47 +01:00
Simon Larsen
a37a0c4b3b fix: ensure tfplugingen-openapi is installed and use correct path for generation command 2025-06-09 14:58:28 +01:00
Simon Larsen
9633cbcb40 refactor: update provider generation to use dynamic API version and improve naming conventions 2025-06-09 14:55:29 +01:00
Simon Larsen
81d7168a0e feat: implement Terraform provider generation workflow with validation and documentation 2025-06-09 14:44:56 +01:00
Simon Larsen
6064f060a7 refactor: improve code consistency by adding missing commas in function parameters and statements 2025-06-09 14:34:50 +01:00
Simon Larsen
e34ede0c75 refactor: clean up formatting and remove unnecessary changes in StatementGenerator class 2025-06-09 14:26:18 +01:00
Simon Larsen
6a141c2cf1 refactor: enhance type annotations and replace console logs with Logger for OpenAPI spec generation 2025-06-09 14:22:12 +01:00
Simon Larsen
e03d1c3e1a refactor: simplify validation call and clean up whitespace in generateOpenAPISpec function 2025-06-09 14:19:08 +01:00
Simon Larsen
44f1f40a93 feat: add OpenAPI spec generation workflow with validation and artifact upload 2025-06-09 14:15:23 +01:00
Simon Larsen
39d6eac670 refactor: streamline OpenAPI spec validation and error handling 2025-06-09 14:13:17 +01:00
Simon Larsen
ed4936af30 refactor: restructure generateOpenAPISpec function for improved readability and organization 2025-06-09 14:11:03 +01:00
Simon Larsen
d5f0a29959 feat: Update package dependencies and add OpenAPI spec generation
- Added @readme/openapi-parser as a dependency in Scripts/package.json.
- Introduced a new script command "generate-openapi-spec" in package.json for generating OpenAPI specifications.
- Removed the obsolete test_schema_permissions.js file.
- Created a new script (GenerateSpec.ts) to generate and validate the OpenAPI spec, saving it to openapi.json.
2025-06-09 14:08:56 +01:00
Simon Larsen
b7ee17fa3e refactor: clean up formatting and remove unnecessary line breaks in ProjectAuthorization, OpenAPI, and ModelSchema files 2025-06-09 13:50:37 +01:00
Simon Larsen
eb3039f8d7 refactor: update Monitor column type to use MonitorSteps and integrate schema retrieval 2025-06-09 13:47:54 +01:00
Simon Larsen
f7464d6807 refactor: add IP and Port types to ColumnType and update related schemas in AnalyticsModelSchema and ModelSchema 2025-06-09 13:45:53 +01:00
Simon Larsen
db56b83734 refactor: remove ProjectID header from API Key example in authentication guide 2025-06-09 13:04:36 +01:00
Simon Larsen
907fd3f7e2 refactor: update tenant ID retrieval logic based on API key presence in ProjectMiddleware 2025-06-09 13:02:33 +01:00
Simon Larsen
5e7fd03564 refactor: remove API key header from default API headers in OpenAPI utility 2025-06-09 12:57:34 +01:00
Simon Larsen
db16554390 refactor: clean up code formatting and remove unused nested model example in AnalyticsModelSchema 2025-06-09 11:59:55 +01:00
Simon Larsen
f2f29398ee refactor: remove KeyValueNestedModel and clean up related code in CommonModel 2025-06-09 11:57:20 +01:00
Simon Larsen
41d0c4034d refactor: remove NestedModel support and clean up related code in AnalyticsBaseModel and StatementGenerator 2025-06-09 11:54:58 +01:00
Simon Larsen
3099d96e3c refactor: enhance type safety and improve parameter handling in OpenAPI utility methods 2025-06-09 11:36:09 +01:00
Simon Larsen
1ed266b9f5 feat: add API key authentication and enhance API specifications with default headers 2025-06-09 11:25:49 +01:00
Simon Larsen
03e26a61d8 refactor: improve code formatting for better readability in AnalyticsModelSchema and BaseSchema 2025-06-08 21:01:19 +01:00
Simon Larsen
e58377df9f refactor: add type annotations for better type safety in OpenAPI and schema files 2025-06-08 19:08:27 +01:00
Simon Larsen
a0002ac172 refactor: improve code formatting and readability across multiple schema files 2025-06-08 16:07:47 +01:00
Simon Larsen
f8da2c2c5a feat: enhance column access control checks for read and create permissions in AnalyticsModelSchema 2025-06-06 14:51:26 +01:00
Simon Larsen
196ba295f4 feat: enhance permission handling in ModelSchema for column access control 2025-06-06 13:59:56 +01:00
Simon Larsen
fbc98a74a6 feat: update singular and plural names for OnCallDutyPolicyTimeLog model 2025-06-06 13:59:18 +01:00
Simon Larsen
6d154f1c8a feat: update singular and plural names for OnCallDutyPolicyEscalationRuleSchedule model 2025-06-06 13:58:18 +01:00
Simon Larsen
b32b936bba feat: update singular and plural names for OnCallDutyPolicyEscalationRuleUser model 2025-06-06 13:57:26 +01:00
Simon Larsen
f36caf6242 feat: update singular and plural names for OnCallDutyPolicyEscalationRuleTeam model 2025-06-06 13:49:59 +01:00
Simon Larsen
ff8d19443b feat: update singular and plural names for ExceptionInstance model 2025-06-06 13:48:08 +01:00
Simon Larsen
19a811f935 feat: restore and enhance API Reference documentation 2025-06-06 13:33:22 +01:00
Simon Larsen
535848ba78 Merge branch 'master' of github.com:OneUptime/oneuptime 2025-06-06 13:26:48 +01:00
Simon Larsen
06ab514211 feat: refactor schema generation methods in BaseSchema for improved reusability and clarity 2025-06-06 13:26:45 +01:00
Simon Larsen
ad78f9de22 Merge pull request #1936 from OneUptime/add-api-reference-link
feat: Add API Reference link to documentation
2025-06-06 13:02:29 +01:00
google-labs-jules[bot]
916954e71f feat: Add API Reference link to documentation
This commit introduces a new "API Reference" section in the documentation navigation.

- A new navigation group "API Reference" is added to `Docs/Utils/Nav.ts`.
- This group links to a new page `/docs/api-reference/api-reference`.
- The new page `Docs/Content/api-reference/API Reference.md` is created and contains a link to the main OneUptime API Reference at `/reference`.
2025-06-06 11:50:52 +00:00
Simon Larsen
4c49023cb6 feat: add Analytics model schemas and API generation methods to OpenAPIUtil 2025-06-06 12:50:18 +01:00
Simon Larsen
d589afafbd feat: update singular and plural names in ServiceCatalog and ServiceCopilotCodeRepository models for clarity 2025-06-06 12:05:53 +01:00
Simon Larsen
c1b1789307 feat: update model endpoint descriptions in OpenAPI specification 2025-06-06 11:51:02 +01:00
Simon Larsen
dd3220f3d6 feat: add tags for model endpoints in OpenAPI specification 2025-06-06 11:48:19 +01:00
Simon Larsen
57709f71a6 feat: update permission check logic in OpenAPIUtil to ensure valid permissions are present 2025-06-06 11:36:21 +01:00
Simon Larsen
2f4c513a85 feat: add slackWorkspaceName field to StatusPageSubscriber model and update migration 2025-06-05 16:10:49 +01:00
Simon Larsen
8faf75d4c8 feat: add slackWorkspaceName field to subscription form and update field type to text 2025-06-05 16:10:25 +01:00
Simon Larsen
54948c08c2 feat: add Slack Workspace Name field to subscription form with validation 2025-06-05 15:42:13 +01:00
Simon Larsen
7e1b3ce8d8 feat: update submit button text to 'Send Management Link' in Email, Slack, and SMS subscription pages 2025-06-05 15:38:45 +01:00
Simon Larsen
65f43448fe feat: update Slack subscriber query to use slackWorkspaceName instead of slackIncomingWebhookUrl 2025-06-05 15:35:35 +01:00
Simon Larsen
0358e21958 feat: update permission handling and remove unused Slack fields in subscriber model 2025-06-05 15:28:51 +01:00
Simon Larsen
811f4338b0 feat: add migration to include slackWorkspaceName in StatusPageSubscriber table 2025-06-05 15:24:12 +01:00
Simon Larsen
fdfd66e21e feat: add Slack workspace name field for subscriber validation and update related logic 2025-06-05 15:22:04 +01:00
Simon Larsen
d5f8df322e feat: improve Slack subscriber handling and validation across services 2025-06-05 15:04:19 +01:00
Simon Larsen
340d44c389 feat: streamline Slack notification messages by removing redundant titles 2025-06-05 15:03:10 +01:00
Simon Larsen
4532f5bc04 feat: enhance Slack notification message for new subscribers 2025-06-05 14:48:41 +01:00
Simon Larsen
2eebac054e feat: add Slack webhook validation and notification for new subscribers 2025-06-05 14:44:07 +01:00
Simon Larsen
42e9f42350 feat: update Slack subscriber handling to use incoming webhook URL 2025-06-05 14:35:08 +01:00
Simon Larsen
75814cdec0 feat: enforce Slack subscriber requirement and update related components 2025-06-04 21:45:40 +01:00
Simon Larsen
7a2b0a159d feat: enable Slack subscribers in StatusPage API and update subscription logic 2025-06-04 21:32:10 +01:00
Simon Larsen
12d266aabf feat: enable Slack subscribers in StatusPage settings and update subscription logic 2025-06-04 21:15:30 +01:00
Simon Larsen
5ba9556584 feat: add migration for enabling Slack subscribers and webhook URL in StatusPage 2025-06-04 20:37:53 +01:00
Simon Larsen
b659d0ab4a refactor: remove SlackWebhookTester component from StatusPageSlackSubscribers 2025-06-04 20:17:14 +01:00
Simon Larsen
e725ab4b7b fix: add type annotations for markdown messages and remove unused props in Slack subscription components 2025-06-04 20:14:36 +01:00
Simon Larsen
a4bc78439d Merge branch 'master' into slack-subscribers 2025-06-04 19:53:34 +01:00
Simon Larsen
7f59e62b5d Refactor Slack Markdown Conversion and Update Slack Notification Logic
- Renamed `convertMarkdownToSlack` to `convertMarkdownToSlackRichText` for clarity in Slack utility.
- Updated various components and worker jobs to utilize the new Slack markdown conversion method.
- Removed unused test webhook functionality from the Slack subscribers page.
- Improved formatting of Slack messages in notification jobs to enhance readability.
- Cleaned up code by removing unnecessary fragments and ensuring consistent formatting.
- Enhanced error handling and user feedback for Slack webhook testing.
2025-06-04 19:52:59 +01:00
Simon Larsen
9d7f2aebf6 fix: update status page ID reference in test notification message 2025-06-04 19:26:27 +01:00
Simon Larsen
ba08edc61f feat: Implement Slack webhook testing functionality and enhance Slack notifications 2025-06-04 14:39:33 +00:00
Simon Larsen
f538b89553 fix: correct typo in title for scheduled event message 2025-06-04 15:34:51 +01:00
Simon Larsen
9779f12806 chore: update ModelSchema class for improved readability and maintainability 2025-06-04 15:34:08 +01:00
Simon Larsen
1b4758070b refactor: improve type annotations and formatting in OpenAPI and ModelSchema classes 2025-06-04 15:30:42 +01:00
Simon Larsen
f15cff0064 feat: add permissions formatting and description for OpenAPI schema in ModelSchema 2025-06-04 14:52:53 +01:00
Simon Larsen
dcadbadf25 feat: Add Slack subscription feature for status page notifications
- Implemented Slack notifications for scheduled maintenance events, incidents, and announcements.
- Added UI components for managing Slack subscribers in the dashboard.
- Introduced new settings to enable Slack subscribers in status page settings.
- Created forms for subscribing and managing Slack subscriptions.
- Updated API routes and utility functions to handle Slack webhook URLs.
- Enhanced existing notification jobs to include Slack messaging capabilities.
2025-06-04 13:44:49 +00:00
Simon Larsen
bb51de9d10 feat: implement permission checks for API generation in OpenAPIUtil 2025-06-04 14:37:54 +01:00
Simon Larsen
4c6f51f3bc feat: add groupBy schema support in OpenAPI and ModelSchema classes 2025-06-04 12:58:10 +01:00
Simon Larsen
0ba3db57d6 refactor: enhance type annotations and structure in ModelSchema class 2025-06-03 23:45:37 +01:00
Simon Larsen
ed7861e092 fix: add type annotation for schemaMethod variable in ModelSchema class 2025-06-03 23:35:08 +01:00
Simon Larsen
2616b77a59 feat: implement model schema registration with permission checks for create, read, update, and delete operations 2025-06-03 23:19:30 +01:00
Simon Larsen
4b3636a6a6 feat: register query, select, and sort schemas in OpenAPI specification 2025-06-03 23:04:46 +01:00
Simon Larsen
1a650ab624 feat: enhance query and select schemas with operator validation and OpenAPI documentation 2025-06-03 22:18:02 +01:00
Simon Larsen
6ddae4f0ef refactor: improve type annotations and formatting in alert, incident, and scheduled maintenance services 2025-06-03 20:50:13 +01:00
Simon Larsen
524c5311ff feat: add consistency jobs for incidents and scheduled maintenance 2025-06-03 20:45:34 +01:00
Simon Larsen
649c43d896 feat: add daily cron job to refresh incident current status for all projects 2025-06-03 20:43:38 +01:00
Simon Larsen
aa7110ca12 feat: implement cron jobs to refresh alert and scheduled maintenance states daily 2025-06-03 20:41:38 +01:00
Simon Larsen
6fb4c663d4 fix: enhance next event scheduling logic to handle future dates correctly 2025-06-03 15:44:00 +01:00
Simon Larsen
ee40cedd21 fix: format dashboard link retrieval for improved readability 2025-06-03 11:33:12 +01:00
Simon Larsen
e28bdeb129 fix: remove unsubscribe link from ProjectSubscriptionOverdue template for clarity 2025-06-03 09:02:21 +01:00
Simon Larsen
cd86aa52ec fix: await dashboard link retrieval in email vars for accurate project link 2025-06-03 09:02:09 +01:00
Simon Larsen
293c9e9317 fix: remove unnecessary blank lines in OpenAPIUtil methods for improved readability 2025-06-02 23:03:29 +01:00
Simon Larsen
36be5b7eba fix: update API path summaries and descriptions to use singular model names for clarity 2025-06-02 22:57:44 +01:00
Simon Larsen
9b8a36d2a4 fix: update default API headers to remove Content-Type and provide a specific example for APIKey 2025-06-02 22:50:21 +01:00
Simon Larsen
4814532e23 fix: update schema references in OpenAPIUtil for consistency in input and update specifications 2025-06-02 22:46:20 +01:00
Simon Larsen
224c95832e fix: format execution time calculation for consistency in CustomCodeMonitor and SyntheticMonitor 2025-06-02 22:32:52 +01:00
Simon Larsen
75a2439c1e fix: optimize response time calculation by using Math.ceil for consistency across monitors 2025-06-02 22:29:19 +01:00
Simon Larsen
e74bfc295b feat: add default API headers for GET, UPDATE, and DELETE specifications in OpenAPIUtil 2025-06-02 22:19:20 +01:00
Simon Larsen
e59e1b7718 fix: change HTTP method from GET to POST for list and count endpoints in OpenAPIUtil; update array item schema in ModelSchema 2025-06-02 22:04:46 +01:00
Simon Larsen
c44f3d7d83 fix: update column titles in DatabaseBaseModel for clarity and improve conditional logic in ModelSchema 2025-06-02 21:55:51 +01:00
Simon Larsen
1b9677d8da feat: add OpenAPI examples for various column types in ModelSchema 2025-06-02 21:47:18 +01:00
Simon Larsen
c0b19d4e57 fix: correct formatting in CriteriaAlertSchema and update import statement in MonitorCriteriaInstance 2025-06-02 20:52:41 +01:00
Simon Larsen
612f4260c2 feat: enhance CriteriaAlert, CriteriaFilter, and CriteriaIncident with ZodSchema typing and improve imports in MonitorCriteriaInstance 2025-06-02 20:49:50 +01:00
Simon Larsen
1ccc3765e8 refactor: standardize import statements and format example objects in Monitor and Database classes 2025-06-02 17:49:31 +01:00
Simon Larsen
342c6d7912 feat: implement Zod schema validation for CriteriaAlert, CriteriaFilter, CriteriaIncident, and update MonitorCriteriaInstance and MonitorSteps to use schemas 2025-06-02 17:45:29 +01:00
Simon Larsen
6db6857dbe feat: add Zod schema validation for Domain, Email, IP, MonitorCriteria, MonitorCriteriaInstance, MonitorStep, MonitorSteps, Name, ObjectID, Phone, Port, and Version classes 2025-06-02 17:33:33 +01:00
Simon Larsen
7709016328 feat: add Color type handling in ModelSchema and remove unused getSchemaForDatabaseProperty method 2025-06-02 17:24:20 +01:00
Simon Larsen
8fd89ebd4f Merge branch 'master' of github.com:OneUptime/oneuptime 2025-06-02 17:16:24 +01:00
Simon Larsen
394f5255cf feat: implement Zod schema validation for Color and DatabaseProperty classes
fix: update ApiMonitor and WebsiteMonitor to correctly set isOnline status to false on timeout
2025-06-02 17:16:21 +01:00
Simon Larsen
2afdda0869 Merge pull request #1928 from zzukin/zzukin-patch-conatiner
Fix typo in HelmChart Readme
2025-06-02 17:04:28 +01:00
Simon Larsen
511317886f fix: refactor getProjectLinkInDashboard method and update cron job for sending overdue subscription emails 2025-06-02 14:45:51 +01:00
Simon Larsen
14466f4723 feat: add email template and cron job for notifying project owners of overdue subscriptions 2025-06-02 14:41:45 +01:00
Simon Larsen
f5d326c086 fix: simplify isSubscriptionOverdue method and improve formatting in MasterPage component 2025-06-02 14:18:26 +01:00
Simon Larsen
acf11e25fe fix: enhance subscription status checks to include overdue and inactive states 2025-06-02 14:16:34 +01:00
Simon Larsen
20cf50a497 fix: add 'Paused' status to SubscriptionStatus enum and update active status check 2025-06-02 14:05:01 +01:00
Nico Aymet (nikuzz)
602d198685 Fix typo in HelmChart Readme
Change:
  conatinerSecurityContext
with:
  containerSecurityContext
2025-06-02 10:25:23 +01:00
Simon Larsen
b18c2d4964 fix: clean up OpenAPI spec generation code and improve logging for model schema creation 2025-06-01 22:44:13 +01:00
Simon Larsen
bd5ce9029a fix: update OpenAPI spec title and description for clarity 2025-06-01 22:33:34 +01:00
Simon Larsen
84261786f9 fix: streamline OpenAPI spec generation by consolidating endpoint registration and improving model handling 2025-06-01 22:31:45 +01:00
Simon Larsen
cfdc789fae fix: update API spec summaries and descriptions to use model table names 2025-06-01 21:15:56 +01:00
Simon Larsen
08d4eaab4e fix: enhance model schema generation with OpenAPI type annotations and examples 2025-06-01 20:57:22 +01:00
Simon Larsen
324da96797 feat: add OpenAPI spec generation and enhance model schema logging 2025-06-01 20:45:39 +01:00
Simon Larsen
dc7895501f fix: improve OpenAPI spec generation with caching and enhanced logging 2025-06-01 20:22:52 +01:00
Simon Larsen
4a6a09169a fix: enhance OpenAPI documentation generation with model validation and logging 2025-06-01 14:24:37 +01:00
Simon Larsen
92ab2a3467 fix: update Suspense fallback to use PageLoader for improved loading experience 2025-05-30 10:20:32 +01:00
Simon Larsen
6f99d71d7f fix: enhance error handling in domain migration and log errors using Logger 2025-05-29 15:15:56 +01:00
Simon Larsen
14a70846d0 fix: remove unnecessary await from UserUtil.logout in Logout component 2025-05-29 14:49:41 +01:00
Simon Larsen
61f3fae19d fix: refactor logout method to handle API errors and log them using Logger 2025-05-29 14:45:51 +01:00
Simon Larsen
7f9bd8e150 fix: correct NotAuthorizedException code and update forbidden route handling to return a valid Route 2025-05-29 13:52:49 +01:00
Simon Larsen
6a16301b3f fix: update forbidden route handling to prevent navigation errors and return null 2025-05-29 13:49:00 +01:00
Simon Larsen
17f23b788d feat: add BILLING_ENABLED environment variable to probe configuration and update online check logic 2025-05-29 13:08:08 +01:00
Simon Larsen
3f8370468e feat: enhance timeout handling by checking for executing logs older than 3 hours in OnCallDutyPolicy and UserOnCallLog 2025-05-29 12:54:20 +01:00
Simon Larsen
b151753506 feat: trim whitespace from monitor creation details and enhance comparison criteria with equalTo checks 2025-05-29 12:15:11 +01:00
Simon Larsen
2f9189a181 feat: implement LowercaseDomains migration to ensure all domain entries are stored in lowercase 2025-05-29 12:06:54 +01:00
Simon Larsen
32c2d7ea26 feat: refactor domain handling by renaming Domain import and enhancing CNAME record retrieval with error handling 2025-05-29 11:40:20 +01:00
Simon Larsen
72d0a29e89 feat: improve domain input handling by ensuring it is trimmed and converted to lowercase in onBeforeCreate method 2025-05-29 11:35:40 +01:00
Simon Larsen
14e4949c1a feat: normalize domain and subdomain inputs by trimming and converting to lowercase in DomainService and StatusPageDomainService 2025-05-29 10:58:43 +01:00
Simon Larsen
5d8d24dd58 feat: add SubscriptionStatusUtil methods for improved subscription state handling and update BillingInvoiceService to utilize them 2025-05-29 09:18:19 +01:00
Simon Larsen
b6f4a533e6 refactor: clean up code formatting and improve readability in StatusPageService, IP, and MasterPage components 2025-05-28 21:52:25 +01:00
Simon Larsen
5972697cdf feat: enhance IP whitelist validation to support multiple IPs and improve error logging 2025-05-28 21:51:02 +01:00
Simon Larsen
23ec8de39a feat: add forbidden route handling in DashboardMasterPage and update App component routing 2025-05-28 21:38:06 +01:00
Simon Larsen
2d74d37346 feat: enhance lazy loading of page components for improved performance and readability 2025-05-28 21:31:09 +01:00
Simon Larsen
ed55830e2d feat: refactor App component to lazy load page components and enhance routing structure 2025-05-28 20:58:51 +01:00
Simon Larsen
52923dadc1 feat: create ForbiddenPage component to display access restriction message 2025-05-28 20:57:03 +01:00
Simon Larsen
8f3b17c20f feat: add forbidden page and update routing for forbidden access 2025-05-28 20:55:29 +01:00
Simon Larsen
501c9b655c feat: add handling for forbidden access and implement getForbiddenRoute method in API class 2025-05-28 20:51:15 +01:00
Simon Larsen
3dcdf56c7c fix: correct syntax by adding missing commas in StatusPageService methods 2025-05-28 20:44:24 +01:00
Simon Larsen
474998a3bf feat: implement IP whitelist functionality for status pages and enhance access control 2025-05-28 20:41:03 +01:00
Simon Larsen
65fc159560 feat: add migration to add ipWhitelist column to StatusPage table 2025-05-28 19:39:13 +01:00
Simon Larsen
bba09b8b21 refactor: clean up whitespace and improve formatting in SerializableObject, API, Cookie, and ModelSchema 2025-05-28 19:23:34 +01:00
Simon Larsen
9cde6febfe feat: implement clearAllCookies method and integrate it into logout process 2025-05-28 19:09:52 +01:00
Simon Larsen
279e15276d fix: change error logging from trace to error level for database connection failure 2025-05-28 18:59:01 +01:00
Simon Larsen
6799b55041 refactor: update error logging to use trace level and improve code formatting in ModelSchema 2025-05-28 18:42:31 +01:00
Simon Larsen
7656c67f58 fix: add type annotation for octet in IPv4 validation 2025-05-28 18:28:07 +01:00
Simon Larsen
bec377edea refactor: improve code formatting and consistency in StatusPageService and DNSUtil 2025-05-28 18:04:48 +01:00
Simon Larsen
66fc10221f refactor: improve code formatting and whitespace consistency across multiple files 2025-05-28 17:53:43 +01:00
Simon Larsen
0c7c0b1179 feat: update ipWhitelist type to string and implement IP whitelist validation in StatusPageService 2025-05-28 17:46:53 +01:00
Simon Larsen
af37030dd3 feat: add IP Whitelist section to Authentication Settings page 2025-05-28 17:35:02 +01:00
Simon Larsen
5eda80361e feat: add IP Whitelist column with access control to StatusPage model 2025-05-28 17:32:07 +01:00
Simon Larsen
daaeeb4957 feat: add CNAME record validation in StatusPageDomainService and implement DNSUtil for CNAME resolution 2025-05-28 17:26:37 +01:00
Simon Larsen
e69b700dad refactor: clean up whitespace and formatting in multiple files 2025-05-28 16:18:31 +01:00
Simon Larsen
943075e562 feat: add getSelectModelSchema method for nested property selection 2025-05-27 21:34:37 +01:00
Simon Larsen
fc3daeaebb feat: add methods for query and sort model schemas in ModelSchema 2025-05-27 21:30:35 +01:00
Simon Larsen
8e788d0acc refactor: move ConfigLogLevel to a separate file and update imports 2025-05-27 20:46:30 +01:00
Simon Larsen
ae7d3fe247 Merge pull request #1917 from OneUptime/fix/baseapi-test-typeerror
Fix(tests): Correct EnvironmentConfig mock in BaseAPI.test.ts
2025-05-27 20:43:29 +01:00
Simon Larsen
b690415764 fix: update method signatures in OpenAPIUtil for consistent return types 2025-05-27 20:11:20 +01:00
Simon Larsen
7134709154 refactor: clean up OpenAPI path registration for improved readability 2025-05-27 19:18:24 +01:00
Simon Larsen
194695d1e0 refactor: streamline zod type determination in ModelSchema for improved readability 2025-05-27 16:56:37 +01:00
Simon Larsen
a539bd3c92 feat: refactor DatabaseBaseModel and ModelSchema for improved schema generation and validation 2025-05-27 16:43:56 +01:00
Simon Larsen
d5fd2ec1bf fix: correct formatting and add missing commas in DatabaseBaseModel and ModelSchema 2025-05-27 15:22:20 +01:00
Simon Larsen
ef808fdf10 feat: integrate ModelSchemaUtil for enhanced schema management in DatabaseBaseModel 2025-05-27 15:10:05 +01:00
Simon Larsen
4d4d7d6d26 feat: add Zod schema generation to DatabaseBaseModel for enhanced validation 2025-05-27 14:50:11 +01:00
Simon Larsen
4dc589f9ce feat: add zod and zod-to-openapi dependencies to enhance OpenAPI support 2025-05-27 14:33:05 +01:00
Simon Larsen
5fe97c422f feat: add OpenAPI class and integrate OpenAPI router into BaseAPIFeatureSet 2025-05-27 13:50:33 +01:00
Simon Larsen
7085a4d4e0 feat: implement MCP service to add tools and model APIs to server 2025-05-27 13:24:39 +01:00
google-labs-jules[bot]
4135b3ba0f Fix(tests): Correct EnvironmentConfig mock in BaseAPI.test.ts
I've updated the Jest mock for 'Common/Server/EnvironmentConfig' in 'Common/Tests/Server/API/BaseAPI.test.ts' to include 'LogLevel' and 'ConfigLogLevel'. This resolves a TypeError (Cannot read properties of undefined (reading 'INFO')) that occurred when the logger was invoked during test execution.

The error was caused by an incomplete mock that did not provide the logging configuration, leading to a crash in 'Logger.getLogLevel()'.

Additionally, I've added 'DisableTelemetry: true' to the mock to prevent unnecessary telemetry initialization during these specific API tests.
2025-05-27 12:22:31 +00:00
Simon Larsen
3b71adc009 fix(deps): update @oneuptime/common dependency to version 7.0.4263 2025-05-27 12:42:43 +01:00
Simon Larsen
8bff664f2f fix(deps): update @oneuptime/common dependency to version 7.0.4263 2025-05-27 12:22:18 +01:00
Simon Larsen
0563c492a6 Merge branch 'master' of github.com:OneUptime/oneuptime 2025-05-27 12:17:19 +01:00
Simon Larsen
500fb5842e refactor: update main function return type to Promise<void> 2025-05-27 12:16:27 +01:00
Simon Larsen
b82f51bea4 refactor: add type annotations for main function and transport variable in MCP server 2025-05-27 12:11:33 +01:00
Simon Larsen
5e81f4be35 Merge pull request #1916 from OneUptime/fix/statement-generator-test
Fix(tests): Update expected SQL in StatementGenerator test
2025-05-27 12:09:28 +01:00
google-labs-jules[bot]
77fe7ce1ce Fix(tests): Update expected SQL in StatementGenerator test
The expected SQL statement in the `toTableCreateStatement` test was outdated and did not include the `PARTITION BY` clause, which is now correctly generated by the StatementGenerator.

This commit updates the expected statement to match the actual output, resolving the test failure.
2025-05-27 11:08:39 +00:00
Simon Larsen
bd938736d6 feat: add StdioServerTransport and logger integration to MCP server 2025-05-27 12:04:45 +01:00
Simon Larsen
4d4ddd9bfc refactor: Clean up imports and improve formatting in configuration files 2025-05-27 12:02:11 +01:00
Simon Larsen
93123f6042 Refactor: Move BaseDatabase utilities to Common/Types and update imports
- Moved GroupBy, ListResult, Select, and RequestOptions from Common/UI/Utils/BaseDatabase to Common/Types/BaseDatabase.
- Updated all relevant imports across the codebase to reflect the new paths.
- Removed obsolete BaseDatabase utility files from the UI components.
- Ensured consistent usage of the new types in ModelDetail, ModelList, ModelTable, and Dashboard components.
2025-05-27 11:47:53 +01:00
Simon Larsen
856cff3e85 feat: initialize MCP server with TypeScript configuration and package setup
- Added package.json for MCP server with necessary scripts, dependencies, and configurations.
- Created tsconfig.json with comprehensive TypeScript compiler options for strict type checking and module resolution.
2025-05-27 11:12:41 +01:00
Simon Larsen
47fa401a67 refactor: Improve formatting for better readability in OfflineIndicator component 2025-05-26 14:05:51 +01:00
Simon Larsen
c536e1e642 refactor: Improve structure and readability of MasterPage and OfflineIndicator components 2025-05-26 14:03:06 +01:00
Simon Larsen
c06d4f0b63 feat: Add OfflineIndicator component to handle online/offline status and integrate it into MasterPage 2025-05-26 14:00:08 +01:00
Simon Larsen
d8388666ef docs: Update documentation to include available modules for custom scripts in monitors 2025-05-26 12:51:23 +01:00
Simon Larsen
511b4c9045 refactor: Change field type from Text to LongText for improved description handling across multiple components 2025-05-24 11:26:44 +01:00
Simon Larsen
140f12c0fb refactor: Clean up formatting and improve readability in LongTextViewer and WorkflowElement components 2025-05-23 21:58:13 +01:00
Simon Larsen
a00d72b771 refactor: Update LongTextViewer to use Button component and adjust character limit for truncation 2025-05-23 21:54:35 +01:00
Simon Larsen
1789be519e refactor: Enhance Probe and WorkflowElement components with new decorators and project ID handling 2025-05-23 20:58:50 +01:00
Simon Larsen
8e3f23d885 refactor: Update field type to LongText for better description handling in Workflows component 2025-05-23 20:48:28 +01:00
Simon Larsen
335b6ed15f refactor: Integrate WorkflowElement for rendering workflow items in Workflows component 2025-05-23 20:37:37 +01:00
Simon Larsen
95b53ca4ce refactor: Improve readability of lazy-loaded component declarations in App.tsx 2025-05-23 12:03:16 +01:00
Simon Larsen
3a80fcca73 refactor: Implement lazy loading for route components with a custom fallback loader 2025-05-23 12:01:58 +01:00
Simon Larsen
6d5e186505 refactor: Remove unused description fields from incident and scheduled maintenance notification templates 2025-05-23 10:40:56 +01:00
Simon Larsen
13450d32af refactor: Replace loading fallback with custom PageLoader component in Suspense 2025-05-22 21:27:13 +01:00
Simon Larsen
e77ea73ffc refactor: Implement lazy loading for route components to improve performance 2025-05-22 21:24:27 +01:00
Simon Larsen
dcfadf9051 Merge branch 'master' of github.com:OneUptime/oneuptime 2025-05-22 20:55:38 +01:00
Simon Larsen
f9869105b6 refactor: Update API import paths for consistency across utility files 2025-05-22 20:55:36 +01:00
Simon Larsen
71881bb822 Merge pull request #1912 from zzukin/master
Missing "$" in Helm Charts
2025-05-22 13:15:20 +01:00
Nico Aymet
a10c914757 Missing "$" in get autoscaling.enabled = true from Values.yaml in Helm Charts 2025-05-22 12:37:33 +01:00
Simon Larsen
f4390dd1da refactor: Add hidden class to copyright div for responsive design 2025-05-22 11:32:00 +01:00
Simon Larsen
f0e4e4147c refactor: Remove unnecessary whitespace from HeaderAlert component 2025-05-22 11:28:40 +01:00
Simon Larsen
296e664da2 refactor: Remove unused lodash import from NotificationMiddleware test 2025-05-22 10:58:03 +01:00
Simon Larsen
152517b85a refactor: Remove optional chaining from JSONFunctions.flattenObject call 2025-05-22 10:56:55 +01:00
Simon Larsen
599d4fff17 refactor: Import lodash and update mock implementation for flattenObject 2025-05-22 10:56:20 +01:00
Simon Larsen
a1a3dee380 refactor: Reformat import statements for consistency across multiple files 2025-05-22 10:27:25 +01:00
Simon Larsen
fbde9f9052 Merge branch 'master' of github.com:OneUptime/oneuptime 2025-05-21 20:34:30 +01:00
Simon Larsen
9bec06672c refactor: Update import paths for consistency across various components 2025-05-21 20:33:59 +01:00
Simon Larsen
19926d4260 refactor: Update import paths for consistency across various components 2025-05-21 20:31:32 +01:00
Simon Larsen
09a8d73867 refactor: Update import paths to use relative paths for consistency across various components 2025-05-21 20:26:23 +01:00
Simon Larsen
4f798ea570 Merge pull request #1910 from zzukin/master
Exclude parameter "replicas" in Deployments, if autoscaling.enabled = true
2025-05-21 20:11:58 +01:00
Simon Larsen
4f4a171ba1 Merge pull request #1911 from zzukin/otel-collector-non-root
Fix permission issues if otel-collector runs as non root
2025-05-21 20:09:51 +01:00
Nico Aymet (nikuzz)
fed1478bcb Update Dockerfile.tpl
When otel-collector runs with runAsNonRoot: true and a specific runAsUser UID, gomplate can't write to /etc. Change the output path to /tmp to avoid permission issues
2025-05-21 18:15:22 +01:00
Nico Aymet (nikuzz)
707b43c399 Update workflow.yaml
Exclude parameter "replicas" in Deployments, if autoscaling.enabled = true
2025-05-21 17:47:55 +01:00
Nico Aymet (nikuzz)
974cf16cf1 Update worker.yaml
Exclude parameter "replicas" in Deployments, if autoscaling.enabled = true
2025-05-21 17:47:35 +01:00
Nico Aymet (nikuzz)
ac014395a7 Update server-monitor-ingest.yaml
Exclude parameter "replicas" in Deployments, if autoscaling.enabled = true
2025-05-21 17:46:55 +01:00
Nico Aymet (nikuzz)
8bdbae8f09 Update probe.yaml
Exclude parameter "replicas" in Deployments, if autoscaling.enabled = true
2025-05-21 17:45:58 +01:00
Nico Aymet (nikuzz)
13545732ea Update probe-ingest.yaml
Exclude parameter "replicas" in Deployments, if autoscaling.enabled = true
2025-05-21 17:39:59 +01:00
Nico Aymet (nikuzz)
5bd6f59f71 Update otel-collector.yaml
Exclude parameter "replicas" in Deployments, if autoscaling.enabled = true
2025-05-21 17:39:39 +01:00
Nico Aymet (nikuzz)
1ca48f567d Update open-telemetry-ingest.yaml
Exclude parameter "replicas" in Deployments, if autoscaling.enabled = true
2025-05-21 17:39:04 +01:00
Nico Aymet (nikuzz)
84cc55d22c Update nginx.yaml
Exclude parameter "replicas" in Deployments, if autoscaling.enabled = true
2025-05-21 17:38:38 +01:00
Nico Aymet (nikuzz)
dc73166fec Update isolated-vm.yaml
Exclude parameter "replicas" in Deployments, if autoscaling.enabled = true
2025-05-21 17:38:05 +01:00
Nico Aymet (nikuzz)
9d45ee6d28 Update incoming-request-ingest.yaml
Exclude parameter "replicas" in Deployments, if autoscaling.enabled = true
2025-05-21 17:37:33 +01:00
Nico Aymet (nikuzz)
4dfea390e2 Update home.yaml
Exclude parameter "replicas" in Deployments, if autoscaling.enabled = true
2025-05-21 17:37:05 +01:00
Nico Aymet (nikuzz)
f9a424ec29 Update fluent-ingest.yaml
Exclude parameter "replicas" in Deployments, if autoscaling.enabled = true
2025-05-21 17:36:19 +01:00
Nico Aymet (nikuzz)
be1dc35d29 Update docs.yaml
Exclude parameter "replicas" in Deployments, if autoscaling.enabled = true
2025-05-21 17:34:36 +01:00
Nico Aymet (nikuzz)
1d8d84c6a5 Update app.yaml
Exclude parameter "replicas" in Deployments, if autoscaling.enabled = true
2025-05-21 17:33:49 +01:00
Nico Aymet (nikuzz)
bb571f8aae Update api-reference.yaml
Exclude parameter "replicas" in Deployments, if autoscaling.enabled = true
2025-05-21 17:33:12 +01:00
Nico Aymet (nikuzz)
56fcb3a37f Update _helpers.tpl
Exclude parameter "replicas" in Deployments, if autoscaling.enabled = true
2025-05-21 17:28:39 +01:00
Simon Larsen
a2baeb1a20 refactor: Update import paths to use absolute paths for consistency across various components 2025-05-21 17:03:48 +01:00
Simon Larsen
168224363c refactor: Update import paths for consistency across various components 2025-05-21 16:56:04 +01:00
Simon Larsen
22e92f4ed5 refactor: Update import paths for consistency across various components 2025-05-21 16:53:07 +01:00
Simon Larsen
81a7dcbab6 refactor: Update import paths for consistency across various components 2025-05-21 16:46:53 +01:00
Simon Larsen
6872fa627e refactor: Update import paths to use relative paths for consistency across various components 2025-05-21 16:43:01 +01:00
Simon Larsen
99c545e8b0 refactor: Update import paths for consistency across AnalyticsDatabase and Workflow components 2025-05-21 16:36:51 +01:00
Simon Larsen
11bad57109 refactor: Correct import path for AnalyticsBaseModel in Query.ts for consistency 2025-05-21 16:28:31 +01:00
Simon Larsen
9d9a8eeee2 Refactor import paths for Database and Workflow components
- Updated import statements in various files to use relative paths for better modularity and maintainability.
- Adjusted imports in Database types including DeleteBy, FindBy, UpdateBy, and others to reflect the new directory structure.
- Modified imports in Workflow components such as Email, JavaScript, Log, Manual, Schedule, and Webhook to ensure consistency across the codebase.
2025-05-21 16:24:52 +01:00
Simon Larsen
714823514c Refactor import paths in test and UI component files for consistency
- Updated import statements in various test files to use relative paths instead of absolute paths.
- Adjusted import paths in UI components to ensure they correctly reference the Types and Models directories.
- Ensured all components and tests are aligned with the new directory structure for better maintainability.
2025-05-21 16:19:35 +01:00
Simon Larsen
49025da2b0 refactor: Update import paths to use relative paths for consistency across AnalyticsDatabase types 2025-05-21 15:14:37 +01:00
Simon Larsen
0488770151 refactor: Update import paths to use relative paths for consistency across DatabaseConfig, EnvironmentConfig, DataSourceOptions, and various AnalyticsDatabase types 2025-05-21 15:04:22 +01:00
Simon Larsen
f32b208cea refactor: Update import paths to use relative paths for consistency across the codebase 2025-05-21 14:51:30 +01:00
Simon Larsen
ebd14dd497 Refactor import paths in Workflow components to use relative paths from Types directory
- Updated import statements in ComponentSettingsModal, ComponentValuePickerModal, ComponentsModal, DocumentationViewer, RunForm, RunModal, Utils, VariableModal, Workflow, WorkflowStatus, Config, EntityFieldType, and various API utility files to reflect the new directory structure.
- Ensured all imports from "Common/Types" are now sourced from "../../../Types" to maintain consistency and improve module resolution.
2025-05-21 14:02:32 +01:00
Simon Larsen
54c526ffed Refactor import paths in utility files to use relative paths instead of absolute paths. This change enhances module resolution and maintains consistency across the codebase. Updated imports in Execute.ts, Express.ts, Greenlock.ts, JsonToCsv.ts, JsonWebToken.ts, LocalFile.ts, Logger.ts, various Monitor criteria files, Realtime.ts, Response.ts, StartServer.ts, Stream.ts, Telemetry.ts, TwoFactorAuth.ts, VMAPI.ts, VMRunner.ts, and Workspace files. 2025-05-21 13:55:49 +01:00
Simon Larsen
327367e7ca fix: Remove local file reference for Common module in package.json 2025-05-21 13:25:02 +01:00
Simon Larsen
eaaa75f261 feat: Add moduleNameMapper for Common module path resolution in Jest config 2025-05-21 13:23:49 +01:00
Simon Larsen
aa0365d2b2 Merge branch 'master' of github.com:OneUptime/oneuptime 2025-05-21 12:06:46 +01:00
Simon Larsen
b8529621ff fix: Correct variable names for scheduled maintenance event timing calculations 2025-05-21 12:06:43 +01:00
Simon Larsen
8e3325bfc8 Merge pull request #1905 from GunniBusch/patch-1
Fix undefined as domain name when saving custom SSL-Certs
2025-05-21 11:02:23 +01:00
Leon Adomaitis
b49d0e1d32 Fix undefined as domain name when saving custom SSL-Certs 2025-05-20 14:18:50 +02:00
Simon Larsen
cb545e445a feat: Add monitorId to MonitorTest model and related migrations 2025-05-19 18:46:25 +01:00
Simon Larsen
2d9f9d41d0 refactor: Remove unused TotalCPUTime function from cpu.go 2025-05-19 14:19:55 +01:00
Simon Larsen
42f39bf918 Merge pull request #1899 from OneUptime/fix-cpu-percent
feat: Replace CPU usage calculation with gopsutil's cpu.Percent for improved accuracy
2025-05-19 14:14:49 +01:00
Simon Larsen
66633eca2c feat: Add cron job to delete old on-call duty time logs daily 2025-05-19 12:00:46 +01:00
Simon Larsen
eb40da8de3 Merge branch 'release' of github.com:OneUptime/oneuptime into release 2025-05-19 11:50:23 +01:00
Simon Larsen
ea3c736770 feat: Add OnCallPolicyLogTable component to display user on-call time logs with date range filtering 2025-05-19 11:50:21 +01:00
Simon Larsen
6263a5e4eb refactor: Remove OnCallPolicyLogTable component and its associated logic 2025-05-19 11:48:44 +01:00
Simon Larsen
9e527462f3 Merge pull request #1900 from OneUptime/master
fix: Update date range queries in OnCallPolicyLogTable to use correct…
2025-05-19 11:36:31 +01:00
Simon Larsen
8dff2b7fcd fix: Update date range queries in OnCallPolicyLogTable to use correct comparison operators 2025-05-19 11:32:48 +01:00
Simon Larsen
9199a94f69 refactor: Remove unused startDate variable in OnCallPolicyLogTable component 2025-05-19 11:24:02 +01:00
Simon Larsen
903af990e1 feat: Replace CPU usage calculation with gopsutil's cpu.Percent for improved accuracy 2025-05-19 10:22:37 +00:00
Simon Larsen
d67b1ded2b Merge branch 'master' into release 2025-05-19 11:15:39 +01:00
Simon Larsen
fa087423fc feat: Implement OnCallPolicyLogTable component to display user on-call time logs 2025-05-19 11:10:11 +01:00
Simon Larsen
cc1595f3c5 fix: Adjust start date handling to respect selected date range in OnCallPolicyLogTable 2025-05-19 11:09:21 +01:00
Simon Larsen
167ce4f4ab feat: Enhance time log period handling by adjusting start date based on selected range 2025-05-19 10:48:51 +01:00
Simon Larsen
3a8105484b feat: Add error handling and use OneUptimeDate for starting time logs in StartOnCallUserTimeLog migration 2025-05-19 10:39:28 +01:00
Simon Larsen
3c8de25281 feat: Implement onBeforeDelete hook to end time logs for schedules and update TeamMemberService to end time logs for users 2025-05-19 10:22:47 +01:00
Simon Larsen
7a0e84c6a4 refactor: Improve code readability by formatting and simplifying type annotations in OnCallDutyTimeLogTable 2025-05-19 08:52:45 +01:00
Simon Larsen
aaa4f3c732 refactor: Clean up code formatting and improve type annotations in various files 2025-05-16 20:36:28 +01:00
Simon Larsen
9034b7fa4c feat: Add StartOnCallUserTimeLog migration to create time logs for users and teams 2025-05-16 20:28:11 +01:00
Simon Larsen
8596459c11 feat: Add method to format minutes as hours and minutes and update table column title in OnCallDutyTimeLogTable 2025-05-16 20:15:23 +01:00
Simon Larsen
1fdbf43c28 refactor: Remove unused import LessThanOrNull from OnCallDutyTimeLogTable component 2025-05-16 16:59:29 +01:00
Simon Larsen
b34002889b fix: Update OnCallDutyPolicyTimeLog to make 'Ends At' field optional and adjust time log service methods to include projectId 2025-05-16 16:36:45 +01:00
Simon Larsen
0a6e02576d feat: Enhance comparison classes with date handling in toString method and update side menu for user on call time 2025-05-16 15:20:19 +01:00
Simon Larsen
e78bcfb06b fix: Change comparison operator from <= to < in QueryHelper class 2025-05-16 14:21:19 +01:00
Simon Larsen
efbe3befa5 refactor: Update OnCallDutyTimeLogTable to use _id instead of id and clean up imports in OnCallDutyUserTimeLogs and SideMenu components 2025-05-16 14:10:50 +01:00
Simon Larsen
c2be798203 refactor: Improve code formatting and readability in OnCallDutyTimeLogTable component 2025-05-16 13:53:35 +01:00
Simon Larsen
0256283256 feat: Add User Time Logs page and integrate into routing and side menu 2025-05-16 13:51:31 +01:00
Simon Larsen
73920bf554 refactor: Improve code formatting and readability in OnCallPolicyLogTable component 2025-05-15 21:02:31 +01:00
Simon Larsen
f84bc8992c fix: Correct formatting in sorting function for improved readability 2025-05-15 20:58:59 +01:00
Simon Larsen
e57120f7e0 refactor: Clean up code formatting and improve readability across multiple components 2025-05-15 20:50:41 +01:00
Simon Larsen
233bc1b70d feat: Add LessThanOrNull and GreaterThanOrNull types with corresponding query helpers and examples 2025-05-15 20:10:53 +01:00
Simon Larsen
0bc9929949 feat: Add OnCallPolicyLogTable component to display user time logs with date range selection 2025-05-15 20:00:02 +01:00
Simon Larsen
70f9901233 feat: Enhance OnCallPolicyLogTable to load and process time logs with improved date handling 2025-05-15 19:59:53 +01:00
Simon Larsen
c06f587e7e feat: Refactor RangeStartAndEndDateTime interface and update related components for consistency 2025-05-15 19:41:10 +01:00
Simon Larsen
4b78ff4c32 feat: Refactor DashboardStartAndEndDate to RangeStartAndEndDateTime across multiple components 2025-05-15 19:24:09 +01:00
Simon Larsen
ae75c73747 feat: Refactor date range handling by replacing DashboardStartAndEndDate with RangeStartAndEndDateTime and updating related components 2025-05-15 19:14:42 +01:00
Simon Larsen
6a7b35b0e6 feat: Update component props to be optional and enhance handling of undefined values across multiple components 2025-05-15 18:58:59 +01:00
Simon Larsen
d660f18628 feat: Remove AllowAccessIfSubscriptionIsUnpaid decorator from multiple models and add EnableDocumentation to WorkspaceNotificationRule 2025-05-15 18:18:53 +01:00
Simon Larsen
82462ea763 Merge branch 'master' of github.com:OneUptime/oneuptime 2025-05-15 13:42:34 +01:00
Simon Larsen
76ab3a8cd6 feat: Enhance OnCallDutyPolicyTimeLogService with improved time log handling and formatting 2025-05-15 13:42:31 +01:00
Simon Larsen
74edfdd74c Merge pull request #1897 from zzukin/patch-1
Update Helm README.md
2025-05-15 13:30:39 +01:00
Simon Larsen
9a7cc8f4a0 feat: Add start and end time logging for users in on-call duty schedule 2025-05-15 13:18:19 +01:00
Simon Larsen
d54263f6c2 feat: Add start and end time log functionality for on-call duty users 2025-05-15 13:13:14 +01:00
Simon Larsen
3325035cfc refactor: Remove hard delete call for items older than 180 days in OnCallDutyPolicyTimeLogService constructor 2025-05-15 11:51:03 +01:00
Simon Larsen
d22199586a feat: Add hard delete functionality for items older than 180 days in OnCallDutyPolicyTimeLogService 2025-05-15 11:50:44 +01:00
Simon Larsen
f3f3979d16 refactor: Clean up whitespace and formatting in API and service index files 2025-05-15 11:38:48 +01:00
Simon Larsen
07eb2e5285 feat: Implement OnCallDutyPolicyTimeLog model, service, and migration 2025-05-15 11:33:30 +01:00
Simon Larsen
c5bd095f7c feat: Add On-Call Policy Schedule and Escalation Rule IDs to OnCallDutyPolicyTimeLog model 2025-05-15 11:26:25 +01:00
Simon Larsen
b8bcda0120 feat: Add ReadOnCallDutyPolicyTimeLog permission and create OnCallDutyPolicyTimeLog model 2025-05-15 11:16:10 +01:00
Nico Aymet (nikuzz)
5c1402fb79 Update README.md
Correwct typo in autoScaling, need to be autoscaling (not in camelCase)
2025-05-15 10:43:10 +01:00
Simon Larsen
abf8189421 refactor: Simplify spaceAroundClassName logic in DashboardNavbar component 2025-05-15 08:26:28 +01:00
Simon Larsen
8998137b91 fix: Correct formatting in debug and error logging statements in WebsiteMonitor 2025-05-14 19:21:29 +01:00
Simon Larsen
15c2a9b532 fix: Update responseBody type in ProbeWebsiteResponse and handle error response data in WebsiteMonitor 2025-05-14 19:15:35 +01:00
Simon Larsen
cc2c56d245 refactor: Rename IsTimeout to IsRequestTimeout for consistency across criteria filters 2025-05-14 15:15:10 +01:00
Simon Larsen
8a6a3c21df fix: Handle errors in WebsiteRequest and improve logging in WebsiteMonitor 2025-05-14 15:09:46 +01:00
Simon Larsen
b8c903308c feat: Add isTimeout property to monitor response interfaces and update related logic 2025-05-14 14:05:55 +01:00
Simon Larsen
b36ca6b0f9 feat: Add timeout criteria checks and update related interfaces for monitoring 2025-05-14 13:37:21 +01:00
Simon Larsen
e90510a091 feat: Add acknowledgment checks for incidents and alerts in UserOnCallLog execution 2025-05-14 13:08:11 +01:00
Simon Larsen
be130219c1 fix: Add status messages for completed on-call policy executions based on alert and incident resolutions 2025-05-14 12:59:53 +01:00
Simon Larsen
29508ac941 refactor: Simplify NavBar layout logic by dynamically adjusting class names based on page visibility 2025-05-14 12:34:33 +01:00
Simon Larsen
3fac2d8110 fix: Update Nginx version to 1.28.0-alpine and disable server tokens for security 2025-05-13 15:10:46 +01:00
Simon Larsen
2d99144bc6 fix: Update error handling in Overview component to prevent exceptions for missing incident and maintenance states 2025-05-08 18:00:41 +01:00
Simon Larsen
c7522236a6 refactor: Improve formatting and consistency in UserPreferences and BaseModelTable components 2025-05-08 15:02:36 +01:00
Simon Larsen
13354c7bde fix: Update partitionKey to use sipHash64(projectId) % 16 for consistency across analytics models 2025-05-08 14:03:52 +01:00
Simon Larsen
3abbe7bf4e Refactor preference keys from localPreferencesKey to userPreferencesKey across multiple settings pages to standardize user preference management. 2025-05-08 13:51:53 +01:00
Simon Larsen
bc6e921dca fix: Add checkedAt property to IncomingMonitorRequest and update its usage in request processing 2025-05-08 13:43:33 +01:00
Simon Larsen
790bd493bb fix: Enhance error handling and logging in IncomingRequestMonitor heartbeat processing 2025-05-08 13:29:24 +01:00
Simon Larsen
0e1207031c fix: Correct partition key formatting in table creation statement 2025-05-07 19:07:00 +01:00
Simon Larsen
63f7c13352 fix: Update partitionKey to use time-based formatting in multiple models 2025-05-07 18:28:59 +01:00
Simon Larsen
3bdcd41668 fix: Remove unnecessary whitespace in API error handling and monitor fetching logic 2025-05-07 16:08:40 +01:00
Simon Larsen
521f38ec3a fix: Remove unnecessary whitespace in Monitor API file 2025-05-07 11:34:37 +01:00
Simon Larsen
1e35b40c34 fix: Improve error handling message in API class 2025-05-07 10:39:08 +01:00
Simon Larsen
3a1f33d6aa fix: Clean up whitespace in BaseModelTable and Table components 2025-05-06 22:47:11 +01:00
Simon Larsen
6d0fe2e61f feat: Add localPreferencesKey to WorkflowLogs ModelTable for improved state management 2025-05-06 22:42:06 +01:00
Simon Larsen
50ae476c99 feat: Add localPreferencesKey to AnalyticsModelTable in OccurrenceTable, TraceTable, and MonitorLogs components 2025-05-06 20:12:38 +01:00
Simon Larsen
c07f38063f Add localPreferencesKey to various ModelTable components across the Dashboard
- Added localPreferencesKey to Scheduled Maintenance Owners, Public Notes, State Timeline, and Service Catalog pages for better user preferences management.
- Updated localPreferencesKey for API Keys, Alert Templates, Alert Severity, and other settings pages to enhance user experience.
- Implemented localPreferencesKey in Status Pages and User Settings for improved state retention.
- Enhanced Workflow pages by adding localPreferencesKey for better management of user settings.
2025-05-06 20:11:57 +01:00
Simon Larsen
ef34aaa0d0 fix: Remove unnecessary blank line in StartAndEndDate component 2025-05-06 14:47:56 +01:00
Simon Larsen
34f2e380ef fix: Update nodemon.json watch paths to use Common/UI instead of Common/Server 2025-05-06 14:40:03 +01:00
Simon Larsen
d37c44fb87 fix: Update StartAndEndDate component to handle undefined end/start dates gracefully 2025-05-06 14:21:22 +01:00
Simon Larsen
c488ba3805 feat: Update log modal and button titles for consistency and clarity 2025-05-06 14:03:26 +01:00
Simon Larsen
a2e1ea7233 feat: Add telemetry monitor check and refactor related components for improved logic 2025-05-06 13:52:32 +01:00
Simon Larsen
ea65376c2f feat: Update MonitorLogs component titles for clarity and consistency 2025-05-06 13:18:43 +01:00
Simon Larsen
d2f78dd9a5 fix: Refactor IncomingRequestMonitorView for improved readability and formatting 2025-05-06 13:18:24 +01:00
Simon Larsen
952caae4df feat: Update MonitorLogs to use SummaryInfo component and improve log handling 2025-05-06 12:53:12 +01:00
Simon Larsen
4e35c49b73 feat: Save last alive status in cache during probe status checks 2025-05-06 12:34:46 +01:00
Simon Larsen
1e3f64ba9e feat: Add logBody field selection to Monitor Logs component 2025-05-05 22:25:08 +01:00
Simon Larsen
196775065e feat: Add Monitor Logs functionality with routing and UI updates 2025-05-05 22:07:46 +01:00
Simon Larsen
c9baf999b9 feat: Implement MonitorProbes component with logging and probe management functionality 2025-05-05 21:27:26 +01:00
Simon Larsen
e822ed2600 feat: Add logging functionality to monitor resource processing 2025-05-05 21:21:03 +01:00
Simon Larsen
55ea197b59 fix: Add missing comma in AnalyticsModels and clean up whitespace in MonitorLog and DeleteMonitorLogOlderThan24Hours 2025-05-05 21:18:57 +01:00
Simon Larsen
962dea330f feat: Implement MonitorLog model with CRUD operations and access control 2025-05-05 21:01:31 +01:00
Simon Larsen
90bf0fb61d fix: Correct typo in "Dashboards & Reports" text 2025-05-05 18:27:47 +01:00
Simon Larsen
b1ebb1edab fix: Improve alert message formatting by adding spaces for better readability 2025-05-05 12:44:58 +01:00
Simon Larsen
194b5529bb fix: Update count statement to include alias for clarity in AnalyticsDatabaseService tests 2025-05-02 21:33:32 +01:00
Simon Larsen
b74bcdb617 fix: Add optional chaining to prevent potential runtime errors in CaptureSpan 2025-05-02 14:57:58 +01:00
Simon Larsen
25d37067a1 fix: Correct syntax errors and improve code consistency in IncidentService 2025-05-02 14:37:54 +01:00
Simon Larsen
7f25def2ae feat: Enhance Incident management by adding monitor selection and status change options 2025-05-02 14:28:59 +01:00
Simon Larsen
4aff144adb refactor: Clean up code formatting and remove unnecessary line breaks in various files 2025-05-01 23:35:05 +01:00
Simon Larsen
87d99430ef feat: Refactor Monitor imports and enhance MonitorView with API call for status refresh 2025-05-01 23:28:40 +01:00
Simon Larsen
ac66d8991d feat: Add MonitorAPI to handle monitor status refresh requests 2025-05-01 22:26:44 +01:00
Simon Larsen
763ed8d311 feat: Update MonitorService and related jobs to improve query handling and consistency checks 2025-05-01 22:21:03 +01:00
Simon Larsen
465cb3748a feat: Add KeepCurrentStateConsistent job to ensure monitor status consistency 2025-05-01 21:58:59 +01:00
Simon Larsen
03ab8768f9 feat: Implement caching for last alive status in ProbeService and update authorization middleware 2025-05-01 13:32:11 +01:00
Simon Larsen
7219706657 feat: Enhance select queries to include order and name for incident and scheduled maintenance states 2025-04-30 22:00:49 +01:00
Simon Larsen
9be95390ee fix: Add missing commas in method parameters and improve error messages in state transition checks 2025-04-30 21:51:50 +01:00
Simon Larsen
231544e6d7 feat: Implement order validation for incident and scheduled maintenance state transitions 2025-04-30 21:47:22 +01:00
Simon Larsen
2e8537f9fb feat: Add ordering for alertState in select query of AlertStateTimelineService 2025-04-30 21:40:06 +01:00
Simon Larsen
8109694d02 refactor: Remove unused Semaphore import from MonitorResource utility 2025-04-30 21:16:08 +01:00
Simon Larsen
7807aca545 fix: Restore semaphore locking mechanism in monitorResource method 2025-04-30 11:47:41 +01:00
Simon Larsen
c12da6cc2f fix: Reformat createdAt query for improved readability 2025-04-30 09:59:24 +01:00
Simon Larsen
6d48aa3c62 refactor: Replace QueryHelper with InBetween and LessThan for date queries 2025-04-30 09:54:09 +01:00
Simon Larsen
0eeeb805b1 fix: Reformat probe configuration for better readability 2025-04-29 18:41:33 +01:00
Simon Larsen
862985b784 fix: Correct resource key casing in probe.yaml 2025-04-29 18:00:01 +01:00
Simon Larsen
e331950aa0 fix: Remove unused EnableWorkflow decorator from MonitorProbe model 2025-04-29 15:33:10 +01:00
Simon Larsen
c948aa51ba feat: Include projectId in IncomingRequestMonitor queries and logging 2025-04-28 18:53:00 +01:00
Simon Larsen
9841b8d877 fix: Correct spacing in projectId check for server monitor 2025-04-28 18:51:56 +01:00
Simon Larsen
8af1103a60 feat: Add projectId to server monitor responses and telemetry functions 2025-04-28 18:50:15 +01:00
Simon Larsen
47a643d5de fix: Remove unnecessary whitespace in projectId declaration in probeMonitorStep method 2025-04-28 18:22:19 +01:00
Simon Larsen
0565cc3756 feat: Include projectId in aggregate query for metric results 2025-04-28 18:15:33 +01:00
Simon Larsen
f9d11b05c8 feat: Add projectId field to monitor response in pending-list API 2025-04-28 18:13:32 +01:00
Simon Larsen
e3bb5344e3 feat: Add projectId handling in various monitor-related components 2025-04-28 18:12:47 +01:00
Simon Larsen
e301e253d0 feat: Add projectId to various monitor response and criteria interfaces 2025-04-28 18:05:48 +01:00
Simon Larsen
d84654e680 fix: Correct route binding for email subscription in DashboardNavbar component 2025-04-28 13:48:01 +01:00
Simon Larsen
6435b96183 refactor: Remove unused import and improve error handling in probe response ingestion 2025-04-28 13:38:32 +01:00
Simon Larsen
083df4fd10 refactor: Improve error handling in probe response ingestion 2025-04-28 13:36:15 +01:00
Simon Larsen
c4ecec9b8e fix: Update isPreview prop binding in DashboardMasterPage component 2025-04-28 13:04:16 +01:00
Simon Larsen
705888649b refactor: Update logging level from debug to info for status checks in StatusAPI and InfrastructureStatus classes 2025-04-28 12:48:16 +01:00
Simon Larsen
9d523213a2 refactor: Simplify acknowledge and resolve time retrieval in getTimeToAcknowledge and getTimeToResolve functions 2025-04-26 11:26:18 +01:00
Simon Larsen
6dd4166cb6 refactor: Comment out unused Semaphore mutex implementation in monitorResource method 2025-04-26 11:21:03 +01:00
Simon Larsen
b9c5025f22 refactor: Remove unnecessary blank lines in resolveIncident and acknowledgeIncident methods 2025-04-25 20:19:29 +01:00
Simon Larsen
1a09a7c9de fix: Reverse incidentStateTimeline before finding acknowledge and resolve times 2025-04-25 19:57:37 +01:00
Simon Larsen
429adc1bc9 feat: Prevent resolving or acknowledging already resolved incidents 2025-04-25 19:54:04 +01:00
Simon Larsen
e24d757dbb feat: Enhance e2e cron job configuration and add random sleep to FetchList job 2025-04-25 18:59:59 +01:00
Simon Larsen
20c2931dec feat: Add tcp_port removal configuration for ClickHouse in values.yaml 2025-04-25 16:04:41 +01:00
Simon Larsen
317595fa75 Merge branch 'master' of github.com:OneUptime/oneuptime 2025-04-25 15:52:57 +01:00
Simon Larsen
5cc651f50a feat: Add ClickHouse configuration to disable database interface ports in values.yaml 2025-04-25 15:52:55 +01:00
Simon Larsen
9d5bab881a Merge pull request #1888 from suse-coder/patch-1
Update WebsiteMonitorView.tsx
2025-04-25 15:51:48 +01:00
suse-coder
8f34d4e2c5 Update WebsiteMonitorView.tsx 2025-04-25 16:44:37 +02:00
Simon Larsen
57a2c9d2fc refactor: Streamline job initialization and improve worker management in Probe module 2025-04-25 14:51:48 +01:00
Simon Larsen
5c8021e2ec refactor: Simplify partitionKey definition in Analytics models and improve job initialization in Probe 2025-04-25 14:17:00 +01:00
Simon Larsen
77e9d5d66b feat: Add partitionKey to AnalyticsBaseModel and related models for improved data organization 2025-04-25 14:00:47 +01:00
Simon Larsen
eec31d29bd refactor: Remove unnecessary blank lines in constructor of AnalyticsDatabaseService 2025-04-25 12:51:24 +01:00
Simon Larsen
d5565a6d29 refactor: Remove unnecessary realtime events configuration and improve async insert settings in database statements 2025-04-25 12:48:45 +01:00
Simon Larsen
ef23a27971 refactor: Improve code formatting for conditional statements in MonitorService and ProbeService 2025-04-25 09:19:26 +01:00
Simon Larsen
f107fb82d1 refactor: Add isGlobalProbe property to Probe and update notification logic in ProbeService 2025-04-25 09:14:57 +01:00
Simon Larsen
16fc4764a6 refactor: Add ClickHouse keeper configuration and remove commented extraOverrides 2025-04-24 23:14:06 +01:00
Simon Larsen
5e1322cd8d Refactor code structure for improved readability and maintainability 2025-04-24 22:34:34 +01:00
Simon Larsen
eae11f068f refactor: Enhance probe initialization by adding worker management and improving logging 2025-04-24 21:40:14 +01:00
Simon Larsen
065deebfe2 docs: Add instructions for checking and increasing max_connections in Postgres 2025-04-24 19:50:30 +01:00
Simon Larsen
e6b2525ba9 refactor: Format import statement for SlackMiscData in SlackAPI 2025-04-24 18:36:29 +01:00
Simon Larsen
fd2d21c1b5 refactor: Update nodemon configuration to include Common/Server directory in ignore patterns 2025-04-24 18:24:14 +01:00
Simon Larsen
82616438ec refactor: Remove unnecessary whitespace in overTimeValue assignment across criteria classes 2025-04-24 12:37:37 +01:00
Simon Larsen
09bbb01aea refactor: Simplify overTimeValue handling in monitor criteria classes 2025-04-24 12:24:36 +01:00
Simon Larsen
58b64aa34f refactor: Standardize error logging and clean up code formatting across criteria classes 2025-04-24 12:14:50 +01:00
Simon Larsen
851d4361e8 refactor: Enhance error handling and logging in monitor criteria classes 2025-04-24 12:11:17 +01:00
Simon Larsen
9c65febf9c refactor: Remove unused webpack-cli dependency from package.json 2025-04-24 11:49:57 +01:00
1224 changed files with 80290 additions and 49937 deletions

View File

@@ -31,8 +31,6 @@ jobs:
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ 'javascript', 'typescript', 'go' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]

View File

@@ -0,0 +1,100 @@
name: MCP Server Generation
on:
pull_request:
push:
branches:
- main
- master
- develop
workflow_dispatch: # Allow manual trigger
jobs:
generate-mcp-server:
runs-on: ubuntu-latest
env:
CI_PIPELINE_ID: ${{ github.run_number }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: latest
cache: 'npm'
- name: Install Common dependencies
run: cd Common && npm install
- name: Install root dependencies
run: npm install
- name: Install Script dependencies
run: cd Scripts && npm install
- name: Generate MCP server
run: npm run generate-mcp-server
- name: Verify MCP server generation
run: |
MCP_DIR="./MCP"
# Check if MCP server directory was created
if [ ! -d "$MCP_DIR" ]; then
echo "❌ MCP server directory not created"
exit 1
fi
echo "✅ MCP server directory created: $MCP_DIR"
# Count generated files
TS_FILES=$(find "$MCP_DIR" -name "*.ts" | wc -l)
echo "📊 Generated TypeScript files: $TS_FILES"
if [ "$TS_FILES" -eq 0 ]; then
echo "❌ No TypeScript files were generated"
exit 1
fi
# Check for essential files
if [ -f "$MCP_DIR/package.json" ]; then
echo "✅ Package.json file created"
fi
if [ -f "$MCP_DIR/README.md" ]; then
echo "✅ Documentation created"
fi
if [ -f "$MCP_DIR/Index.ts" ]; then
echo "✅ Main entry point created"
fi
# Show directory structure for debugging
echo "📁 MCP server directory structure:"
ls -la "$MCP_DIR" || true
- name: Test MCP server build
run: |
MCP_DIR="./MCP"
if [ -d "$MCP_DIR" ] && [ -f "$MCP_DIR/package.json" ]; then
cd "$MCP_DIR"
echo "🔨 Installing dependencies..."
npm install
echo "🔨 Testing TypeScript build..."
npm run build
echo "✅ MCP server build successful"
# Show build output
echo "📦 Build output:"
ls -la build/ || true
else
echo "⚠️ Cannot test build - missing package.json or MCP server directory"
fi
- name: Upload MCP server as artifact
uses: actions/upload-artifact@v4
with:
name: MCP
path: ./MCP/
retention-days: 30

View File

@@ -0,0 +1,74 @@
name: OpenAPI Spec Generation
on:
pull_request:
push:
branches-ignore:
- 'hotfix-*'
- 'release'
jobs:
generate-openapi-spec:
runs-on: ubuntu-latest
env:
CI_PIPELINE_ID: ${{ github.run_number }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: latest
cache: 'npm'
- name: Install Common dependencies
run: cd Common && npm install
- name: Install root dependencies
run: npm install
- name: Install Script dependencies
run: cd Scripts && npm install
- name: Generate OpenAPI specification
run: npm run generate-openapi-spec
- name: Check if OpenAPI spec was generated
run: |
if [ -f "./openapi.json" ]; then
echo "✅ OpenAPI spec file generated successfully"
echo "📄 File size: $(du -h ./openapi.json | cut -f1)"
echo "📊 Spec contains $(jq '.paths | length' ./openapi.json) API paths"
echo "🏷️ API version: $(jq -r '.info.version' ./openapi.json)"
echo "📝 API title: $(jq -r '.info.title' ./openapi.json)"
else
echo "❌ OpenAPI spec file was not generated"
exit 1
fi
- name: Validate OpenAPI spec format
run: |
# Check if the file is valid JSON
if jq empty ./openapi.json; then
echo "✅ OpenAPI spec is valid JSON"
else
echo "❌ OpenAPI spec is not valid JSON"
exit 1
fi
# Check if it has required OpenAPI fields
if jq -e '.openapi and .info and .paths' ./openapi.json > /dev/null; then
echo "✅ OpenAPI spec has required fields"
else
echo "❌ OpenAPI spec missing required fields (openapi, info, paths)"
exit 1
fi
- name: Upload OpenAPI spec as artifact
uses: actions/upload-artifact@v4
with:
name: openapi-spec
path: ./openapi.json
retention-days: 30

248
.github/workflows/publish-mcp-server.yml vendored Normal file
View File

@@ -0,0 +1,248 @@
name: Publish MCP Server
on:
push:
branches:
- main
- master
paths:
- 'Common/**'
- 'Scripts/MCPProvider/**'
- 'Scripts/OpenAPI/**'
release:
types: [published]
workflow_dispatch:
inputs:
version:
description: 'Version to publish (e.g., 1.0.0)'
required: true
type: string
dry_run:
description: 'Run in dry-run mode (no actual publishing)'
required: false
type: boolean
default: false
jobs:
publish-mcp-server:
runs-on: ubuntu-latest
env:
CI_PIPELINE_ID: ${{ github.run_number }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: latest
cache: 'npm'
registry-url: 'https://registry.npmjs.org'
- name: Install Common dependencies
run: cd Common && npm install
- name: Install root dependencies
run: npm install
- name: Install Script dependencies
run: cd Scripts && npm install
- name: Determine version
id: version
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
VERSION="${{ github.event.inputs.version }}"
elif [ "${{ github.event_name }}" = "release" ]; then
VERSION="${{ github.event.release.tag_name }}"
# Remove 'v' prefix if present
VERSION=${VERSION#v}
# Extract version if it's mcp-v1.0.0 format
if [[ $VERSION == mcp-* ]]; then
VERSION=${VERSION#mcp-v}
fi
else
# For push events, generate a pre-release version
VERSION="0.0.0-dev.${GITHUB_SHA:0:7}"
fi
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "Publishing version: $VERSION"
- name: Generate MCP server
run: npm run generate-mcp-server
- name: Verify MCP server generation
run: |
MCP_DIR="./MCP"
if [ ! -d "$MCP_DIR" ]; then
echo "❌ MCP server directory not created"
exit 1
fi
echo "✅ MCP server generated successfully"
echo "📊 Generated files:"
find "$MCP_DIR" -type f -name "*.ts" -o -name "*.js" -o -name "*.json" | wc -l
echo "📁 Directory structure:"
ls -la "$MCP_DIR"
- name: Update package version
run: |
cd MCP
npm version ${{ steps.version.outputs.version }} --no-git-tag-version
- name: Install dependencies and build
run: |
cd MCP
npm install
npm run build
- name: Run tests
run: |
cd MCP
npm test || echo "No tests found or tests failed, continuing..."
- name: Publish to npm (dry run)
if: ${{ github.event.inputs.dry_run == 'true' || github.event_name == 'push' }}
run: |
cd MCP
npm pack --dry-run
echo "✅ Dry run completed successfully"
- name: Publish to npm
if: ${{ github.event.inputs.dry_run != 'true' && (github.event_name == 'release' || github.event_name == 'workflow_dispatch') }}
run: |
cd MCP
npm publish --access public
echo "✅ Published @oneuptime/mcp-server@${{ steps.version.outputs.version }} to npm"
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Create Docker image
if: ${{ github.event.inputs.dry_run != 'true' && (github.event_name == 'release' || github.event_name == 'workflow_dispatch') }}
run: |
cd MCP
docker build -t oneuptime/mcp-server:${{ steps.version.outputs.version }} .
docker tag oneuptime/mcp-server:${{ steps.version.outputs.version }} oneuptime/mcp-server:latest
echo "✅ Created Docker image"
- name: Login to Docker Hub
if: ${{ github.event.inputs.dry_run != 'true' && (github.event_name == 'release' || github.event_name == 'workflow_dispatch') }}
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
- name: Push Docker image
if: ${{ github.event.inputs.dry_run != 'true' && (github.event_name == 'release' || github.event_name == 'workflow_dispatch') }}
run: |
docker push oneuptime/mcp-server:${{ steps.version.outputs.version }}
docker push oneuptime/mcp-server:latest
echo "✅ Pushed Docker images to Docker Hub"
- name: Upload MCP server artifact
uses: actions/upload-artifact@v4
with:
name: mcp-server-${{ steps.version.outputs.version }}
path: ./MCP/
retention-days: 90
- name: Create GitHub Release Assets
if: ${{ github.event_name == 'release' }}
run: |
cd MCP
npm pack
PACKAGE_FILE=$(ls *.tgz)
mv "$PACKAGE_FILE" "../oneuptime-mcp-server-${{ steps.version.outputs.version }}.tgz"
- name: Upload Release Assets
if: ${{ github.event_name == 'release' }}
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: ./oneuptime-mcp-server-${{ steps.version.outputs.version }}.tgz
asset_name: oneuptime-mcp-server-${{ steps.version.outputs.version }}.tgz
asset_content_type: application/gzip
- name: Update release notes
if: ${{ github.event_name == 'release' }}
run: |
# Count generated tools
TOOL_COUNT=$(grep -c "server.tool(" MCP/Service/MCP.ts || echo "0")
# Create enhanced release notes
cat > enhanced-release-notes.md << EOF
# OneUptime MCP Server v${{ steps.version.outputs.version }}
## What's New
This release includes the OneUptime Model Context Protocol (MCP) Server, automatically generated from the OneUptime OpenAPI specification.
### 🚀 Features
- **$TOOL_COUNT MCP Tools**: Complete API coverage for OneUptime operations
- **Type-safe**: Full TypeScript support with comprehensive type definitions
- **Docker Support**: Available as \`oneuptime/mcp-server:${{ steps.version.outputs.version }}\`
- **NPM Package**: Install with \`npm install -g @oneuptime/mcp-server@${{ steps.version.outputs.version }}\`
### 📦 Installation Options
#### NPM
\`\`\`bash
npm install -g @oneuptime/mcp-server@${{ steps.version.outputs.version }}
\`\`\`
#### Docker
\`\`\`bash
docker run -e ONEUPTIME_API_KEY=your-key oneuptime/mcp-server:${{ steps.version.outputs.version }}
\`\`\`
#### Download Package
Download the attached \`oneuptime-mcp-server-${{ steps.version.outputs.version }}.tgz\` file.
### 🔧 Quick Start
1. Set your OneUptime API key:
\`\`\`bash
export ONEUPTIME_API_KEY=your-api-key-here
\`\`\`
2. Run the MCP server:
\`\`\`bash
oneuptime-mcp
\`\`\`
### 📚 Documentation
For detailed usage instructions, API documentation, and examples, see the [README](https://github.com/OneUptime/oneuptime/blob/main/MCP/README.md).
### 🔗 Links
- **NPM Package**: https://www.npmjs.com/package/@oneuptime/mcp-server
- **Docker Hub**: https://hub.docker.com/r/oneuptime/mcp-server
- **Documentation**: https://oneuptime.com/docs/
EOF
echo "Enhanced release notes created"
- name: Summary
run: |
echo "## 🎉 MCP Server Publishing Summary" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "- **Version**: ${{ steps.version.outputs.version }}" >> $GITHUB_STEP_SUMMARY
echo "- **Event**: ${{ github.event_name }}" >> $GITHUB_STEP_SUMMARY
echo "- **Dry Run**: ${{ github.event.inputs.dry_run || 'false' }}" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
if [ "${{ github.event.inputs.dry_run }}" != "true" ] && [ "${{ github.event_name }}" != "push" ]; then
echo "### ✅ Published Successfully" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "- 📦 **NPM**: [@oneuptime/mcp-server@${{ steps.version.outputs.version }}](https://www.npmjs.com/package/@oneuptime/mcp-server)" >> $GITHUB_STEP_SUMMARY
echo "- 🐳 **Docker**: [oneuptime/mcp-server:${{ steps.version.outputs.version }}](https://hub.docker.com/r/oneuptime/mcp-server)" >> $GITHUB_STEP_SUMMARY
else
echo "### 🧪 Dry Run Completed" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "No actual publishing was performed." >> $GITHUB_STEP_SUMMARY
fi

View File

@@ -1299,8 +1299,6 @@ jobs:
llm-docker-image-deploy:
needs: generate-build-number
strategy:
fail-fast: false
runs-on: ubuntu-latest
steps:
@@ -1384,8 +1382,6 @@ jobs:
docs-docker-image-deploy:
needs: generate-build-number
strategy:
fail-fast: false
runs-on: ubuntu-latest
steps:
@@ -1451,8 +1447,6 @@ jobs:
worker-docker-image-deploy:
needs: generate-build-number
strategy:
fail-fast: false
runs-on: ubuntu-latest
steps:
@@ -1518,8 +1512,6 @@ jobs:
workflow-docker-image-deploy:
needs: generate-build-number
strategy:
fail-fast: false
runs-on: ubuntu-latest
steps:
@@ -1581,13 +1573,71 @@ jobs:
APP_VERSION=7.0.${{needs.generate-build-number.outputs.build_number}}
publish-terraform-provider:
runs-on: ubuntu-latest
needs: [generate-build-number]
env:
CI_PIPELINE_ID: ${{github.run_number}}
GITHUB_TOKEN: ${{ secrets.SIMLARSEN_GITHUB_PAT }}
GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
TERRAFORM_PROVIDER_GITHUB_REPO_DEPLOY_KEY: ${{ secrets.TERRAFORM_PROVIDER_GITHUB_REPO_DEPLOY_KEY }}
permissions:
contents: write # For creating releases
packages: write # For publishing packages
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0 # Full history for changelog generation
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 'latest'
cache: 'npm'
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.21'
cache: true
- name: Install GoReleaser
uses: goreleaser/goreleaser-action@v5
with:
install-only: true
- name: Determine version
id: version
run: |
VERSION="7.0.${{needs.generate-build-number.outputs.build_number}}"
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "Publishing Terraform provider version: $VERSION"
- name: Install dependencies
run: |
npm install
if [ -d "Common" ]; then cd Common && npm install && cd ..; fi
if [ -d "Scripts" ]; then cd Scripts && npm install && cd ..; fi
- name: Import GPG key
run: |
echo '${{ secrets.GPG_PRIVATE_KEY }}' > private.key
gpg --import private.key || true
rm private.key
echo "GPG key imported successfully"
gpg --export-secret-keys >~/.gnupg/secring.gpg
echo "GPG key exported successfully"
- name: Generate Terraform provider
run: npm run publish-terraform-provider -- --version "${{ steps.version.outputs.version }}" --github-token "${{ secrets.SIMLARSEN_GITHUB_PAT }}" --github-repo-deploy-key "${{ secrets.TERRAFORM_PROVIDER_GITHUB_REPO_DEPLOY_KEY }}"
api-reference-docker-image-deploy:
needs: generate-build-number
strategy:
fail-fast: false
runs-on: ubuntu-latest
steps:
@@ -1653,7 +1703,7 @@ jobs:
test-e2e-release-saas:
runs-on: ubuntu-latest
needs: [open-telemetry-ingest-docker-image-deploy, copilot-docker-image-deploy, fluent-ingest-docker-image-deploy, docs-docker-image-deploy, api-reference-docker-image-deploy, workflow-docker-image-deploy, llm-docker-image-deploy, accounts-docker-image-deploy, admin-dashboard-docker-image-deploy, app-docker-image-deploy, dashboard-docker-image-deploy, haraka-docker-image-deploy, probe-ingest-docker-image-deploy, server-monitor-ingest-docker-image-deploy, isolated-vm-docker-image-deploy, home-docker-image-deploy, worker-docker-image-deploy, otel-collector-docker-image-deploy, probe-docker-image-deploy, status-page-docker-image-deploy, test-docker-image-deploy, test-server-docker-image-deploy, publish-npm-packages, e2e-docker-image-deploy, helm-chart-deploy, generate-build-number, nginx-docker-image-deploy, incoming-request-ingest-docker-image-deploy]
needs: [open-telemetry-ingest-docker-image-deploy, copilot-docker-image-deploy, fluent-ingest-docker-image-deploy, docs-docker-image-deploy, api-reference-docker-image-deploy, workflow-docker-image-deploy, llm-docker-image-deploy, accounts-docker-image-deploy, admin-dashboard-docker-image-deploy, app-docker-image-deploy, dashboard-docker-image-deploy, haraka-docker-image-deploy, probe-ingest-docker-image-deploy, server-monitor-ingest-docker-image-deploy, isolated-vm-docker-image-deploy, home-docker-image-deploy, worker-docker-image-deploy, otel-collector-docker-image-deploy, probe-docker-image-deploy, status-page-docker-image-deploy, test-docker-image-deploy, test-server-docker-image-deploy, publish-npm-packages, e2e-docker-image-deploy, helm-chart-deploy, generate-build-number, nginx-docker-image-deploy, incoming-request-ingest-docker-image-deploy]
env:
CI_PIPELINE_ID: ${{github.run_number}}
steps:
@@ -1706,7 +1756,7 @@ jobs:
test-e2e-release-self-hosted:
runs-on: ubuntu-latest
# After all the jobs runs
needs: [open-telemetry-ingest-docker-image-deploy, copilot-docker-image-deploy, incoming-request-ingest-docker-image-deploy, fluent-ingest-docker-image-deploy, docs-docker-image-deploy, api-reference-docker-image-deploy, workflow-docker-image-deploy, llm-docker-image-deploy, accounts-docker-image-deploy, admin-dashboard-docker-image-deploy, app-docker-image-deploy, dashboard-docker-image-deploy, haraka-docker-image-deploy, probe-ingest-docker-image-deploy, server-monitor-ingest-docker-image-deploy, isolated-vm-docker-image-deploy, home-docker-image-deploy, worker-docker-image-deploy, otel-collector-docker-image-deploy, probe-docker-image-deploy, status-page-docker-image-deploy, test-docker-image-deploy, test-server-docker-image-deploy, publish-npm-packages, e2e-docker-image-deploy, helm-chart-deploy, generate-build-number, nginx-docker-image-deploy]
needs: [open-telemetry-ingest-docker-image-deploy, copilot-docker-image-deploy, incoming-request-ingest-docker-image-deploy, fluent-ingest-docker-image-deploy, docs-docker-image-deploy, api-reference-docker-image-deploy, workflow-docker-image-deploy, llm-docker-image-deploy, accounts-docker-image-deploy, admin-dashboard-docker-image-deploy, app-docker-image-deploy, dashboard-docker-image-deploy, haraka-docker-image-deploy, probe-ingest-docker-image-deploy, server-monitor-ingest-docker-image-deploy, isolated-vm-docker-image-deploy, home-docker-image-deploy, worker-docker-image-deploy, otel-collector-docker-image-deploy, probe-docker-image-deploy, status-page-docker-image-deploy, test-docker-image-deploy, test-server-docker-image-deploy, publish-npm-packages, e2e-docker-image-deploy, helm-chart-deploy, generate-build-number, nginx-docker-image-deploy]
env:
CI_PIPELINE_ID: ${{github.run_number}}
steps:
@@ -1824,4 +1874,3 @@ jobs:
prerelease: false
tag_name: 7.0.${{needs.generate-build-number.outputs.build_number}}

View File

@@ -0,0 +1,97 @@
name: Terraform Provider Generation
on:
pull_request:
push:
branches:
- main
- master
- develop
workflow_dispatch: # Allow manual trigger
jobs:
generate-terraform-provider:
runs-on: ubuntu-latest
env:
CI_PIPELINE_ID: ${{ github.run_number }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: latest
cache: 'npm'
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.21'
cache: true
- name: Install Common dependencies
run: cd Common && npm install
- name: Install root dependencies
run: npm install
- name: Install Script dependencies
run: cd Scripts && npm install
- name: Generate Terraform provider
run: npm run generate-terraform-provider
- name: Verify provider generation
run: |
PROVIDER_DIR="./Terraform"
# Check if provider directory was created
if [ ! -d "$PROVIDER_DIR" ]; then
echo "❌ Terraform provider directory not created"
exit 1
fi
echo "✅ Provider directory created: $PROVIDER_DIR"
# Count generated files
GO_FILES=$(find "$PROVIDER_DIR" -name "*.go" | wc -l)
echo "📊 Generated Go files: $GO_FILES"
if [ "$GO_FILES" -eq 0 ]; then
echo "❌ No Go files were generated"
exit 1
fi
# Check for essential files
if [ -f "$PROVIDER_DIR/go.mod" ]; then
echo "✅ Go module file created"
fi
if [ -f "$PROVIDER_DIR/README.md" ]; then
echo "✅ Documentation created"
fi
# Show directory structure for debugging
echo "📁 Provider directory structure:"
ls -la "$PROVIDER_DIR" || true
- name: Test Go build
run: |
PROVIDER_DIR="./Terraform"
if [ -d "$PROVIDER_DIR" ] && [ -f "$PROVIDER_DIR/go.mod" ]; then
cd "$PROVIDER_DIR"
echo "🔨 Testing Go build..."
go mod tidy
go build -v ./...
echo "✅ Go build successful"
else
echo "⚠️ Cannot test build - missing go.mod or provider directory"
fi
- name: Upload Terraform provider as artifact
uses: actions/upload-artifact@v4
with:
name: Terraform
path: ./Terraform/
retention-days: 30

View File

@@ -23,10 +23,71 @@ jobs:
token: ${{secrets.github_token}}
- run: echo "Build number is ${{ steps.buildnumber.outputs.build_number }}"
publish-terraform-provider:
runs-on: ubuntu-latest
needs: [generate-build-number]
env:
CI_PIPELINE_ID: ${{github.run_number}}
GITHUB_TOKEN: ${{ secrets.SIMLARSEN_GITHUB_PAT }}
GPG_PRIVATE_KEY: ${{ secrets.TERRAFORM_GPG_PRIVATE_KEY }}
TERRAFORM_PROVIDER_GITHUB_REPO_DEPLOY_KEY: ${{ secrets.TERRAFORM_PROVIDER_GITHUB_REPO_DEPLOY_KEY }}
permissions:
contents: write # For creating releases
packages: write # For publishing packages
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0 # Full history for changelog generation
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 'latest'
cache: 'npm'
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.21'
cache: true
- name: Install GoReleaser
uses: goreleaser/goreleaser-action@v5
with:
install-only: true
- name: Determine version
id: version
run: |
VERSION="7.0.${{needs.generate-build-number.outputs.build_number}}"
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "Publishing Terraform provider version: $VERSION"
- name: Install dependencies
run: |
npm install
if [ -d "Common" ]; then cd Common && npm install && cd ..; fi
if [ -d "Scripts" ]; then cd Scripts && npm install && cd ..; fi
- name: Import GPG key
run: |
echo '${{ secrets.TERRAFORM_GPG_PRIVATE_KEY }}' > private.key
gpg --import private.key || true
rm private.key
echo "GPG key imported successfully"
gpg --export-secret-keys >~/.gnupg/secring.gpg
echo "GPG key exported successfully"
- name: Generate Terraform provider
run: npm run publish-terraform-provider -- --version "${{ steps.version.outputs.version }}" --github-token "${{ secrets.SIMLARSEN_GITHUB_PAT }}" --github-repo-deploy-key "${{ secrets.TERRAFORM_PROVIDER_GITHUB_REPO_DEPLOY_KEY }}" --test-release
llm-docker-image-deploy:
needs: generate-build-number
strategy:
fail-fast: false
runs-on: ubuntu-latest
steps:
@@ -1596,7 +1657,7 @@ jobs:
test-helm-chart:
runs-on: ubuntu-latest
needs: [infrastructure-agent-deploy, llm-docker-image-deploy, open-telemetry-ingest-docker-image-deploy, copilot-docker-image-deploy, docs-docker-image-deploy, worker-docker-image-deploy, workflow-docker-image-deploy, isolated-vm-docker-image-deploy, home-docker-image-deploy, api-reference-docker-image-deploy, test-server-docker-image-deploy, test-docker-image-deploy, probe-ingest-docker-image-deploy, server-monitor-ingest-docker-image-deploy, probe-docker-image-deploy, haraka-docker-image-deploy, dashboard-docker-image-deploy, admin-dashboard-docker-image-deploy, app-docker-image-deploy, accounts-docker-image-deploy, otel-collector-docker-image-deploy, status-page-docker-image-deploy, nginx-docker-image-deploy, e2e-docker-image-deploy, fluent-ingest-docker-image-deploy, incoming-request-ingest-docker-image-deploy]
needs: [infrastructure-agent-deploy, llm-docker-image-deploy, publish-terraform-provider, open-telemetry-ingest-docker-image-deploy, copilot-docker-image-deploy, docs-docker-image-deploy, worker-docker-image-deploy, workflow-docker-image-deploy, isolated-vm-docker-image-deploy, home-docker-image-deploy, api-reference-docker-image-deploy, test-server-docker-image-deploy, test-docker-image-deploy, probe-ingest-docker-image-deploy, server-monitor-ingest-docker-image-deploy, probe-docker-image-deploy, haraka-docker-image-deploy, dashboard-docker-image-deploy, admin-dashboard-docker-image-deploy, app-docker-image-deploy, accounts-docker-image-deploy, otel-collector-docker-image-deploy, status-page-docker-image-deploy, nginx-docker-image-deploy, e2e-docker-image-deploy, fluent-ingest-docker-image-deploy, incoming-request-ingest-docker-image-deploy]
env:
CI_PIPELINE_ID: ${{github.run_number}}
steps:

15
.gitignore vendored
View File

@@ -112,3 +112,18 @@ App/greenlock/greenlock.d/config.json
App/greenlock/greenlock.d/config.json.bak
Examples/otel-dotnet/bin/Debug/net6.0/Grpc.Core.Api.dll.txt
InfrastructureAgent/oneuptime-infrastructure-agent
# ESLint cache
.eslintcache*
# Terraform generated files
openapi.json
Terraform/**
TerraformTest/**
terraform-provider-example/**
MCP/**
MCP/**

View File

@@ -0,0 +1,8 @@
{
"query": {
"age": {
"_type": "GreaterThanOrNull",
"value": 10
}
}
}

View File

@@ -0,0 +1,8 @@
{
"query": {
"age": {
"_type": "LessThanOrNull",
"value": 10
}
}
}

View File

@@ -1,6 +1,7 @@
import AuthenticationServiceHandler from "./Service/Authentication";
import DataTypeServiceHandler from "./Service/DataType";
import ErrorServiceHandler from "./Service/Errors";
import OpenAPIServiceHandler from "./Service/OpenAPI";
import IntroductionServiceHandler from "./Service/Introduction";
import ModelServiceHandler from "./Service/Model";
import PageNotFoundServiceHandler from "./Service/PageNotFound";
@@ -65,6 +66,8 @@ const APIReferenceFeatureSet: FeatureSet = {
return ErrorServiceHandler.executeResponse(req, res);
} else if (req.params["page"] === "introduction") {
return IntroductionServiceHandler.executeResponse(req, res);
} else if (req.params["page"] === "openapi") {
return OpenAPIServiceHandler.executeResponse(req, res);
} else if (req.params["page"] === "status") {
return StatusServiceHandler.executeResponse(req, res);
} else if (req.params["page"] === "data-types") {

View File

@@ -88,6 +88,26 @@ export default class ServiceHandler {
},
);
pageData.lessThanOrNullCode = await LocalCache.getOrSetString(
"data-type",
"less-than-or-equal",
async () => {
return await LocalFile.read(
`${CodeExamplesPath}/DataTypes/LessThanOrNull.md`,
);
},
);
pageData.greaterThanOrNullCode = await LocalCache.getOrSetString(
"data-type",
"less-than-or-equal",
async () => {
return await LocalFile.read(
`${CodeExamplesPath}/DataTypes/LessThanOrNull.md`,
);
},
);
pageData.isNullCode = await LocalCache.getOrSetString(
"data-type",
"is-null",

View File

@@ -77,6 +77,11 @@ export default class ServiceHandler {
continue;
}
if (tableColumns[key].hideColumnInDocumentation) {
delete tableColumns[key];
continue;
}
tableColumns[key].permissions = accessControl;
}

View File

@@ -0,0 +1,44 @@
import {
Host,
HttpProtocol,
IsBillingEnabled,
} from "Common/Server/EnvironmentConfig";
import { ViewsPath } from "../Utils/Config";
import ResourceUtil, { ModelDocumentation } from "../Utils/Resources";
import { ExpressRequest, ExpressResponse } from "Common/Server/Utils/Express";
import URL from "Common/Types/API/URL";
// Fetch a list of resources used in the application
const Resources: Array<ModelDocumentation> = ResourceUtil.getResources();
export default class ServiceHandler {
// Handles the HTTP response for a given request
public static async executeResponse(
req: ExpressRequest,
res: ExpressResponse,
): Promise<void> {
let pageTitle: string = "";
let pageDescription: string = "";
// Get the 'page' parameter from the request
const page: string | undefined = req.params["page"];
const pageData: any = {
hostUrl: new URL(HttpProtocol, Host).toString(),
};
// Set the default page title and description
pageTitle = "OneUptime OpenAPI Specification";
pageDescription =
"Learn more about the OpenAPI specification for OneUptime";
// Render the response using the given view and data
return res.render(`${ViewsPath}/pages/index`, {
page: page,
resources: Resources,
pageTitle: pageTitle,
enableGoogleTagManager: IsBillingEnabled,
pageDescription: pageDescription,
pageData: pageData,
});
}
}

View File

@@ -32,7 +32,7 @@
<p>You can use OneUptime API Key on Request Header when you're making a request. You can use <code
class="rounded p-0.5 px-1 text-sm text-gray-500 bg-gray-100 border-2 border-gray-200">Authorization</code>
header with your API Key when you make a request.</p>
<%- include('../partials/code', {title: "Example request with API Key" , requestUrl: "" , requestType: "" , code: "curl --header \"ApiKey: {secret-api-key}\" --header \"ProjectID: {project-id}\" https://oneuptime.com/api/\<path\>" }) -%>
<%- include('../partials/code', {title: "Example request with API Key" , requestUrl: "" , requestType: "" , code: "curl --header \"ApiKey: {secret-api-key}\" https://oneuptime.com/api/\<path\>" }) -%>
<p class="text-sm">Please don't commit your OneUptime API Key to GitHub, or on any other source control
project. Please regenerate a new API Key, if your API Key is committed by mistake.</p>
</article>

View File

@@ -0,0 +1,53 @@
<main class="py-16">
<article class="prose ">
<h1>OneUptime OpenAPI Specification</h1>
<p class="lead">In this guide, we will look at how to import and work with the OneUptime OpenAPI specification. The OpenAPI spec provides a comprehensive reference for all available API endpoints.</p>
<p>The OneUptime API follows the OpenAPI 3.0 specification, which provides a standardized way to describe REST APIs. You can import our OpenAPI spec into various tools like Swagger Editor, Postman, or other API documentation tools to explore and test our endpoints.</p>
<h2 id="importing-spec" class="scroll-mt-24">
Importing the OpenAPI Spec
</h2>
<div class="grid grid-cols-1 items-start gap-x-16 gap-y-10">
<div class="[&amp;>:first-child]:mt-0 [&amp;>:last-child]:mb-0">
<p>To import the OneUptime OpenAPI specification into Swagger Editor, follow these simple steps:</p>
<div class="my-6">
<ol class="list-decimal pl-6">
<li class="mb-2">Open <a href="https://editor.swagger.io" target="_blank" class="text-blue-600 hover:text-blue-800">editor.swagger.io</a> in your web browser</li>
<li class="mb-2">Click on <strong>File</strong> in the menu bar</li>
<li class="mb-2">Select <strong>Import URL</strong> from the dropdown menu</li>
<li class="mb-2">Enter the URL: <code class="inline-code"><%= pageData.hostUrl %>api/openapi/spec</code></li>
<li class="mb-2">Click <strong>Import</strong> to load the specification</li>
</ol>
</div>
<h2 id="spec-url" class="scroll-mt-24">
Specification URL
</h2>
<div class="my-6">
<ul role="list"
class="m-0 list-none divide-y divide-zinc-900/5 p-0 ">
<li class="m-0 px-0 py-4 first:pt-0 last:pb-0">
<dl class="m-0 flex flex-wrap items-center gap-x-3 gap-y-2">
<dt class="sr-only">Endpoint</dt>
<dd><code class="inline-code"><%= pageData.hostUrl %>api/openapi/spec</code></dd>
<dt class="sr-only">Description</dt>
<dd class="w-full flex-none [&amp;>:first-child]:mt-0 [&amp;>:last-child]:mb-0">
<p>Complete OpenAPI 3.0 specification for the OneUptime API including all endpoints, request/response schemas, and authentication methods.</p>
</dd>
</dl>
</li>
</ul>
</div>
<h2 id="benefits" class="scroll-mt-24">
Benefits of Using the OpenAPI Spec
</h2>
<div class="my-6">
<ul class="list-disc pl-6">
<li class="mb-2"><strong>Interactive Documentation:</strong> Test API endpoints directly in Swagger Editor</li>
<li class="mb-2"><strong>Code Generation:</strong> Generate client SDKs in multiple programming languages</li>
<li class="mb-2"><strong>Validation:</strong> Ensure your requests match the expected schema</li>
<li class="mb-2"><strong>Import to Tools:</strong> Use with Postman, Insomnia, or other API testing tools</li>
</ul>
</div>
</div>
</div>
</article>
</main>

View File

@@ -146,6 +146,9 @@
with us on Slack</a></li>
<li><a class="text-sm leading-5 text-zinc-600 transition hover:text-zinc-900 "
href="/support">Support</a></li>
<li><a class="text-sm leading-5 text-zinc-600 transition hover:text-zinc-900 "
href="/reference/openapi" type="_blank">OpenAPI Spec</a></li>
<li><a class="text-sm leading-5 text-zinc-600 transition hover:text-zinc-900 "
href="https://github.com/oneuptime/oneuptime">GitHub</a></li>
</ul>
@@ -232,6 +235,10 @@
class="flex justify-between gap-2 py-1 pr-3 text-sm transition pl-4 text-zinc-600 hover:text-zinc-900 "
href="/reference/errors"><span class="truncate">Errors</span></a></li>
<li class="relative" style="transform: none; transform-origin: 50% 50% 0px;"><a
class="flex justify-between gap-2 py-1 pr-3 text-sm transition pl-4 text-zinc-600 hover:text-zinc-900 "
href="/reference/openapi"><span class="truncate">OpenAPI Spec</span></a></li>
</ul>
</div>

View File

@@ -69,12 +69,11 @@ RUN npm install
# - 3003: accounts
EXPOSE 3003
RUN npm i -D webpack-cli
{{ if eq .Env.ENVIRONMENT "development" }}
RUN mkdir /usr/src/app/dev-env
RUN touch /usr/src/app/dev-env/.env
RUN npm i -D webpack-dev-server
#Run the app
CMD [ "npm", "run", "dev" ]

View File

@@ -35,7 +35,7 @@ See the section about [deployment](https://facebook.github.io/create-react-app/d
If you arent satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point youre on your own.
Instead, it will copy all the configuration files and the transitive dependencies ( Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point youre on your own.
You dont have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldnt feel obligated to use this feature. However we understand that this tool wouldnt be useful if you couldnt customize it when you are ready for it.

View File

@@ -0,0 +1,12 @@
const { createConfig, build, watch } = require('Common/UI/esbuild-config');
const config = createConfig({
serviceName: 'Accounts',
publicPath: '/accounts/dist/',
});
if (process.argv.includes('--watch')) {
watch(config, 'Accounts');
} else {
build(config, 'Accounts');
}

View File

@@ -1,15 +1,14 @@
{
"watch": ["./","../Common/Server", "../Common/Types", "../Common/Utils", "../Common/Models"],
"watch": ["./","../Common/UI", "../Common/Types", "../Common/Utils", "../Common/Models"],
"ext": "ts,json,tsx,env,js,jsx,hbs",
"ignore": [
"./public/**",
"./public/dist/**",
"./dev-env/*",
"./dev-env/.env",
"./build/*",
"./build/**",
"./build/dist/*",
"./build/dist/**"
"./build/dist/**",
"../Common/Server/**"
],
"exec": "printenv > /usr/src/app/dev-env/.env && echo 'HOST=localhost' >> /usr/src/app/dev-env/.env && echo 'USE_HTTPS=false' >> /usr/src/app/dev-env/.env && npm run dev-build && npm run start"
"exec": "npm run dev-build && npm run start"
}

File diff suppressed because it is too large Load Diff

View File

@@ -3,9 +3,10 @@
"version": "0.1.0",
"private": false,
"scripts": {
"dev-build": "webpack build --mode=development",
"dev-build": "NODE_ENV=development node esbuild.config.js",
"dev": "npx nodemon",
"build": "webpack build --mode=production",
"build": "NODE_ENV=production node esbuild.config.js",
"analyze": "analyze=true NODE_ENV=production node esbuild.config.js",
"test": "",
"compile": "tsc",
"clear-modules": "rm -rf node_modules && rm package-lock.json && npm install",
@@ -28,16 +29,11 @@
},
"dependencies": {
"Common": "file:../Common",
"css-loader": "^6.11.0",
"dotenv": "^16.4.5",
"ejs": "^3.1.10",
"file-loader": "^6.2.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-router-dom": "^6.23.1",
"sass-loader": "^13.3.3",
"style-loader": "^3.3.4",
"ts-loader": "^9.5.1",
"use-async-effect": "^2.2.7"
},
"devDependencies": {
@@ -46,7 +42,7 @@
"@types/react-dom": "^18.0.4",
"@types/react-router-dom": "^5.3.3",
"nodemon": "^2.0.20",
"ts-node": "^10.9.1",
"webpack": "^5.76.0"
"ts-node": "^10.9.1"
}
}

View File

@@ -1,12 +1,4 @@
import ForgotPasswordPage from "./Pages/ForgotPassword";
import LoginPage from "./Pages/Login";
import LoginWithSSO from "./Pages/LoginWithSSO";
import NotFound from "./Pages/NotFound";
import RegisterPage from "./Pages/Register";
import ResetPasswordPage from "./Pages/ResetPassword";
import VerifyEmail from "./Pages/VerifyEmail";
import Navigation from "Common/UI/Utils/Navigation";
import React, { ReactElement } from "react";
import React, { ReactElement, lazy, Suspense } from "react";
import {
Route,
Routes,
@@ -14,6 +6,38 @@ import {
useNavigate,
useParams,
} from "react-router-dom";
import Navigation from "Common/UI/Utils/Navigation";
import PageLoader from "Common/UI/Components/Loader/PageLoader";
// Lazy load page components
const ForbiddenPage: React.LazyExoticComponent<() => JSX.Element> = lazy(() => {
return import("./Pages/Forbidden");
});
const ForgotPasswordPage: React.LazyExoticComponent<() => JSX.Element> = lazy(
() => {
return import("./Pages/ForgotPassword");
},
);
const LoginPage: React.LazyExoticComponent<() => JSX.Element> = lazy(() => {
return import("./Pages/Login");
});
const LoginWithSSO: React.LazyExoticComponent<() => JSX.Element> = lazy(() => {
return import("./Pages/LoginWithSSO");
});
const NotFound: React.LazyExoticComponent<() => JSX.Element> = lazy(() => {
return import("./Pages/NotFound");
});
const RegisterPage: React.LazyExoticComponent<() => JSX.Element> = lazy(() => {
return import("./Pages/Register");
});
const ResetPasswordPage: React.LazyExoticComponent<() => JSX.Element> = lazy(
() => {
return import("./Pages/ResetPassword");
},
);
const VerifyEmail: React.LazyExoticComponent<() => JSX.Element> = lazy(() => {
return import("./Pages/VerifyEmail");
});
function App(): ReactElement {
Navigation.setNavigateHook(useNavigate());
@@ -22,24 +46,29 @@ function App(): ReactElement {
return (
<div className="m-auto h-screen">
<Routes>
<Route path="/accounts" element={<LoginPage />} />
<Route path="/accounts/login" element={<LoginPage />} />
<Route path="/accounts/sso" element={<LoginWithSSO />} />
<Route
path="/accounts/forgot-password"
element={<ForgotPasswordPage />}
/>
<Route
path="/accounts/reset-password/:token"
element={<ResetPasswordPage />}
/>
<Route path="/accounts/register" element={<RegisterPage />} />
<Route path="/accounts/verify-email/:token" element={<VerifyEmail />} />
{/* 👇️ only match this when no other routes match */}
<Route path="*" element={<NotFound />} />
</Routes>
<Suspense fallback={<PageLoader isVisible={true} />}>
<Routes>
<Route path="/accounts" element={<LoginPage />} />
<Route path="/accounts/login" element={<LoginPage />} />
<Route path="/accounts/forbidden" element={<ForbiddenPage />} />
<Route path="/accounts/sso" element={<LoginWithSSO />} />
<Route
path="/accounts/forgot-password"
element={<ForgotPasswordPage />}
/>
<Route
path="/accounts/reset-password/:token"
element={<ResetPasswordPage />}
/>
<Route path="/accounts/register" element={<RegisterPage />} />
<Route
path="/accounts/verify-email/:token"
element={<VerifyEmail />}
/>
{/* 👇️ only match this when no other routes match */}
<Route path="*" element={<NotFound />} />
</Routes>
</Suspense>
</div>
);
}

View File

@@ -0,0 +1,18 @@
import React from "react";
const ForbiddenPage: () => JSX.Element = () => {
return (
<div className="flex min-h-full flex-col justify-center py-12 sm:px-6 lg:px-8">
<div className="sm:mx-auto sm:w-full sm:max-w-md">
<h2 className="mt-6 text-center text-2xl tracking-tight text-gray-900">
Forbidden
</h2>
<p className="mt-2 text-center text-sm text-gray-600">
You do not have permission to access this page.
</p>
</div>
</div>
);
};
export default ForbiddenPage;

View File

@@ -56,6 +56,7 @@ const ForgotPassword: () => JSX.Element = () => {
title: "Email",
fieldType: FormFieldSchemaType.Email,
required: true,
disableSpellCheck: true,
},
]}
onSuccess={() => {

View File

@@ -122,6 +122,7 @@ const LoginPage: () => JSX.Element = () => {
disabled: Boolean(initialValues && initialValues["email"]),
title: "Email",
dataTestId: "email",
disableSpellCheck: true,
},
{
field: {
@@ -139,6 +140,7 @@ const LoginPage: () => JSX.Element = () => {
openLinkInNewTab: false,
},
dataTestId: "password",
disableSpellCheck: true,
},
]}
createOrUpdateApiUrl={apiUrl}

View File

@@ -196,6 +196,7 @@ const LoginPage: () => JSX.Element = () => {
required: true,
title: "Email",
dataTestId: "email",
disableSpellCheck: true,
},
]}
maxPrimaryButtonWidth={true}

View File

@@ -104,6 +104,7 @@ const RegisterPage: () => JSX.Element = () => {
disabled: Boolean(initialValues && initialValues["email"]),
title: "Email",
dataTestId: "email",
disableSpellCheck: true,
},
{
field: {
@@ -114,6 +115,7 @@ const RegisterPage: () => JSX.Element = () => {
required: true,
title: "Full Name",
dataTestId: "name",
disableSpellCheck: true,
},
];
@@ -128,6 +130,7 @@ const RegisterPage: () => JSX.Element = () => {
required: true,
title: "Company Name",
dataTestId: "companyName",
disableSpellCheck: true,
},
]);
@@ -159,6 +162,7 @@ const RegisterPage: () => JSX.Element = () => {
title: "Password",
required: true,
dataTestId: "password",
disableSpellCheck: true,
},
{
field: {
@@ -175,6 +179,7 @@ const RegisterPage: () => JSX.Element = () => {
required: true,
showEvenIfPermissionDoesNotExist: true,
dataTestId: "confirmPassword",
disableSpellCheck: true,
},
]);

View File

@@ -68,6 +68,7 @@ const RegisterPage: () => JSX.Element = () => {
title: "New Password",
required: true,
showEvenIfPermissionDoesNotExist: true,
disableSpellCheck: true,
},
{
field: {
@@ -83,6 +84,7 @@ const RegisterPage: () => JSX.Element = () => {
overrideFieldKey: "confirmPassword",
required: true,
showEvenIfPermissionDoesNotExist: true,
disableSpellCheck: true,
},
]}
createOrUpdateApiUrl={apiUrl}

View File

@@ -106,7 +106,7 @@
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<script src="/accounts/dist/bundle.js"></script>
<script type="module" src="/accounts/dist/Index.js"></script>
<script>
tailwind.config = {
theme: {

View File

@@ -1,70 +0,0 @@
require("ts-loader");
require("file-loader");
require("style-loader");
require("css-loader");
require("sass-loader");
const path = require("path");
const webpack = require("webpack");
const dotenv = require("dotenv");
require('ejs');
const readEnvFile = (pathToFile) => {
const parsed = dotenv.config({ path: pathToFile }).parsed;
const env = {};
for (const key in parsed) {
env[key] = JSON.stringify(parsed[key]);
}
return env;
};
module.exports = {
entry: "./src/Index.tsx",
mode: "development",
output: {
filename: "bundle.js",
path: path.resolve(__dirname, "public", "dist"),
publicPath: "/accounts/dist/",
},
resolve: {
extensions: [".ts", ".tsx", ".js", ".jsx", ".json", ".css", ".scss"],
alias: {
react: path.resolve("./node_modules/react"),
},
},
externals: {
"react-native-sqlite-storage": "react-native-sqlite-storage",
},
plugins: [
new webpack.DefinePlugin({
process: {
env: {
...readEnvFile("/usr/src/app/dev-env/.env"),
},
},
}),
],
module: {
rules: [
{
test: /\.(ts|tsx)$/,
use: "ts-loader",
},
{
test: /\.s[ac]ss$/i,
use: ["style-loader", "css-loader", "sass-loader"],
},
{
test: /\.css$/i,
use: ["style-loader", "css-loader"],
},
{
test: /\.(jpe?g|png|gif|svg)$/i,
loader: "file-loader",
},
],
},
devtool: "eval-source-map",
};

View File

@@ -67,13 +67,12 @@ RUN npm install
# - 3158: AdminDashboard
EXPOSE 3158
RUN npm i -D webpack-cli
{{ if eq .Env.ENVIRONMENT "development" }}
#Run the app
RUN mkdir /usr/src/app/dev-env
RUN touch /usr/src/app/dev-env/.env
RUN npm i -D webpack-dev-server
CMD [ "npm", "run", "dev" ]
{{ else }}
# Copy app source

View File

@@ -35,7 +35,7 @@ See the section about [deployment](https://facebook.github.io/create-react-app/d
If you arent satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point youre on your own.
Instead, it will copy all the configuration files and the transitive dependencies ( Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point youre on your own.
You dont have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldnt feel obligated to use this feature. However we understand that this tool wouldnt be useful if you couldnt customize it when you are ready for it.

View File

@@ -0,0 +1,12 @@
const { createConfig, build, watch } = require('Common/UI/esbuild-config');
const config = createConfig({
serviceName: 'AdminDashboard',
publicPath: '/admin/dist/',
});
if (process.argv.includes('--watch')) {
watch(config, 'AdminDashboard');
} else {
build(config, 'AdminDashboard');
}

View File

@@ -1,15 +1,14 @@
{
"watch": ["./","../Common/Server", "../Common/Types", "../Common/Utils", "../Common/Models"],
"watch": ["./","../Common/UI", "../Common/Types", "../Common/Utils", "../Common/Models"],
"ext": "ts,json,tsx,env,js,jsx,hbs",
"ignore": [
"./public/**",
"./public/dist/**",
"./dev-env/*",
"./dev-env/.env",
"./build/*",
"./build/**",
"./build/dist/*",
"./build/dist/**"
"./build/dist/**",
"../Common/Server/**"
],
"exec": "printenv > /usr/src/app/dev-env/.env && echo 'HOST=localhost' >> /usr/src/app/dev-env/.env && echo 'USE_HTTPS=false' >> /usr/src/app/dev-env/.env && npm run dev-build && npm run start"
"exec": " npm run dev-build && npm run start"
}

File diff suppressed because it is too large Load Diff

View File

@@ -4,20 +4,19 @@
"private": false,
"dependencies": {
"Common": "file:../Common",
"dotenv": "^16.4.5",
"ejs": "^3.1.10",
"file-loader": "^6.2.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-router-dom": "^6.23.1",
"style-loader": "^3.3.4"
"react-router-dom": "^6.23.1"
},
"scripts": {
"dev-build": "webpack build --mode=development",
"dev-build": "NODE_ENV=development node esbuild.config.js",
"dev": "npx nodemon",
"build": "webpack build --mode=production",
"build": "NODE_ENV=production node esbuild.config.js",
"analyze": "analyze=true NODE_ENV=production node esbuild.config.js",
"test": "react-app-rewired test",
"eject": "webpack eject",
"eject": "echo 'esbuild does not require eject'",
"compile": "tsc",
"clear-modules": "rm -rf node_modules && rm package-lock.json && npm install",
"start": "node --require ts-node/register Serve.ts",
@@ -42,13 +41,8 @@
"@types/react": "^18.2.38",
"@types/react-dom": "^18.0.4",
"@types/react-router-dom": "^5.3.3",
"css-loader": "^6.8.1",
"nodemon": "^2.0.20",
"react-app-rewired": "^2.2.1",
"sass": "^1.51.0",
"sass-loader": "^12.6.0",
"ts-loader": "^9.5.1",
"ts-node": "^10.9.1",
"webpack": "^5.76.0"
"ts-node": "^10.9.1"
}
}

View File

@@ -17,7 +17,9 @@ const Logo: FunctionComponent<ComponentProps> = (
<Image
className="block h-8 w-auto"
onClick={() => {
props.onClick && props.onClick();
if (props.onClick) {
props.onClick();
}
}}
imageUrl={Route.fromString(`${OneUptimeLogo}`)}
alt={"OneUptime"}

View File

@@ -16,7 +16,7 @@ const Logout: FunctionComponent = (): ReactElement => {
const logout: PromiseVoidFunction = async (): Promise<void> => {
UiAnalytics.logout();
await UserUtil.logout();
UserUtil.logout();
Navigation.navigate(ACCOUNTS_URL);
};

View File

@@ -243,6 +243,7 @@ const Projects: FunctionComponent = (): ReactElement => {
type: FieldType.DateTime,
},
]}
userPreferencesKey="admin-projects-table"
/>
</Page>
);

View File

@@ -106,6 +106,7 @@ const Settings: FunctionComponent = (): ReactElement => {
title: "Admin Notification Email",
fieldType: FormFieldSchemaType.Email,
required: false,
disableSpellCheck: true,
},
]}
modelDetailProps={{
@@ -199,6 +200,7 @@ const Settings: FunctionComponent = (): ReactElement => {
fieldType: FormFieldSchemaType.Hostname,
required: true,
placeholder: "smtp.server.com",
disableSpellCheck: true,
},
{
field: {
@@ -229,6 +231,7 @@ const Settings: FunctionComponent = (): ReactElement => {
fieldType: FormFieldSchemaType.Text,
required: false,
placeholder: "emailuser",
disableSpellCheck: true,
},
{
field: {
@@ -239,6 +242,7 @@ const Settings: FunctionComponent = (): ReactElement => {
fieldType: FormFieldSchemaType.EncryptedText,
required: false,
placeholder: "Password",
disableSpellCheck: true,
},
{
field: {
@@ -251,6 +255,7 @@ const Settings: FunctionComponent = (): ReactElement => {
description:
"Email used to log in to this SMTP Server. This is also the email your customers will see. ",
placeholder: "email@company.com",
disableSpellCheck: true,
},
{
field: {
@@ -263,6 +268,7 @@ const Settings: FunctionComponent = (): ReactElement => {
description:
"This is the display name your team and customers see, when they receive emails from OneUptime.",
placeholder: "Company, Inc.",
disableSpellCheck: true,
},
]}
modelDetailProps={{

View File

@@ -57,6 +57,7 @@ const Settings: FunctionComponent = (): ReactElement => {
/>
<ModelTable<Probe>
userPreferencesKey={"admin-probes-table"}
modelType={Probe}
id="probes-table"
name="Settings > Global Probes"
@@ -151,7 +152,7 @@ const Settings: FunctionComponent = (): ReactElement => {
description: true,
},
title: "Description",
type: FieldType.Text,
type: FieldType.LongText,
},
]}
columns={[
@@ -172,7 +173,7 @@ const Settings: FunctionComponent = (): ReactElement => {
},
noValueMessage: "-",
title: "Description",
type: FieldType.Text,
type: FieldType.LongText,
},
{
field: {

View File

@@ -26,6 +26,7 @@ const Users: FunctionComponent = (): ReactElement => {
>
<ModelTable<User>
modelType={User}
userPreferencesKey="admin-users-table"
id="users-table"
isDeleteable={false}
isEditable={false}
@@ -47,6 +48,7 @@ const Users: FunctionComponent = (): ReactElement => {
fieldType: FormFieldSchemaType.Email,
required: true,
placeholder: "email@company.com",
disableSpellCheck: true,
},
{
field: {
@@ -56,6 +58,7 @@ const Users: FunctionComponent = (): ReactElement => {
fieldType: FormFieldSchemaType.Password,
required: true,
placeholder: "Password",
disableSpellCheck: true,
},
{
field: {

View File

@@ -100,7 +100,7 @@
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<script src="/admin/dist/bundle.js"></script>
<script type="module" src="/admin/dist/Index.js"></script>
<script>
tailwind.config = {
theme: {

View File

@@ -1,70 +0,0 @@
require("ts-loader");
require("file-loader");
require("style-loader");
require("css-loader");
require("sass-loader");
require('ejs');
const path = require("path");
const webpack = require("webpack");
const dotenv = require("dotenv");
const readEnvFile = (pathToFile) => {
const parsed = dotenv.config({ path: pathToFile }).parsed;
const env = {};
for (const key in parsed) {
env[key] = JSON.stringify(parsed[key]);
}
return env;
};
module.exports = {
entry: "./src/Index.tsx",
mode: "development",
output: {
filename: "bundle.js",
path: path.resolve(__dirname, "public", "dist"),
publicPath: "/admin/dist/",
},
resolve: {
extensions: [".ts", ".tsx", ".js", ".jsx", ".json", ".css", ".scss"],
alias: {
react: path.resolve("./node_modules/react"),
},
},
externals: {
"react-native-sqlite-storage": "react-native-sqlite-storage",
},
plugins: [
new webpack.DefinePlugin({
process: {
env: {
...readEnvFile("/usr/src/app/dev-env/.env"),
},
},
}),
],
module: {
rules: [
{
test: /\.(ts|tsx)$/,
use: "ts-loader",
},
{
test: /\.s[ac]ss$/i,
use: ["style-loader", "css-loader", "sass-loader"],
},
{
test: /\.css$/i,
use: ["style-loader", "css-loader"],
},
{
test: /\.(jpe?g|png|gif|svg)$/i,
loader: "file-loader",
},
],
},
devtool: "eval-source-map",
};

View File

@@ -16,6 +16,7 @@ import ProjectSsoAPI from "Common/Server/API/ProjectSSO";
// Import API
import ResellerPlanAPI from "Common/Server/API/ResellerPlanAPI";
import MonitorAPI from "Common/Server/API/MonitorAPI";
import ShortLinkAPI from "Common/Server/API/ShortLinkAPI";
import StatusPageAPI from "Common/Server/API/StatusPageAPI";
import WorkspaceNotificationRuleAPI from "Common/Server/API/WorkspaceNotificationRuleAPI";
@@ -169,9 +170,6 @@ import MonitorProbeService, {
import MonitorSecretService, {
Service as MonitorSecretServiceType,
} from "Common/Server/Services/MonitorSecretService";
import MonitorService, {
Service as MonitorServiceType,
} from "Common/Server/Services/MonitorService";
import MonitorStatusService, {
Service as MonitorStatusServiceType,
} from "Common/Server/Services/MonitorStatusService";
@@ -410,7 +408,6 @@ import IncidentTemplateOwnerTeam from "Common/Models/DatabaseModels/IncidentTemp
import IncidentTemplateOwnerUser from "Common/Models/DatabaseModels/IncidentTemplateOwnerUser";
import Label from "Common/Models/DatabaseModels/Label";
import Monitor from "Common/Models/DatabaseModels/Monitor";
import MonitorCustomField from "Common/Models/DatabaseModels/MonitorCustomField";
import MonitorGroupOwnerTeam from "Common/Models/DatabaseModels/MonitorGroupOwnerTeam";
import MonitorGroupOwnerUser from "Common/Models/DatabaseModels/MonitorGroupOwnerUser";
@@ -568,6 +565,25 @@ import OnCallDutyPolicyOwnerUser from "Common/Models/DatabaseModels/OnCallDutyPo
import OnCallDutyPolicyOwnerUserService, {
Service as OnCallDutyPolicyOwnerUserServiceType,
} from "Common/Server/Services/OnCallDutyPolicyOwnerUserService";
import MonitorLog from "Common/Models/AnalyticsModels/MonitorLog";
import MonitorLogService, {
Service as MonitorLogServiceType,
} from "Common/Server/Services/MonitorLogService";
//OnCallDutyPolicyTimeLog
import OnCallDutyPolicyTimeLog from "Common/Models/DatabaseModels/OnCallDutyPolicyTimeLog";
import OnCallDutyPolicyTimeLogService, {
Service as OnCallDutyPolicyTimeLogServiceType,
} from "Common/Server/Services/OnCallDutyPolicyTimeLogService";
// statu spage announcement templates
import StatusPageAnnouncementTemplate from "Common/Models/DatabaseModels/StatusPageAnnouncementTemplate";
import StatusPageAnnouncementTemplateService, {
Service as StatusPageAnnouncementTemplateServiceType,
} from "Common/Server/Services/StatusPageAnnouncementTemplateService";
// Open API Spec
import OpenAPI from "Common/Server/API/OpenAPI";
const BaseAPIFeatureSet: FeatureSet = {
init: async (): Promise<void> => {
@@ -583,6 +599,16 @@ const BaseAPIFeatureSet: FeatureSet = {
).getRouter(),
);
app.use(`/${APP_NAME.toLocaleLowerCase()}`, OpenAPI.getRouter());
app.use(
`/${APP_NAME.toLocaleLowerCase()}`,
new BaseAnalyticsAPI<MonitorLog, MonitorLogServiceType>(
MonitorLog,
MonitorLogService,
).getRouter(),
);
app.use(
`/${APP_NAME.toLocaleLowerCase()}`,
new BaseAPI<AlertState, AlertStateServiceType>(
@@ -591,6 +617,27 @@ const BaseAPIFeatureSet: FeatureSet = {
).getRouter(),
);
// status page announcement templates
app.use(
`/${APP_NAME.toLocaleLowerCase()}`,
new BaseAPI<
StatusPageAnnouncementTemplate,
StatusPageAnnouncementTemplateServiceType
>(
StatusPageAnnouncementTemplate,
StatusPageAnnouncementTemplateService,
).getRouter(),
);
// OnCallDutyPolicyTimeLogService
app.use(
`/${APP_NAME.toLocaleLowerCase()}`,
new BaseAPI<OnCallDutyPolicyTimeLog, OnCallDutyPolicyTimeLogServiceType>(
OnCallDutyPolicyTimeLog,
OnCallDutyPolicyTimeLogService,
).getRouter(),
);
// on-call policy owner user.
app.use(
`/${APP_NAME.toLocaleLowerCase()}`,
@@ -1448,14 +1495,6 @@ const BaseAPIFeatureSet: FeatureSet = {
).getRouter(),
);
app.use(
`/${APP_NAME.toLocaleLowerCase()}`,
new BaseAPI<Monitor, MonitorServiceType>(
Monitor,
MonitorService,
).getRouter(),
);
app.use(
`/${APP_NAME.toLocaleLowerCase()}`,
new BaseAPI<SmsLog, SmsLogServiceType>(SmsLog, SmsLogService).getRouter(),
@@ -1502,6 +1541,7 @@ const BaseAPIFeatureSet: FeatureSet = {
);
app.use(`/${APP_NAME.toLocaleLowerCase()}`, new ShortLinkAPI().getRouter());
app.use(`/${APP_NAME.toLocaleLowerCase()}`, new MonitorAPI().getRouter());
app.use(
`/${APP_NAME.toLocaleLowerCase()}`,
new StatusPageAPI().getRouter(),

View File

@@ -0,0 +1,28 @@
{{> Start this}}
{{> Logo this}}
{{> EmailTitle title=("Your OneUptime Project Subscription is overdue") }}
{{> InfoBlock info="Here are the details: "}}
{{> DetailBoxStart this }}
{{> DetailBoxField title="Project Name:" text=projectName }}
{{> DetailBoxField title="Project ID:" text=projectId }}
{{> DetailBoxField title="Subscription Status:" text="Overdue" }}
{{> DetailBoxField title="Details:" text="Some of your invoices are unpaid. Please pay the invoices to avoid deactivation of this project." }}
{{> DetailBoxEnd this }}
{{> InfoBlock info="You can pay the outstanding invoices by clicking on the link below - "}}
{{> ButtonBlock buttonUrl=dashboardLink buttonText="View on Dashboard"}}
{{> InfoBlock info="You can also copy and paste this link:"}}
{{> InfoBlock info=dashboardLink}}
{{> InfoBlock info="You have been sent this email because you are the owner of this project."}}
{{> Footer this }}
{{> End this}}

View File

@@ -10,8 +10,6 @@
{{> DetailBoxField title="Resources Affected: " text=resourcesAffected }}
{{> DetailBoxField title="Severity: " text=incidentSeverity }}
{{> DetailBoxField title="State: " text=incidentState }}
{{> DetailBoxField title="Description: " text="" }}
{{> DetailBoxField title="" text=incidentDescription }}
{{> DetailBoxEnd this }}
{{> InfoBlock info=(concat subscriberEmailNotificationFooterText "") }}

View File

@@ -15,8 +15,6 @@
{{#if resourcesAffected}}
{{> DetailBoxField title="Resources Affected: " text=resourcesAffected }}
{{/if}}
{{> DetailBoxField title="Event Description: " text="" }}
{{> DetailBoxField title="" text=eventDescription }}
{{> DetailBoxEnd this }}
{{> InfoBlock info=(concat subscriberEmailNotificationFooterText "") }}

View File

@@ -12,6 +12,7 @@ import Realtime from "Common/Server/Utils/Realtime";
import App from "Common/Server/Utils/StartServer";
import Telemetry from "Common/Server/Utils/Telemetry";
import "ejs";
import OpenAPIUtil from "Common/Server/Utils/OpenAPI";
const APP_NAME: string = "api";
@@ -96,6 +97,9 @@ const init: PromiseVoidFunction = async (): Promise<void> => {
// Add default routes to the app
await App.addDefaultRoutes();
// Generate OpenAPI spec (this automatically saves it to cache)
OpenAPIUtil.generateOpenAPISpec();
} catch (err) {
logger.error("App Init Failed:");
logger.error(err);

View File

@@ -370,7 +370,7 @@
<concurrent_threads_soft_limit_ratio_to_cores>2</concurrent_threads_soft_limit_ratio_to_cores>
<!-- Maximum number of concurrent queries. -->
<max_concurrent_queries>1000</max_concurrent_queries>
<max_concurrent_queries>10000</max_concurrent_queries>
<!-- Maximum memory usage (resident set size) for server process.
Zero value or unset means default. Default is "max_server_memory_usage_to_ram_ratio" of available physical RAM.

View File

@@ -39,6 +39,7 @@ export default class AnalyticsBaseModel extends CommonModel {
sortKeys: Array<string>; // this should be the subset of tableColumns
enableWorkflowOn?: EnableWorkflowOn | undefined;
enableRealtimeEventsOn?: EnableRealtimeEventsOn | undefined;
partitionKey: string;
}) {
super({
tableColumns: data.tableColumns,
@@ -138,13 +139,7 @@ export default class AnalyticsBaseModel extends CommonModel {
this.enableWorkflowOn = data.enableWorkflowOn;
this.crudApiPath = data.crudApiPath;
this.enableRealtimeEventsOn = data.enableRealtimeEventsOn;
// initialize Arrays.
for (const column of this.tableColumns) {
if (column.type === TableColumnType.NestedModel) {
this.setColumnValue(column.key, []);
}
}
this.partitionKey = data.partitionKey;
}
private _enableWorkflowOn: EnableWorkflowOn | undefined;
@@ -187,6 +182,14 @@ export default class AnalyticsBaseModel extends CommonModel {
this._primaryKeys = v;
}
private _partitionKey: string = "";
public get partitionKey(): string {
return this._partitionKey;
}
public set partitionKey(v: string) {
this._partitionKey = v;
}
private _sortKeys: Array<string> = [];
public get sortKeys(): Array<string> {
return this._sortKeys;

View File

@@ -3,10 +3,12 @@ import AnalyticsTableColumn from "../../../Types/AnalyticsDatabase/TableColumn";
import TableColumnType from "../../../Types/AnalyticsDatabase/TableColumnType";
import GreaterThan from "../../../Types/BaseDatabase/GreaterThan";
import GreaterThanOrEqual from "../../../Types/BaseDatabase/GreaterThanOrEqual";
import GreaterThanOrNull from "../../../Types/BaseDatabase/GreaterThanOrNull";
import InBetween from "../../../Types/BaseDatabase/InBetween";
import Includes from "../../../Types/BaseDatabase/Includes";
import LessThan from "../../../Types/BaseDatabase/LessThan";
import LessThanOrEqual from "../../../Types/BaseDatabase/LessThanOrEqual";
import LessThanOrNull from "../../../Types/BaseDatabase/LessThanOrNull";
import NotEqual from "../../../Types/BaseDatabase/NotEqual";
import Search from "../../../Types/BaseDatabase/Search";
import { CompareType } from "../../../Types/Database/CompareBase";
@@ -31,6 +33,8 @@ export type RecordValue =
| LessThan<CompareType>
| LessThanOrEqual<CompareType>
| GreaterThanOrEqual<CompareType>
| GreaterThanOrNull<CompareType>
| LessThanOrNull<CompareType>
| Array<number>
| Array<string>
| Array<ObjectID>
@@ -72,7 +76,7 @@ export default class CommonModel {
if (column.type === TableColumnType.JSON && typeof value === "string") {
try {
value = JSONFunctions.parse(value);
} catch (e) {
} catch {
value = {};
}
}
@@ -87,7 +91,7 @@ export default class CommonModel {
if (!Array.isArray(value)) {
throw new BadDataException("Not an array");
}
} catch (e) {
} catch {
value = [];
}
}
@@ -203,19 +207,6 @@ export default class CommonModel {
return;
}
if (recordValue instanceof Array) {
if (recordValue.length > 0 && column.nestedModelType) {
json[column.key] = CommonModel.toJSONArray(
recordValue as Array<CommonModel>,
column.nestedModelType,
);
} else {
json[column.key] = recordValue;
}
return;
}
json[column.key] = recordValue;
});

View File

@@ -1,8 +0,0 @@
import AnalyticsTableColumn from "../../../Types/AnalyticsDatabase/TableColumn";
import CommonModel from "./CommonModel";
export default class NestedModel extends CommonModel {
public constructor(data: { tableColumns: Array<AnalyticsTableColumn> }) {
super(data);
}
}

View File

@@ -12,8 +12,8 @@ export default class ExceptionInstance extends AnalyticsBaseModel {
super({
tableName: "ExceptionItem",
tableEngine: AnalyticsTableEngine.MergeTree,
singularName: "Exception",
pluralName: "Exceptions",
singularName: "Exception Instance",
pluralName: "Exception Instances",
enableRealtimeEventsOn: {
create: true,
},
@@ -371,6 +371,7 @@ export default class ExceptionInstance extends AnalyticsBaseModel {
],
sortKeys: ["projectId", "time", "serviceId", "fingerprint"],
primaryKeys: ["projectId", "time", "serviceId", "fingerprint"],
partitionKey: "sipHash64(projectId) % 16",
});
}

View File

@@ -4,6 +4,7 @@ import Metric from "./Metric";
import Span from "./Span";
import TelemetryAttribute from "./TelemetryAttribute";
import ExceptionInstance from "./ExceptionInstance";
import MonitorLog from "./MonitorLog";
const AnalyticsModels: Array<{ new (): AnalyticsBaseModel }> = [
Log,
@@ -11,6 +12,7 @@ const AnalyticsModels: Array<{ new (): AnalyticsBaseModel }> = [
Metric,
TelemetryAttribute,
ExceptionInstance,
MonitorLog,
];
const modelTypeMap: { [key: string]: { new (): AnalyticsBaseModel } } = {};

View File

@@ -14,9 +14,6 @@ export default class Log extends AnalyticsBaseModel {
tableName: "LogItem",
tableEngine: AnalyticsTableEngine.MergeTree,
singularName: "Log",
enableRealtimeEventsOn: {
create: true,
},
accessControl: {
read: [
Permission.ProjectOwner,
@@ -280,6 +277,7 @@ export default class Log extends AnalyticsBaseModel {
],
sortKeys: ["projectId", "time", "serviceId"],
primaryKeys: ["projectId", "time", "serviceId"],
partitionKey: "sipHash64(projectId) % 16",
});
}

View File

@@ -510,6 +510,7 @@ export default class Metric extends AnalyticsBaseModel {
],
sortKeys: ["projectId", "time", "serviceId"],
primaryKeys: ["projectId", "time", "serviceId"],
partitionKey: "sipHash64(projectId) % 16",
});
}

View File

@@ -0,0 +1,173 @@
import AnalyticsBaseModel from "./AnalyticsBaseModel/AnalyticsBaseModel";
import Route from "../../Types/API/Route";
import AnalyticsTableEngine from "../../Types/AnalyticsDatabase/AnalyticsTableEngine";
import AnalyticsTableColumn from "../../Types/AnalyticsDatabase/TableColumn";
import TableColumnType from "../../Types/AnalyticsDatabase/TableColumnType";
import { JSONObject } from "../../Types/JSON";
import ObjectID from "../../Types/ObjectID";
import Permission from "../../Types/Permission";
export default class MonitorLog extends AnalyticsBaseModel {
public constructor() {
super({
tableName: "MonitorLog",
tableEngine: AnalyticsTableEngine.MergeTree,
singularName: "Monitor Log",
accessControl: {
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.ReadProjectMonitor,
],
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CreateProjectMonitor,
],
update: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.EditProjectMonitor,
],
delete: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.DeleteProjectMonitor,
],
},
pluralName: "Monitor Logs",
crudApiPath: new Route("/monitor-log"),
tableColumns: [
new AnalyticsTableColumn({
key: "projectId",
title: "Project ID",
description: "ID of project",
required: true,
type: TableColumnType.ObjectID,
isTenantId: true,
accessControl: {
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.ReadProjectMonitor,
],
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CreateProjectMonitor,
],
update: [],
},
}),
new AnalyticsTableColumn({
key: "monitorId",
title: "Monitor ID",
description: "ID of the monitor which this logs belongs to",
required: true,
type: TableColumnType.ObjectID,
accessControl: {
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.ReadProjectMonitor,
],
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CreateProjectMonitor,
],
update: [],
},
}),
new AnalyticsTableColumn({
key: "time",
title: "Time",
description: "When was the log created?",
required: true,
type: TableColumnType.Date,
accessControl: {
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.ReadProjectMonitor,
],
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CreateProjectMonitor,
],
update: [],
},
}),
new AnalyticsTableColumn({
key: "logBody",
title: "Log Body",
description: "The body of the log",
required: true,
defaultValue: {},
type: TableColumnType.JSON,
accessControl: {
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.ReadProjectMonitor,
],
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CreateProjectMonitor,
],
update: [],
},
}),
],
sortKeys: ["projectId", "time", "monitorId"],
primaryKeys: ["projectId", "time", "monitorId"],
partitionKey: "sipHash64(projectId) % 16",
});
}
public get projectId(): ObjectID | undefined {
return this.getColumnValue("projectId") as ObjectID | undefined;
}
public set projectId(v: ObjectID | undefined) {
this.setColumnValue("projectId", v);
}
public get monitorId(): ObjectID | undefined {
return this.getColumnValue("monitorId") as ObjectID | undefined;
}
public set monitorId(v: ObjectID | undefined) {
this.setColumnValue("monitorId", v);
}
public get time(): Date | undefined {
return this.getColumnValue("time") as Date | undefined;
}
public set time(v: Date | undefined) {
this.setColumnValue("time", v);
}
public get logBody(): JSONObject | undefined {
return this.getColumnValue("logBody") as JSONObject | undefined;
}
public set logBody(v: JSONObject | undefined) {
this.setColumnValue("logBody", v);
}
}

View File

@@ -1,59 +0,0 @@
import AnalyticsTableColumn from "../../../Types/AnalyticsDatabase/TableColumn";
import TableColumnType from "../../../Types/AnalyticsDatabase/TableColumnType";
import NestedModel from "../AnalyticsBaseModel/NestedModel";
export default class KeyValueNestedModel extends NestedModel {
public constructor() {
super({
tableColumns: [
new AnalyticsTableColumn({
key: "key",
title: "Key",
description: "Key of the attribute",
required: true,
type: TableColumnType.Text,
}),
new AnalyticsTableColumn({
key: "stringValue",
title: "String Value",
description: "Key of the attribute",
required: false,
type: TableColumnType.Text,
}),
new AnalyticsTableColumn({
key: "numberValue",
title: "Number Value",
description: "Value of the attribute",
required: false,
type: TableColumnType.Number,
}),
],
});
}
public get key(): string | undefined {
return this.getColumnValue("key");
}
public set key(v: string | undefined) {
this.setColumnValue("key", v);
}
public get stringValue(): string | undefined {
return this.getColumnValue("stringValue");
}
public set stringValue(v: string | undefined) {
this.setColumnValue("stringValue", v);
}
public get numberValue(): number | undefined {
return this.getColumnValue("numberValue");
}
public set numberValue(v: number | undefined) {
this.setColumnValue("numberValue", v);
}
}

View File

@@ -494,6 +494,7 @@ export default class Span extends AnalyticsBaseModel {
],
sortKeys: ["projectId", "startTime", "serviceId", "traceId"],
primaryKeys: ["projectId", "startTime", "serviceId", "traceId"],
partitionKey: "sipHash64(projectId) % 16",
});
}

View File

@@ -134,6 +134,7 @@ export default class TelemetryAttribute extends AnalyticsBaseModel {
],
sortKeys: ["projectId", "telemetryType"],
primaryKeys: ["projectId", "telemetryType"],
partitionKey: "sipHash64(projectId) % 16",
});
}

View File

@@ -217,7 +217,7 @@ export default class Alert extends BaseModel {
type: TableColumnType.Markdown,
title: "Description",
description:
"Short description of this alert. This is in markdown and will be visible on the status page.",
"Short description of this alert. This will be visible on the status page. This is in markdown.",
})
@Column({
nullable: true,
@@ -570,11 +570,13 @@ export default class Alert extends BaseModel {
@TableColumn({
type: TableColumnType.ObjectID,
required: true,
isDefaultValueColumn: true,
title: "Current Alert State ID",
description: "Current Alert State ID",
})
@Column({
type: ColumnType.ObjectID,
nullable: false,
transformer: ObjectID.getDatabaseTransformer(),
})
@@ -758,12 +760,7 @@ export default class Alert extends BaseModel {
public customFields?: JSONObject = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CreateAlert,
],
create: [],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
@@ -775,10 +772,13 @@ export default class Alert extends BaseModel {
@Index()
@TableColumn({
type: TableColumnType.Boolean,
computed: true,
hideColumnInDocumentation: true,
required: true,
isDefaultValueColumn: true,
title: "Are Owners Notified Of Alert Creation?",
description: "Are owners notified of when this alert is created?",
defaultValue: false,
})
@Column({
type: ColumnType.Boolean,
@@ -936,6 +936,7 @@ export default class Alert extends BaseModel {
title: "Is created automatically?",
description:
"Is this alert created by OneUptime Probe or Workers automatically (and not created manually by a user)?",
defaultValue: false,
})
@Column({
type: ColumnType.Boolean,
@@ -1028,6 +1029,7 @@ export default class Alert extends BaseModel {
isDefaultValueColumn: false,
required: false,
type: TableColumnType.Number,
computed: true,
title: "Alert Number",
description: "Alert Number",
})

View File

@@ -218,7 +218,7 @@ export default class AlertCustomField extends BaseModel {
type: ColumnType.ShortText,
length: ColumnLength.ShortText,
})
public type?: CustomFieldType = undefined;
public customFieldType?: CustomFieldType = undefined;
@ColumnAccessControl({
create: [

View File

@@ -340,12 +340,7 @@ export default class AlertInternalNote extends BaseModel {
public note?: string = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CreateAlertInternalNote,
],
create: [],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
@@ -357,10 +352,13 @@ export default class AlertInternalNote extends BaseModel {
@Index()
@TableColumn({
type: TableColumnType.Boolean,
computed: true,
hideColumnInDocumentation: true,
required: true,
isDefaultValueColumn: true,
title: "Are Owners Notified",
description: "Are owners notified of this resource ownership?",
defaultValue: false,
})
@Column({
type: ColumnType.Boolean,

View File

@@ -406,6 +406,7 @@ export default class AlertOwnerTeam extends BaseModel {
isDefaultValueColumn: true,
title: "Are Owners Notified",
description: "Are owners notified of this resource ownership?",
defaultValue: false,
})
@Column({
type: ColumnType.Boolean,

View File

@@ -405,6 +405,7 @@ export default class AlertOwnerUser extends BaseModel {
isDefaultValueColumn: true,
title: "Are Owners Notified",
description: "Are owners notified of this resource ownership?",
defaultValue: false,
})
@Column({
type: ColumnType.Boolean,

View File

@@ -192,6 +192,7 @@ export default class AlertSeverity extends BaseModel {
required: true,
unique: true,
type: TableColumnType.Slug,
computed: true,
title: "Slug",
description: "Friendly globally unique name for your object",
})

View File

@@ -387,12 +387,7 @@ export default class AlertStateTimeline extends BaseModel {
public alertStateId?: ObjectID = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CreateAlertStateTimeline,
],
create: [],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
@@ -404,10 +399,13 @@ export default class AlertStateTimeline extends BaseModel {
@Index()
@TableColumn({
type: TableColumnType.Boolean,
computed: true,
hideColumnInDocumentation: true,
required: true,
isDefaultValueColumn: true,
title: "Are Owners Notified",
description: "Are owners notified of state change?",
defaultValue: false,
})
@Column({
type: ColumnType.Boolean,

View File

@@ -201,6 +201,7 @@ export default class ApiKey extends BaseModel {
required: true,
unique: true,
type: TableColumnType.Slug,
computed: true,
title: "Slug",
description: "Friendly globally unique name for your object",
})
@@ -348,9 +349,7 @@ export default class ApiKey extends BaseModel {
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ReadProjectApiKey,
],
read: [
Permission.ProjectOwner,
@@ -368,6 +367,7 @@ export default class ApiKey extends BaseModel {
type: TableColumnType.ObjectID,
isDefaultValueColumn: false,
title: "API Key",
computed: true,
description: "Secret API Key",
})
@Column({

View File

@@ -425,7 +425,11 @@ export default class APIKeyPermission extends BaseModel {
Permission.EditProjectApiKey,
],
})
@TableColumn({ isDefaultValueColumn: true, type: TableColumnType.Boolean })
@TableColumn({
isDefaultValueColumn: true,
type: TableColumnType.Boolean,
defaultValue: false,
})
@Column({
type: ColumnType.Boolean,
default: false,

View File

@@ -234,7 +234,7 @@ export default class BillingPaymentMethod extends BaseModel {
nullable: false,
unique: false,
})
public type?: string = undefined;
public paymentMethodType?: string = undefined;
@ColumnAccessControl({
create: [],

View File

@@ -247,6 +247,7 @@ export default class CallLog extends BaseModel {
description: "Call Cost in USD Cents",
canReadOnRelationQuery: false,
isDefaultValueColumn: true,
defaultValue: 0,
})
@Column({
nullable: false,

View File

@@ -208,6 +208,7 @@ export default class CopilotCodeRepository extends BaseModel {
required: true,
unique: true,
type: TableColumnType.Slug,
computed: true,
title: "Slug",
description: "Friendly globally unique name for your object",
})
@@ -425,12 +426,7 @@ export default class CopilotCodeRepository extends BaseModel {
public labels?: Array<Label> = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CreateCopilotCodeRepository,
],
create: [],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
@@ -449,6 +445,7 @@ export default class CopilotCodeRepository extends BaseModel {
@TableColumn({
type: TableColumnType.ObjectID,
isDefaultValueColumn: false,
computed: true,
title: "Secret Token",
description:
"Secret Token for this code repository. This is used to connect this code repository to OneUptime.",

View File

@@ -188,6 +188,7 @@ export default class Dashboard extends BaseModel {
required: true,
unique: true,
type: TableColumnType.Slug,
computed: true,
title: "Slug",
description: "Friendly globally unique name for your object",
})

View File

@@ -61,7 +61,7 @@ export default class DatabaseBaseModel extends BaseEntity {
public _id?: string = undefined;
@TableColumn({
title: "Created",
title: "Created At",
type: TableColumnType.Date,
description: "Date and Time when the object was created.",
})
@@ -71,7 +71,7 @@ export default class DatabaseBaseModel extends BaseEntity {
public createdAt?: Date = undefined;
@TableColumn({
title: "Updated",
title: "Updated At",
type: TableColumnType.Date,
description: "Date and Time when the object was updated.",
})
@@ -81,7 +81,7 @@ export default class DatabaseBaseModel extends BaseEntity {
public updatedAt?: Date = undefined;
@TableColumn({
title: "Deleted",
title: "Deleted At",
type: TableColumnType.Date,
description: "Date and Time when the object was deleted.",
})
@@ -92,8 +92,9 @@ export default class DatabaseBaseModel extends BaseEntity {
@TableColumn({
title: "Version",
type: TableColumnType.Version,
type: TableColumnType.Number,
description: "Object version",
hideColumnInDocumentation: true,
})
@VersionColumn()
public version?: number = undefined;

View File

@@ -21,8 +21,8 @@ export default class FileModel extends BaseModel {
}
@ColumnAccessControl({
create: [Permission.CurrentUser],
read: [Permission.CurrentUser],
create: [Permission.CurrentUser, Permission.AuthenticatedRequest],
read: [Permission.CurrentUser, Permission.AuthenticatedRequest],
update: [],
})
@TableColumn({
@@ -37,8 +37,8 @@ export default class FileModel extends BaseModel {
public file?: Buffer = undefined;
@ColumnAccessControl({
create: [Permission.CurrentUser],
read: [Permission.CurrentUser],
create: [Permission.CurrentUser, Permission.AuthenticatedRequest],
read: [Permission.CurrentUser, Permission.AuthenticatedRequest],
update: [],
})
@TableColumn({
@@ -56,8 +56,8 @@ export default class FileModel extends BaseModel {
public name?: string = undefined;
@ColumnAccessControl({
create: [Permission.CurrentUser],
read: [Permission.CurrentUser],
create: [Permission.CurrentUser, Permission.AuthenticatedRequest],
read: [Permission.CurrentUser, Permission.AuthenticatedRequest],
update: [],
})
@TableColumn({
@@ -70,11 +70,11 @@ export default class FileModel extends BaseModel {
type: ColumnType.ShortText,
length: ColumnLength.ShortText,
})
public type?: MimeType = undefined;
public fileType?: MimeType = undefined;
@ColumnAccessControl({
create: [Permission.CurrentUser],
read: [Permission.CurrentUser],
create: [Permission.CurrentUser, Permission.AuthenticatedRequest],
read: [Permission.CurrentUser, Permission.AuthenticatedRequest],
update: [],
})
@TableColumn({
@@ -91,8 +91,8 @@ export default class FileModel extends BaseModel {
public slug?: string = undefined;
@ColumnAccessControl({
create: [Permission.CurrentUser],
read: [Permission.CurrentUser],
create: [Permission.CurrentUser, Permission.AuthenticatedRequest],
read: [Permission.CurrentUser, Permission.AuthenticatedRequest],
update: [],
})
@TableColumn({

View File

@@ -170,6 +170,7 @@ export default class Domain extends BaseModel {
required: true,
unique: true,
type: TableColumnType.Slug,
computed: true,
title: "Slug",
description: "Friendly globally unique name for your object",
})
@@ -317,6 +318,7 @@ export default class Domain extends BaseModel {
type: TableColumnType.Boolean,
title: "Verified",
description: "Is this domain verified?",
defaultValue: false,
})
@Column({
type: ColumnType.Boolean,

View File

@@ -2,11 +2,13 @@ import FileModel from "./DatabaseBaseModel/FileModel";
import Route from "../../Types/API/Route";
import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl";
import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
import EnableDocumentation from "../../Types/Database/EnableDocumentation";
import TableMetadata from "../../Types/Database/TableMetadata";
import IconProp from "../../Types/Icon/IconProp";
import Permission from "../../Types/Permission";
import { Entity } from "typeorm";
@EnableDocumentation()
@TableMetadata({
tableName: "File",
singularName: "File",
@@ -19,8 +21,8 @@ import { Entity } from "typeorm";
})
@CrudApiEndpoint(new Route("/file"))
@TableAccessControl({
create: [Permission.CurrentUser],
read: [Permission.CurrentUser],
create: [Permission.CurrentUser, Permission.AuthenticatedRequest],
read: [Permission.CurrentUser, Permission.AuthenticatedRequest],
delete: [],
update: [],
})

View File

@@ -355,6 +355,7 @@ export default class GlobalConfig extends GlobalConfigModel {
})
@TableColumn({
type: TableColumnType.ObjectID,
computed: true,
title: "Master API Key",
description:
"This API key has root access to all the resources in all the projects on OneUptime.",

View File

@@ -61,7 +61,7 @@ export default class GreenlockCertificate extends BaseModel {
read: [],
update: [],
})
@TableColumn({ type: TableColumnType.Boolean })
@TableColumn({ type: TableColumnType.Boolean, defaultValue: false })
@Column({
type: ColumnType.Boolean,
nullable: false,

View File

@@ -229,12 +229,7 @@ export default class Incident extends BaseModel {
@Index()
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CreateProjectIncident,
],
create: [],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
@@ -247,6 +242,7 @@ export default class Incident extends BaseModel {
required: true,
unique: true,
type: TableColumnType.Slug,
computed: true,
title: "Slug",
description: "Friendly globally unique name for your object",
})
@@ -509,7 +505,7 @@ export default class Incident extends BaseModel {
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CreateProjectIncident,
@@ -530,6 +526,7 @@ export default class Incident extends BaseModel {
@TableColumn({
manyToOneRelationColumn: "currentIncidentStateId",
type: TableColumnType.Entity,
computed: true,
modelType: IncidentState,
title: "Current Incident State",
description:
@@ -550,7 +547,7 @@ export default class Incident extends BaseModel {
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CreateProjectIncident,
@@ -571,6 +568,7 @@ export default class Incident extends BaseModel {
@Index()
@TableColumn({
type: TableColumnType.ObjectID,
isDefaultValueColumn: true,
required: true,
title: "Current Incident State ID",
description: "Current Incident State ID",
@@ -670,7 +668,12 @@ export default class Incident extends BaseModel {
Permission.ProjectMember,
Permission.ReadProjectIncident,
],
update: [],
update: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.EditProjectIncident,
],
})
@TableColumn({
manyToOneRelationColumn: "changeMonitorStatusToId",
@@ -740,9 +743,12 @@ export default class Incident extends BaseModel {
})
@TableColumn({
isDefaultValueColumn: true,
computed: true,
hideColumnInDocumentation: true,
type: TableColumnType.Boolean,
title: "Are subscribers notified?",
description: "Are subscribers notified about this incident?",
defaultValue: false,
})
@Column({
type: ColumnType.Boolean,
@@ -770,6 +776,7 @@ export default class Incident extends BaseModel {
type: TableColumnType.Boolean,
title: "Should subscribers be notified?",
description: "Should subscribers be notified about this incident?",
defaultValue: true,
})
@Column({
type: ColumnType.Boolean,
@@ -812,12 +819,7 @@ export default class Incident extends BaseModel {
public customFields?: JSONObject = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CreateProjectIncident,
],
create: [],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
@@ -829,10 +831,13 @@ export default class Incident extends BaseModel {
@Index()
@TableColumn({
type: TableColumnType.Boolean,
computed: true,
hideColumnInDocumentation: true,
required: true,
isDefaultValueColumn: true,
title: "Are Owners Notified Of Resource Creation?",
description: "Are owners notified of when this resource is created?",
defaultValue: false,
})
@Column({
type: ColumnType.Boolean,
@@ -1020,6 +1025,7 @@ export default class Incident extends BaseModel {
title: "Is created automatically?",
description:
"Is this incident created by OneUptime Probe or Workers automatically (and not created manually by a user)?",
defaultValue: false,
})
@Column({
type: ColumnType.Boolean,
@@ -1095,10 +1101,7 @@ export default class Incident extends BaseModel {
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CreateProjectIncident,
],
read: [
Permission.ProjectOwner,
@@ -1115,6 +1118,7 @@ export default class Incident extends BaseModel {
type: TableColumnType.Number,
title: "Incident Number",
description: "Incident Number",
computed: true,
})
@Column({
type: ColumnType.Number,
@@ -1166,6 +1170,7 @@ export default class Incident extends BaseModel {
type: TableColumnType.Boolean,
title: "Should be visible on status page?",
description: "Should this incident be visible on the status page?",
defaultValue: true,
})
@Column({
type: ColumnType.Boolean,

View File

@@ -218,7 +218,7 @@ export default class IncidentCustomField extends BaseModel {
type: ColumnType.ShortText,
length: ColumnLength.ShortText,
})
public type?: CustomFieldType = undefined;
public customFieldType?: CustomFieldType = undefined;
@ColumnAccessControl({
create: [

View File

@@ -340,12 +340,7 @@ export default class IncidentInternalNote extends BaseModel {
public note?: string = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CreateIncidentInternalNote,
],
create: [],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
@@ -357,10 +352,13 @@ export default class IncidentInternalNote extends BaseModel {
@Index()
@TableColumn({
type: TableColumnType.Boolean,
computed: true,
hideColumnInDocumentation: true,
required: true,
isDefaultValueColumn: true,
title: "Are Owners Notified",
description: "Are owners notified of this resource ownership?",
defaultValue: false,
})
@Column({
type: ColumnType.Boolean,

View File

@@ -385,12 +385,7 @@ export default class IncidentOwnerTeam extends BaseModel {
public deletedByUserId?: ObjectID = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CreateIncidentOwnerTeam,
],
create: [],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
@@ -402,10 +397,13 @@ export default class IncidentOwnerTeam extends BaseModel {
@Index()
@TableColumn({
type: TableColumnType.Boolean,
computed: true,
hideColumnInDocumentation: true,
required: true,
isDefaultValueColumn: true,
title: "Are Owners Notified",
description: "Are owners notified of this resource ownership?",
defaultValue: false,
})
@Column({
type: ColumnType.Boolean,

View File

@@ -405,6 +405,7 @@ export default class IncidentOwnerUser extends BaseModel {
isDefaultValueColumn: true,
title: "Are Owners Notified",
description: "Are owners notified of this resource ownership?",
defaultValue: false,
})
@Column({
type: ColumnType.Boolean,

View File

@@ -351,9 +351,12 @@ export default class IncidentPublicNote extends BaseModel {
})
@TableColumn({
isDefaultValueColumn: true,
computed: true,
hideColumnInDocumentation: true,
type: TableColumnType.Boolean,
title: "Are subscribers notified?",
description: "Are subscribers notified about this note?",
defaultValue: false,
})
@Column({
type: ColumnType.Boolean,
@@ -381,6 +384,7 @@ export default class IncidentPublicNote extends BaseModel {
type: TableColumnType.Boolean,
title: "Should subscribers be notified?",
description: "Should subscribers be notified about this note?",
defaultValue: true,
})
@Column({
type: ColumnType.Boolean,
@@ -390,12 +394,7 @@ export default class IncidentPublicNote extends BaseModel {
undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CreateIncidentPublicNote,
],
create: [],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
@@ -407,10 +406,13 @@ export default class IncidentPublicNote extends BaseModel {
@Index()
@TableColumn({
type: TableColumnType.Boolean,
computed: true,
hideColumnInDocumentation: true,
required: true,
isDefaultValueColumn: true,
title: "Are Owners Notified",
description: "Are owners notified of this resource ownership?",
defaultValue: false,
})
@Column({
type: ColumnType.Boolean,

View File

@@ -192,6 +192,7 @@ export default class IncidentSeverity extends BaseModel {
required: true,
unique: true,
type: TableColumnType.Slug,
computed: true,
title: "Slug",
description: "Friendly globally unique name for your object",
})

View File

@@ -192,6 +192,7 @@ export default class IncidentState extends BaseModel {
required: true,
unique: true,
type: TableColumnType.Slug,
computed: true,
title: "Slug",
description: "Friendly globally unique name for your object",
})

View File

@@ -387,12 +387,7 @@ export default class IncidentStateTimeline extends BaseModel {
public incidentStateId?: ObjectID = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CreateIncidentStateTimeline,
],
create: [],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
@@ -403,9 +398,12 @@ export default class IncidentStateTimeline extends BaseModel {
})
@TableColumn({
isDefaultValueColumn: true,
computed: true,
hideColumnInDocumentation: true,
type: TableColumnType.Boolean,
title: "Are subscribers notified?",
description: "Are subscribers notified about this incident state change?",
defaultValue: false,
})
@Column({
type: ColumnType.Boolean,
@@ -441,12 +439,7 @@ export default class IncidentStateTimeline extends BaseModel {
public shouldStatusPageSubscribersBeNotified?: boolean = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CreateIncidentStateTimeline,
],
create: [],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
@@ -458,6 +451,8 @@ export default class IncidentStateTimeline extends BaseModel {
@Index()
@TableColumn({
type: TableColumnType.Boolean,
computed: true,
hideColumnInDocumentation: true,
required: true,
isDefaultValueColumn: true,
title: "Are Owners Notified",

View File

@@ -295,12 +295,7 @@ export default class IncidentTemplate extends BaseModel {
@Index()
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CreateIncidentTemplate,
],
create: [],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
@@ -313,6 +308,7 @@ export default class IncidentTemplate extends BaseModel {
required: true,
unique: true,
type: TableColumnType.Slug,
computed: true,
title: "Slug",
description: "Friendly globally unique name for your object",
})

View File

@@ -387,12 +387,7 @@ export default class IncidentTemplateOwnerTeam extends BaseModel {
public deletedByUserId?: ObjectID = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CreateIncidentTemplateOwnerTeam,
],
create: [],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
@@ -404,10 +399,13 @@ export default class IncidentTemplateOwnerTeam extends BaseModel {
@Index()
@TableColumn({
type: TableColumnType.Boolean,
computed: true,
hideColumnInDocumentation: true,
required: true,
isDefaultValueColumn: true,
title: "Are Owners Notified",
description: "Are owners notified of this resource ownership?",
defaultValue: false,
})
@Column({
type: ColumnType.Boolean,

View File

@@ -397,12 +397,7 @@ export default class IncidentTemplateOwnerUser extends BaseModel {
public deletedByUserId?: ObjectID = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CreateIncidentTemplateOwnerUser,
],
create: [],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
@@ -415,10 +410,13 @@ export default class IncidentTemplateOwnerUser extends BaseModel {
@Index()
@TableColumn({
type: TableColumnType.Boolean,
computed: true,
hideColumnInDocumentation: true,
required: true,
isDefaultValueColumn: true,
title: "Are Owners Notified",
description: "Are owners notified of this resource ownership?",
defaultValue: false,
})
@Column({
type: ColumnType.Boolean,

View File

@@ -68,6 +68,8 @@ import OnCallDutyPolicyFeed from "./OnCallDutyPolicyFeed";
import OnCallDutyPolicySchedule from "./OnCallDutyPolicySchedule";
import OnCallDutyPolicyScheduleLayer from "./OnCallDutyPolicyScheduleLayer";
import OnCallDutyPolicyScheduleLayerUser from "./OnCallDutyPolicyScheduleLayerUser";
import OnCallDutyPolicyTimeLog from "./OnCallDutyPolicyTimeLog";
import Probe from "./Probe";
import ProbeOwnerTeam from "./ProbeOwnerTeam";
import ProbeOwnerUser from "./ProbeOwnerUser";
@@ -101,6 +103,7 @@ import SmsLog from "./SmsLog";
// Status Page
import StatusPage from "./StatusPage";
import StatusPageAnnouncement from "./StatusPageAnnouncement";
import StatusPageAnnouncementTemplate from "./StatusPageAnnouncementTemplate";
import StatusPageCustomField from "./StatusPageCustomField";
import StatusPageDomain from "./StatusPageDomain";
import StatusPageFooterLink from "./StatusPageFooterLink";
@@ -245,6 +248,7 @@ const AllModelTypes: Array<{
StatusPageResource,
StatusPageAnnouncement,
StatusPageAnnouncementTemplate,
StatusPageSubscriber,
StatusPageFooterLink,
StatusPageHeaderLink,
@@ -372,6 +376,8 @@ const AllModelTypes: Array<{
MonitorFeed,
MetricType,
OnCallDutyPolicyTimeLog,
];
const modelTypeMap: { [key: string]: { new (): BaseModel } } = {};

View File

@@ -186,6 +186,7 @@ export default class Label extends AccessControlModel {
required: true,
unique: true,
type: TableColumnType.Slug,
computed: true,
title: "Slug",
description: "Friendly globally unique name for your object",
})

View File

@@ -221,12 +221,7 @@ export default class Monitor extends BaseModel {
@Index()
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CreateProjectMonitor,
],
create: [],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
@@ -239,6 +234,7 @@ export default class Monitor extends BaseModel {
required: true,
unique: true,
type: TableColumnType.Slug,
computed: true,
title: "Slug",
description: "Friendly globally unique name for your object",
})
@@ -477,10 +473,10 @@ export default class Monitor extends BaseModel {
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CreateProjectMonitor,
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CreateProjectIncident,
],
read: [
Permission.ProjectOwner,
@@ -499,6 +495,7 @@ export default class Monitor extends BaseModel {
@TableColumn({
type: TableColumnType.ObjectID,
required: true,
isDefaultValueColumn: true,
title: "Current Monitor Status ID",
description: "Whats the current status ID of this monitor?",
canReadOnRelationQuery: true,
@@ -531,7 +528,7 @@ export default class Monitor extends BaseModel {
],
})
@TableColumn({
type: TableColumnType.JSON,
type: TableColumnType.MonitorSteps,
required: false,
title: "Monitor Steps",
description: "What would you like to monitor and what is the criteria?",
@@ -611,12 +608,7 @@ export default class Monitor extends BaseModel {
public customFields?: JSONObject = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CreateProjectMonitor,
],
create: [],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
@@ -628,10 +620,13 @@ export default class Monitor extends BaseModel {
@Index()
@TableColumn({
type: TableColumnType.Boolean,
computed: true,
hideColumnInDocumentation: true,
required: true,
isDefaultValueColumn: true,
title: "Are Owners Notified Of Resource Creation?",
description: "Are owners notified of when this resource is created?",
defaultValue: false,
})
@Column({
type: ColumnType.Boolean,
@@ -667,6 +662,7 @@ export default class Monitor extends BaseModel {
isDefaultValueColumn: true,
title: "Disable Monitoring",
description: "Disable active monitoring for this resource?",
defaultValue: false,
})
@Column({
type: ColumnType.Boolean,
@@ -784,6 +780,7 @@ export default class Monitor extends BaseModel {
title: "Disable Monitoring because of Ongoing Scheduled Maintenance Event",
description:
"Disable Monitoring because of Ongoing Scheduled Maintenance Event",
defaultValue: false,
})
@Column({
type: ColumnType.Boolean,
@@ -811,6 +808,7 @@ export default class Monitor extends BaseModel {
title: "Disable Monitoring because of Manual Incident",
description:
"Disable Monitoring because of Incident which is creeated manually by user.",
defaultValue: false,
})
@Column({
type: ColumnType.Boolean,
@@ -850,12 +848,7 @@ export default class Monitor extends BaseModel {
public serverMonitorRequestReceivedAt?: Date = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CreateProjectMonitor,
],
create: [],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
@@ -874,6 +867,7 @@ export default class Monitor extends BaseModel {
type: TableColumnType.ObjectID,
required: false,
isDefaultValueColumn: false,
computed: true,
title: "Server Monitor Secret Key",
description:
"This field is for Server Monitor only. Secret Key to authenticate the request.",
@@ -886,12 +880,7 @@ export default class Monitor extends BaseModel {
public serverMonitorSecretKey?: ObjectID = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CreateProjectMonitor,
],
create: [],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
@@ -910,6 +899,7 @@ export default class Monitor extends BaseModel {
type: TableColumnType.ObjectID,
required: false,
isDefaultValueColumn: false,
computed: true,
title: "Incoming Request Secret Key",
description:
"This field is for Incoming Request Monitor only. Secret Key to authenticate the request.",
@@ -993,6 +983,7 @@ export default class Monitor extends BaseModel {
title: "All Probes Disconnected From This Monitor",
description:
"All Probes Disconnected From This Monitor. Is this monitor not being monitored?",
defaultValue: false,
})
@Column({
type: ColumnType.Boolean,
@@ -1017,6 +1008,7 @@ export default class Monitor extends BaseModel {
title: "No Probe Enabled On This Monitor",
description:
"No Probe Enabled On This Monitor. Is this monitor not being monitored?",
defaultValue: false,
})
@Column({
type: ColumnType.Boolean,

View File

@@ -218,7 +218,7 @@ export default class MonitorCustomField extends BaseModel {
type: ColumnType.ShortText,
length: ColumnLength.ShortText,
})
public type?: CustomFieldType = undefined;
public customFieldType?: CustomFieldType = undefined;
@ColumnAccessControl({
create: [

View File

@@ -222,12 +222,7 @@ export default class MonitorGroup extends BaseModel {
@Index()
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CreateMonitorGroup,
],
create: [],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
@@ -240,6 +235,7 @@ export default class MonitorGroup extends BaseModel {
required: true,
unique: true,
type: TableColumnType.Slug,
computed: true,
title: "Slug",
description: "Friendly globally unique name for your object",
})

View File

@@ -395,12 +395,7 @@ export default class MonitorGroupOwnerTeam extends BaseModel {
public deletedByUserId?: ObjectID = undefined;
@ColumnAccessControl({
create: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
Permission.ProjectMember,
Permission.CreateMonitorGroupOwnerTeam,
],
create: [],
read: [
Permission.ProjectOwner,
Permission.ProjectAdmin,
@@ -412,10 +407,13 @@ export default class MonitorGroupOwnerTeam extends BaseModel {
@Index()
@TableColumn({
type: TableColumnType.Boolean,
computed: true,
hideColumnInDocumentation: true,
required: true,
isDefaultValueColumn: true,
title: "Are Owners Notified",
description: "Are owners notified of this resource ownership?",
defaultValue: false,
})
@Column({
type: ColumnType.Boolean,

Some files were not shown because too many files have changed in this diff Show More