Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: logger service->lib으로 이동 #3

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
results
judger.log
log
logs
logs
.idea*
/go.work.sum
File renamed without changes.
4 changes: 2 additions & 2 deletions main.go
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Feedback on PR

Summary

The PR intends to refactor the code by moving the logger service from the service directory to a new lib directory because it is a common utility used across the project.

Positive Changes

  1. The code changes are clear and straightforward.
  2. The logger package has been relocated, and all import paths have been adjusted accordingly.
  3. The .gitignore file has been updated to avoid new unnecessary files from being committed.

Suggested Improvements

  1. Consistency in Directory Naming: Consider following a consistent language in directory naming. For instance, the rest of the project uses src, while lib does not follow the same pattern. It might make sense to use src/lib for consistency.

  2. Documentation:

    • It would be helpful to update any related documentation to reflect the new location of the logger.
    • If your project includes a README or other developer-facing documentation, make sure to mention this change to keep everything in sync.
  3. Testing:

    • Ensure you have run all tests after making these changes to ensure there are no regressions.
    • Consider adding a simple test to verify that the logger can be instantiated and used from its new location. This ensures that future changes to the logger do not inadvertently break its functionality.
  4. IDE/Editor Configurations in .gitignore:

    • The .idea* entry in the .gitignore file suggests the presence of IDE-specific settings (likely from JetBrains IDEs). Consider organizing these in a separate section specifically for editor configurations to make it easier to manage and understand.

Suggested .gitignore section for clarity:

# Logs
results
judger.log
log
logs

# Editor Configurations
.idea*
/go.work.sum
  1. Code Style:
    • Ensure adherence to a consistent code formatting and style, as there were minor inconsistent indentations and spacing, for example:
      -	} else {	
      +	} else { 

Conclusion

The changes are overall well-implemented and are a clear improvement in organizing the common utility functions. Addressing the suggestions above will further improve code maintainability and clarity.

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Feedback

Overall, the PR effectively accomplishes moving the logger service to a more centralized location in lib, making it accessible for common use. However, there are a few points of feedback to consider:

  1. Newline at the End of Files:

    • The .gitignore file indicates that there's no newline at the end of the file. It's a good practice to add a newline at the end of files to avoid potential issues with concatenation and to follow POSIX standards.
  2. Whitespace Consistency:

    • In main.go, there was a whitespace change around time.Second * time.Duration(timeout). While this might be intentional for consistency, ensure that such changes are applied throughout the codebase to maintain uniformity.
  3. Redundant Import Statements:

    • In several files (factory.go, connector.go, consumer.go, producer.go, errors.go, interface.go, judge-handler.go, router.go, sandbox.go), the old import statement for logger from src/service/logger is removed and replaced with the new one from lib/logger. Make sure no unused imports are left after these changes.
  4. Documentation:

    • Considering this is a notable structural change, updating any related documentation or contributing guides would be beneficial for future contributors to understand where to place commonly used modules/services.
  5. Consistency in Import Order:

    • Some files (connector.go, errors.go, interface.go, judge-handler.go, router.go, sandbox.go) show that the Go standard library imports and third-party/library imports are mixed. It could be beneficial for readability to separate standard library imports from third-party/library imports consistently.
  6. Testing:

    • Ensure that after such refactoring, all tests are run to verify no part of the application is broken due to the changes. Adding information about test results in the PR description would be helpful.

Example:

import (
    "context"
    "fmt"
    "time"

    "github.com/cranemont/iris/lib/logger"
    "github.com/cranemont/iris/src/router"
    amqp "github.com/rabbitmq/amqp091-go"
)

Summary

Generally, this PR is well-executed and moves the logger service to a logical and more centralized location for reuse. Ensuring minor points around file endings, import order, whitespace consistency, and documentation will make the change even more robust. Please consider these points and run all pertinent tests to ensure stability.

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The refactoring to move the logger service to the lib directory is logically sound, but there are a few suggestions to improve the overall quality and maintainability of the code. Please consider the following points:

Code Analysis & Suggestions:

  1. Diff Outputs and Import Order:

    • Make sure to organize import statements in a consistent manner, typically with standard library imports first, followed by third-party imports, and then local package imports.
    • Example from main.go:
      import (
          "context"
          "net/http"
          "os"
          "strconv"
          "time"
          
          "github.com/cranemont/iris/lib/logger"
          "github.com/cranemont/iris/src/handler"
          "github.com/cranemont/iris/src/router"
          "github.com/cranemont/iris/src/service/file"
          "github.com/cranemont/iris/src/service/sandbox"
          "github.com/cranemont/iris/src/service/testcase"
          "github.com/cranemont/iris/src/utils"
      )
  2. Whitespace and Formatting:

    • Ensure there are no trailing whitespaces and consistent use of indentation and spacing.
    • Example from connector/rabbitmq/connector.go:
      -	} else {	
      +	} else {
      ...
      -	
      +	
  3. .gitignore File:

    • Consider organizing .gitignore entries into sections such as project-specific files, IDE-specific files, and language-specific files.
    • Ensure consistency in trailing newline as the last line in the .gitignore file to avoid potential issues.
  4. Documentation:

    • It could be beneficial to include some comments or documentation on why this refactoring was necessary. This helps other developers understand the purpose behind the move. A short comment in the relevant files would suffice.
  5. Check for Any Missed Dependencies:

    • While the current refactor seems to address all required imports, double-checking to ensure that all references to the old logger path have been updated is crucial.
    • Running a build and all unit tests after the changes will help catch any missed instances.

Sample Organized Import Section:

Before:

import (
	"context"
	"github.com/cranemont/iris/lib/logger"
	"net/http"
	"os"
	"strconv"
	"time"
	"github.com/cranemont/iris/src/handler"
	"github.com/cranemont/iris/src/router"
	"github.com/cranemont/iris/src/service/file"
	"github.com/cranemont/iris/src/service/sandbox"
	"github.com/cranemont/iris/src/service/testcase"
	"github.com/cranemont/iris/src/utils"
)

After:

import (
	"context"
	"net/http"
	"os"
	"strconv"
	"time"

	"github.com/cranemont/iris/lib/logger"
	"github.com/cranemont/iris/src/handler"
	"github.com/cranemont/iris/src/router"
	"github.com/cranemont/iris/src/service/file"
	"github.com/cranemont/iris/src/service/sandbox"
	"github.com/cranemont/iris/src/service/testcase"
	"github.com/cranemont/iris/src/utils"
)

Final Step

Please ensure you run all tests and a linter on the code to catch any further issues. This will help maintain code quality and consistency.

With these changes, the PR will improve in terms of code quality, readability, and maintainability. Good work, and looking forward to the updated PR!

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Feedback

Overall Comment:
The PR aims to refactor the logger service by moving it to a common lib directory. The change is well-explained, and the code adjustments align with the goal of centralizing common functionalities.

Specific Comments:

  1. .gitignore Updates:

    • Good practice including .idea* and go.work.sum in the .gitignore to maintain a clean repository. Consider adding a comment for clarity.
  2. Code Formatting:

    • The changes include some corrected formatting which is good but there are a few inconsistencies:
      -           time.Second * time.Duration(timeout),
      +           time.Second*time.Duration(timeout),
  3. Code Consistency:

    • There are multiple instances where unnecessary whitespace has been removed, e.g.,
      -   } else {

    Ensure that the formatting changes are consistent across the entire codebase. Even minor inconsistencies can lead to confusion.

  4. String Formatting:

    • Ensure all occurrences of string formatting and logging adhere to the same style. Consistent practices make the code more readable.
    • There is an instance where additional space was removed, which is good:
      -   } else {    
      +   } else {
  5. Logging Statements:

    • When moving the logger service, make sure that any existing log levels and formats are preserved to maintain consistency in how logs are generated and recorded.
  6. Documentation:

    • Consider updating any relevant documentation, like a markdown file or inline comments, specifying the new location of the logger service in the lib directory. This will help new developers understand the change and locate the service easily.
  7. Code Review Steps:
    Some files are affected by this move. Ensure that all import paths are correctly updated and that none of the functionality is broken due to these changes. Double-check for any potential missed import update.

In conclusion, the move to centralize the logger service is correctly implemented with proper updates to import paths across multiple files. A few improvements can be made to clean up formatting while maintaining consistency. Great job overall! :)

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Comments

PR Title and Description

  • PR Title: The title clearly states the main goal of the refactor, which is to move the logger service to a new location in the lib directory.
  • PR Description: The description is clear about the intent of the change, which is to manage commonly used functionalities in the lib directory. However, adding a bit more detail on why this change is beneficial might be helpful for future reference.

Code Diff Review

The code changes in the diff are mostly related to moving the logger package to a new location and updating import paths. Here are some specific comments and suggestions:

General Comments:
  1. Consistency in Whitespace and Formatting:

    • Ensure to maintain consistency in whitespace and formatting. For example:
      -	} else {	
      +	} else {
  2. Relative Importance:

    • Make sure the imports added are placed in an appropriate order – typically standard libraries are imported first, followed by third-party libraries, and then local imports.
.gitignore
+logs
+.idea*
+/go.work.sum
  • Adding .idea* and /go.work.sum to .gitignore is good for ensuring that these artifacts are not included in the repository.
main.go
-	"github.com/cranemont/iris/src/service/logger"
+	"github.com/cranemont/iris/lib/logger"
  • The import path changes are consistent throughout the files, which is good. Ensure all dependencies have been updated to reflect this new path.
Indentation and Spacing
  • There's an unnecessary whitespace adjustment:
  •   	time.Second * time.Duration(timeout),
    
  •   	time.Second*time.Duration(timeout),
    
    This change is minor but makes the code look cleaner without unnecessary whitespaces.
    
    
Factory File:

Ensure that no unnecessary imports are left, even during major refactor:

-	"github.com/cranemont/iris/src/service/logger"
+	"github.com/cranemont/iris/lib/logger"
Error Handling:
  • Ensure that logging is appropriately handled within the new lib/logger to capture all details, especially when dealing with critical parts of the system such as RabbitMQ connectors, handlers, etc.
Next Steps
  1. Documentation:

    • Update any documentation references to the logger service to the new path if applicable.
  2. Testing:

    • After such refactoring, ensure that all tests pass successfully. Adding tests if not already there covering various scenarios of logging would help ensure the transitions' stability.
  3. Additional Configuration:

    • Check if there are any configurations related to logging paths or any environment variables that might need updating to reflect the new structure.

Overall, the PR looks good, and the changes make sense for modularizing the code and ensuring that common functionalities are managed from a lib directory. A few minor improvements can be made, as mentioned.

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Feedback

Summary

Overall, the PR correctly relocates the common logger service from src/service/logger to lib/logger. This centralizes the logger functionality, making it more modular and reusable. However, there are a few areas where improvements could be made, specifically in terms of code consistency, ignoring unnecessary files, and ensuring style guidelines are adhered to.

Detailed Feedback

  1. Code Consistency & Formatting

    • In main.go, time.Second*time.Duration(timeout) has been updated with removed spacing:

      - time.Second * time.Duration(timeout)
      + time.Second*time.Duration(timeout)

      Ensure that this change is intentional and consistent with your coding standards.

    • Consistent newline at the end of files:

      • The .gitignore file was missing a newline at the end. Adding a newline character might be beneficial to align with POSIX standards, which recommend ending each file with a newline.
  2. Ignoring Unnecessary Files

    • The .gitignore file update includes .idea* and /go.work.sum:
      +.idea*
      +/go.work.sum
      
      Ensure .idea* patterns and the go.work.sum file need to be ignored. The .idea* is specific to JetBrains IDEs and go.work.sum is relevant to Go workspace mode. If they are not used in the project or by the team, consider not adding them. Otherwise, their inclusion is a good practice.
  3. Remove Unused Imports

    • In files such as handler/errors.go, handler/interface.go, there were unnecessary new lines that have been removed:
      import (
          "errors"
          "fmt"
      -   
      -   "github.com/cranemont/iris/src/service/logger"
      +   "github.com/cranemont/iris/lib/logger"
      )
      This makes the import statements cleaner, but ensure import groups are logically segregated (standard library imports, third-party package imports, and local imports).
  4. General Cleanup

    • The change from:
      -logs
      to
      +logs
      seems like fixing a potential issue of ignoring logs directory. Ensure this reflects the intention correctly about whether to keep or ignore the logs folder.
  5. Consistent Logging

    • While you relocate the logger service, it's important to ensure that its usage remains consistent across the codebase. Verify if any logging logic hasn't regressed due to the moved import paths.
  6. Testing

    • When making such structural changes, it's critical to run the suite of unit and integration tests to ensure no part of the code breaks due to the update in import paths.

Action Items

  1. Confirm and follow project-specific coding standards, especially around spacing and import formatting.
  2. Ensure the entries in .gitignore are relevant to all team members and the project setup.
  3. Verify that all changes in import paths do not cause unintended regressions.
  4. Run the tests to make sure everything is working correctly after refactoring.

This PR moves the logger service to a common lib directory, increasing code modularity. With the suggested improvements and checks, this change can be a robust enhancement to the project's structure.

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review Feedback

Summary:

The PR aims to move the logger service to a common location (lib) for better management and reusability. Overall, the objective has been met. However, there are a few suggestions to further improve the codebase and ensure maintainability.

Detailed Feedback:

  1. .gitignore Changes:

    • The .gitignore file changes are good, but it would be more organized if we place all IDE-related ignore rules together. E.g.,
      # Logs
      results
      judger.log
      log
      logs
      
      # IDE files
      .idea*
      /go.work.sum
      
  2. File Formatting:

    • Ensure file formatting issues are corrected throughout the project. For instance, in main.go, there is a minor formatting inconsistency:
      // Before:
      time.Second * time.Duration(timeout),
      
      // After:
      time.Second * time.Duration(timeout),
      Avoid unnecessary changes like this unless it improves readability or follows the project’s coding standards.
  3. Unused Import Statements:

    • Ensure there are no unused import statements in any file. These should be removed to keep the code clean and optimized.
  4. Consistent Logging Interface:

    • When moving the logger to a common library, ensure that the logger interface supports all necessary levels of logging (INFO, DEBUG, ERROR, etc.) and plan to document or adapt it commonly.
  5. Comprehensive Testing:

    • Whenever reorganizing critical functionalities like logging, ensure that there are comprehensive unit tests for the logger. Ideally, include tests for the integration points in other modules to catch any unforeseen issues.
  6. Documentation Update:

    • Update documentation throughout the codebase to reflect the new location of the logger. This will include comments in the code and potentially any external documentation about how to use the logger service.
  7. Consistent Import Grouping:

    • Ensure imports are grouped consistently (i.e., standard libraries, third-party libraries, and local packages). For example, in main.go:
      import (
          "context"
          "net/http"
          "os"
          "strconv"
          "time"
      
          "github.com/cranemont/iris/lib/logger"
          "github.com/cranemont/iris/src/handler"
          "github.com/cranemont/iris/src/router"
          "github.com/cranemont/iris/src/service/file"
          "github.com/cranemont/iris/src/service/sandbox"
          "github.com/cranemont/iris/src/service/testcase"
          "github.com/cranemont/iris/src/utils"
      )

By implementing these suggestions, you can further ensure clarity, maintainability, and efficiency of the codebase. Great job on effectively refactoring and relocating the logger service!

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

General Feedback

The refactor to move the logger service to a common lib directory for shared functionality is a good organizational decision and improves code modularity. This centralizes the logging functionality and makes the codebase easier to manage.

Specific Feedback

  1. Code Quality & Consistency:

    • Ensure that the code adheres to a consistent formatting style. For example, there is an inconsistent use of whitespace in connector.go:
      -	} else {	
      +	} else {
      ...
      -	
      +    
  2. Imports Order and Grouping:

    • It's generally a good practice to organize imports in three groups: standard library packages, third-party packages, and local packages. Currently, the import statements are intermingled. Here’s an example from connector.go:
      import (
          "context"
          "fmt"
          "time"
          "github.com/cranemont/iris/lib/logger"
          "github.com/cranemont/iris/src/router"
          amqp "github.com/rabbitmq/amqp091-go"
      )
      Rearrange these imports for better readability:
      import (
          "context"
          "fmt"
          "time"
          amqp "github.com/rabbitmq/amqp091-go"
      
          "github.com/cranemont/iris/lib/logger"
          "github.com/cranemont/iris/src/router"
      )
  3. Error Messages:

    • Enhance error messages for clarity. While this is not part of your current changes, it is a good practice to review existing code for potential improvements. For instance, the error message in judge-handler.go:
      return nil, fmt.Errorf("failed to publish result: %s: %w", string(result), err)
      Consider making the error message more descriptive.
  4. .gitignore Updates:

    • The .gitignore file has been updated to include .idea* and /go.work.sum. Make sure these additions are documented in the PR description to communicate why these changes are necessary.

Summary

Great job on making the logger service more modular by moving it to the lib directory. Follow through with the consistency in code formatting, import grouping, and provide clear error messages. Also, ensure that the changes to the .gitignore file are documented for future reference.

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Feedback

Overall, the PR successfully relocates the logger service to a common lib directory. Here are a few observations and suggestions for further improvement:

  1. File Moves and Imports:

    • The primary change involves moving the logger package from src/service/logger to lib/logger and updating the corresponding import paths.
    • Ensure that no old or redundant instances of the logger import remain in the codebase.
  2. Formatting Cleanup:

    • The modified indentation here does not add value:
      	- time.Second * time.Duration(timeout),
      	+ time.Second*time.Duration(timeout),
    • It is crucial to run a formatter or linter to standardize formatting across the codebase, preventing changes that appear insignificant.
  3. .gitignore:

    • The .idea* and /go.work.sum additions make sense for local development but could potentially be better managed in a global .gitignore. Ensure that team-wide these additions align with your version control strategy.
    • The removed newline at the end of .gitignore should be reinstated as it is a best practice to include a newline at the end of text files.
  4. Consistency Check:

    • Perform a sanity check to ensure all references to logger have been updated and no leftover dependencies exist on the old path.
  5. Commit Messages:

    • As a matter of preference, the use of English in commit messages and comments could increase accessibility for non-Korean teammates or external contributors. Similarly, ensure messages are clear and precise to outline the change context.
    • The PR title and description can be more descriptive. For example, “Refactor: Move common logger service to lib for shared usage”.
  6. Testing:

    • Verify that existing tests cover functionality involving the logger service and that they pass post-refactor.
    • Write new tests if they don’t exist to ensure the logger’s integration is correctly functioning in its new location.
  7. Code Comments:

    • No specific comments were added regarding the move. If any change might impact the usage or behavior of the logger, consider including commentary on it.

Sample Code Snippet after Improvements:

// src/router/router.go
import (
	"encoding/json"
	"fmt"
	"github.com/cranemont/iris/lib/logger" // Common logger moved to lib
	"github.com/cranemont/iris/src/handler"
)

Conclusion:
The change aligns with the intention of centralizing commonly used services, but cleaning up formatting, ensuring all instances are updated, maintaining best practices in .gitignore, and potentially expanding commit messages and testing can further enhance the robustness of your change.

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Feedback on the PR

Overall, this PR successfully moves the logger service to a common library, adhering to the strategy described in the PR title and description. The changes to the import paths and the refactoring of the logger package appear to be done correctly. However, there are a few minor improvements and edge cases to be addressed:

  1. Newline at the End of .gitignore File:

    -logs
    \ No newline at end of file
    +logs
    +.idea*
    +/go.work.sum
    • Recommendation: Ensure there is a newline at the end of the .gitignore file to avoid issues with some text editors and version control systems.
  2. Extraneous Imports:
    Each import block now has a mix of new and old paths because of the one-line changes. To improve readability, clean up the imports where necessary:

    import (
        "context"
        "fmt"
        "log"
        "time"
        "github.com/cranemont/iris/lib/logger"
        "github.com/rabbitmq/amqp091-go"
    )
    • Recommendation: Group standard libraries and third-party imports separately.
  3. Formatting Issues:

    • Example from main.go:
      - time.Second * time.Duration(timeout),
      + time.Second*time.Duration(timeout),
    • Recommendation: Ensure consistent formatting. Although the changes are correct, removing spaces may be against the formatting convention used in the rest of the codebase. Discuss with the team and use go fmt to maintain consistent code formatting.
  4. Updating Documentation and Comments:

    • If logger is referenced in comments within the code, make sure they are updated to reflect its new path (i.e., lib/logger).
    • Recommendation: Conduct a search for src/service/logger within comments and documentation to ensure consistency.
  5. Testing:

    • Ensure this major refactor does not break any existing functionality.
    • Recommendation: Run test cases after these changes. If unit tests or integration tests for logger do not exist, consider adding them to lib to validate the library’s functionality in isolation.
  6. Unused Code:

    • Check for any unused imports or variables that might have been left over during the refactoring.
    • Recommendation: Use a linter to automatically detect and remove unused code.

Summary

The PR correctly achieves its objective of moving the logger to a common library. Addressing the minor formatting, import grouping, documentation, and testing considerations will help ensure the quality and maintainability of the codebase.

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Feedback

PR Title

  • Issue: The PR title uses a mix of English and Korean, which may hinder understanding for non-Korean speakers.
  • Suggestion: Use a consistent language for PR titles. For example, "refactor: move logger service to lib".

PR Description

  • Issue: The description is brief and does not provide detailed information about the impact of the refactor or any additional changes.
  • Suggestion: Include more detailed information. For example, "The logger service has been moved to the lib directory to centralize common functionalities. This refactor affects files in multiple directories and changes import paths accordingly."

PR Diff

  1. .gitignore Changes:

    • Issue: There are additional entries in .gitignore (.idea*, /go.work.sum) which are unrelated to the stated purpose of the PR.
    • Suggestion: Introduce .gitignore changes in a separate PR to maintain focus and clarity.
  2. Import Path Changes:

    • Issue: The import paths have been updated correctly, but this PR does not mention whether the logger functionality has been tested after the change.
    • Suggestion: Add or reference tests that verify the logger still works correctly after being moved to the lib directory.
  3. Formatting Issues:

    • Example: In main.go, there are formatting inconsistencies:
      -			time.Second * time.Duration(timeout),
      +			time.Second*time.Duration(timeout),
    • Suggestion: Use a tool like gofmt to ensure consistent formatting across all Go files.
  4. Redundant Imports:

    • Example:
      import (
      	"fmt"
      	"github.com/cranemont/iris/lib/logger"
      	"time"
      )
    • Issue: Ensure that imports are sorted and redundant imports (like multiple fmt imports) are removed.
    • Suggestion: Regularly use goimports to clean up import statements.
  5. Whitespace Issues:

    • Example:
      -	} else {	
      +	} else {
    • Suggestion: Consistently remove trailing whitespace and ensure code styling aligns with project conventions.

Commit Messages

  • Issue: Commit messages are missing detailed descriptions.
  • Suggestion: Use conventional commit messages to provide more context. Each commit should explain what has been done and why.

General Suggestions

  • Documentation: Update any relevant documentation to reflect changes in the logger service.
  • README: If there is a README or any high-level documentation, ensure it references the logger in its new location.
  • Testing: Integrate unit tests to verify functionality of the logger in its new location, if not already covered.

These changes can help make the codebase cleaner and more maintainable.

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Feedback

Overall, the PR aims to refactor the project by moving the logger functionality from the service directory to a more general lib directory, which makes sense to centralize commonly used functionalities. Here are some detailed comments:

1. .gitignore

  • Good job adding the necessary new entries and correcting the newline issues.

2. Package Renaming

  • The renaming and path changes in all Go files are appropriate and in line with the requirement to move logger to the lib folder.

3. Import Statements

  • Ensure that the order of the import statements follows Go's best practices. Typically, Go's standard library imports are listed first, followed by third-party imports, and then local imports. This can improve readability. Example:
    import (
        "context"
        "fmt"
        "log"
        "net/http"
        "os"
        "strconv"
        "time"
    
        "github.com/cranemont/iris/lib/logger"
        "github.com/cranemont/iris/src/handler"
        "github.com/cranemont/iris/src/router"
        "github.com/cranemont/iris/src/service/file"
        "github.com/cranemont/iris/src/service/sandbox"
        "github.com/cranemont/iris/src/service/testcase"
        "github.com/cranemont/iris/src/utils"
        amqp "github.com/rabbitmq/amqp091-go"
    )

4. Code Style

  • In main.go, you corrected the formatting issue around the multiplication operation. Good attention to detail.

5. Functionality Testing

  • Ensure you thoroughly test all the affected parts to make sure no functionality is broken by this refactor. Given the size of the changes, it's crucial to have a comprehensive test suite.

6. Documentation

  • Update any existing documentation to reflect the changes in the logger library path. This includes README files, inline comments, or any ADR (Architecture Decision Records) if used.

7. Dependencies

  • Check if there are any hard-coded dependencies in other parts of the project that might still be pointing to the old logger path and update them accordingly. Sometimes, shell scripts, Dockerfiles, or CI/CD configurations might contain such paths.

By addressing these points, the refactor would be more robust and aligned with best practices. Great job on taking this initiative to improve the codebase structure!

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Comments

PR Title and Description:

  1. Title: It's clear and follows conventional commit guidelines. Good job!
  2. Description: Brief and straightforward. Conveys the intent of PR effectively.

Diff:

  1. .gitignore:

    • Change: Added .idea* and /go.work.sum.
    • Suggestion: .idea folder and *.iml files are often project-specific IDE settings. It might be better to ensure this change is appropriate for all project contributors.
  2. lib/logger/logger.go:

    • Change: Moved logger.go from src/service/logger to lib/logger.
    • Suggestion: Great, separating common functionalities to a lib directory is a good practice to manage shared components.
  3. main.go:

    • Import order: Consider grouping standard library imports separately from third-party imports and then local imports to enhance readability. For example:
      import (
          "context"
          "net/http"
          "os"
          "strconv"
          "time"
      
          "github.com/cranemont/iris/lib/logger"
          "github.com/cranemont/iris/src/handler"
          "github.com/cranemont/iris/src/router"
          "github.com/cranemont/iris/src/service/file"
          "github.com/cranemont/iris/src/service/sandbox"
          "github.com/cranemont/iris/src/service/testcase"
          "github.com/cranemont/iris/src/utils"
      )
  4. factory.go, connector.go, consumer.go, producer.go:

    • Replaced old logger import with the new one.
    • No suggestions here; the changes reflect the intent of centralizing the logger at lib.
  5. Miscellaneous Style Fix:

    • Change in main.go:
      -   time.Second * time.Duration(timeout),
      +   time.Second*time.Duration(timeout),
      Good catch! Ensure code style consistency throughout the project.
  6. General Suggestions:

    • Testing: Ensure that unit tests, if any, are updated to reflect the new paths of the logger module.
    • Documentation: If this logger module is externally used, update any related documentation to reflect its new location.

Summary:

This PR primarily focuses on refactoring the logger service to a more centralized location under lib/logger. The changes are clear and purposeful. Consider the minor suggestions on import grouping and code style consistency to further enhance the readability and maintainability of the project. Overall, good job on the refactor!

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The PR overall looks good and achieves its stated objective of moving the logger service to a common lib. Here are some suggestions to improve the code further:

  1. .gitignore Adjustments:

    • The .idea* entry in .gitignore should not be specific to project tools (assuming .idea refers to JetBrains IDE files). Consider having these in a global .gitignore instead.
    + .idea/
  2. Improve Code Consistency:

    • Ensure code formatting, especially spacing is consistently applied. In main.go, there was an unnecessary space reduction which could be kept consistent with overall project formatting.
      - time.Second * time.Duration(timeout),
      + time.Second * time.Duration(timeout),
  3. Comments and Documentation:

    • Given that the logger service is a critical part, it would be beneficial to add or update the documentation and comments throughout the project to reflect the change. This will make it clearer for future developers.
  4. Unit Tests:

    • Ensure that unit tests are updated or added to cover the newly refactored logging paths. This will help in verifying that the move has not introduced any issues.
  5. IDE and Workflow Files:

    • Consider keeping go.work.sum file changes relevant only during development and avoid committing them if they're not necessary for other developers.
  6. Unused Import Removal:

    • Ensure that the IDE helps in removing any unused imports which might have been left behind accidentally.

Other than these suggestions aimed at maintaining consistency and improving project hygiene, the changes applied align well with the projected goals. Good job!

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR Feedback

Summary:
This PR aims to refactor the logger service by moving it to a common lib directory for better code organization and reusability. Overall, the changes are straightforward and improve the codebase structure.

Positive Points:

  1. Consistency: The changes have been consistently applied across various files, including imports and references.
  2. Organization: Moving the logger to a lib directory aligns with the objective of having a centralized, reusable component.

Areas for Improvement:

  1. .gitignore Updates:

    • The .gitignore changes are generally good, but consider keeping .idea entries separate for better readability.
    logs
    +
    .idea
    +
    /go.work.sum
  2. Imports Rearrangement:

    • The import statements in each file could be rearranged for better grouping, with standard libraries first, followed by third-party libraries, and then local packages. This improves the readability and maintainability of the code.
    import (
        "context"
        "fmt"
        "log"
        "time"
        
        amqp "github.com/rabbitmq/amqp091-go"
        
        "github.com/cranemont/iris/lib/logger"
        "github.com/cranemont/iris/src/router"
    )
  3. Whitespace Consistency:

    • Ensure consistent use of whitespace throughout the code for readability.
    • Example in rabbitmq/connector.go:
    - 	} else {	
    + 	} else {
  4. Missing Documentation:

    • Consider adding comments or documentation if any public-facing APIs or commonly used functions were affected. This will help other developers understand the context of these changes.
  5. EOF Newlines:

    • Ensure that each file ends with a newline to comply with POSIX standards and improve compatibility with various tools.

Summary of Suggested Changes:

  1. Improve .gitignore readability.
  2. Rearrange import statements for better code organization.
  3. Fix inconsistent whitespace usage.
  4. Add documentation where necessary.
  5. Ensure all files end with a newline.

Implementing these suggestions would make the PR even stronger. Good work overall!

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR Feedback

General Comments

  1. Overall Quality: The overall refactoring logic of moving the logger.go from service to lib to make it more modular and reusable is commendable. It helps in adhering to the DRY (Don't Repeat Yourself) principle.

Specific Feedback

  1. main.go

    • Unnecessary Import Statement: After changing the import path for logger, it seems that the import from the service folder is still present. This should be removed:
    -   "github.com/cranemont/iris/src/service/logger"
  2. Spacing and Styling (All Files)

    • Please ensure consistent spacing throughout your code. For instance:
    -   time.Second * time.Duration(timeout),
    +   time.Second*time.Duration(timeout),

    This minor change is correct but ensure similar expression formatting is consistent throughout the codebase.

  3. .gitignore Changes

    • The addition of .idea* and /go.work.sum to .gitignore is good practice.
    • Ensure the newline at the end of the file to avoid the \ No newline at end of file warning.
  4. Imports Organization

    • In some files, the order of imports can be improved for better readability and maintaining best practices. Group standard library imports together, followed by third-party imports, and finally local imports.
      For example in rabbitmq/connector.go:
    +   "github.com/cranemont/iris/lib/logger"
        "github.com/cranemont/iris/src/router"
  5. Unused Imports

    • Ensure that all imports are being used meaningfully. If any imports are no longer required post-refactor, they should be removed.
  6. Consistent Logger Usage

    • Ensure that the new logger from the lib directory is used consistently and test thoroughly to check that the logging behaves as expected across the application after refactoring.

Additional Recommendations

  • Unit Tests: Ensure unit tests are updated according to the changes and validate the functionality remains intact.
  • Documentation: If there are any documentation files or README files, mention this reorganization to keep everything up-to-date.
  • Code Comments: Adding a few comments describing why the logger has been moved to the lib directory can help future maintainers understand the context of these changes.

Great job on the refactor! Keep up the good work.

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review of PR

Summary

This PR aims to refactor the location of a logger service from src/service/logger to lib/logger to better manage common functionalities in a centralized lib directory.

Strengths

  1. Clear Objective: The PR's objective to centralize common functionalities under lib is well-articulated and clear.
  2. Simplicity: The changes are straightforward with no additional functionality added, reducing the risk of introducing new bugs.
  3. Consistency: All imports and references to the logger service are updated across multiple files, ensuring consistency.

Areas for Improvement

  1. Testing: Ensure that unit tests and integration tests are updated to reflect this refactoring. If any test files import the logger service, they need to be updated similarly.
  2. Documentation: Update any documentation related to the project structure to reflect that common functionalities, such as the logger, are now located in the lib directory.
  3. Performance Consideration: Moving common functionalities to a shared location can sometimes affect performance, especially in large projects. Verify that there are no performance degradations due to this change.
  4. Atomic Commit: Consider making the commit atomic—related changes should be grouped in a single commit to make it easier to revert if needed.
  5. Code Formatting: There are some minor formatting issues:
    • Extra spaces should be removed. For example, in connector.go, there's unnecessary whitespace:
      -	} else {	
      +	} else {
    • Some files have differences in trailing whitespace or newline characters that should be standardized.

Specific Suggestions

  1. Automation: If not already done, use linting tools to automate code formatting and catch minor issues like inconsistent whitespace.
  2. Log Configuration: Ensure that the logger configurations are externalized if not done already. It may be beneficial to have centralized configuration management.
  3. Granular Imports: Check if granular or aliased imports should be used instead of the entire package import to minimize the import overhead or potential namespace collisions.
    import log "github.com/cranemont/iris/lib/logger"

Overall, the changes look good and will likely improve the project's maintainability by centralizing common functionalities. Please ensure that testing and documentation are updated accordingly to avoid any inconsistencies.

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Feedback

The changes in the PR mainly focus on refactoring the logger service by moving it from src/service/logger to lib/logger, which aims to centralize common functionalities in the lib directory. This is a useful refactor for improving project structure and maintainability. Below are some specific points of feedback to address minor issues and improve the code further:

  1. .gitignore Updates:

    • Adding .idea* and go.work.sum to .gitignore is appropriate for ignoring IDE and dependency-related files.
    • Consider alphabetizing the entries in .gitignore for better readability and consistency.
  2. Whitespace and Formatting:

    • There are minor whitespace issues in the code that need addressing to comply with Go's formatting standards. Specifically:
      • In main.go, line 21, remove the unnecessary whitespace: time.Second * time.Duration(timeout), should be time.Second*time.Duration(timeout),.
      • In rabbitmq/connector.go, the newline at the end of the file should be adjusted for consistent formatting.
  3. Unused Imports:

    • After moving the logger to the lib directory, ensure all import paths have been updated correctly. From the diff, it appears that there are no unused imports or outdated references, so this check has been handled well.
  4. Consistent Import Grouping:

    • Group standard library imports separately from third-party and internal imports to improve readability.

Example:

import (
    "context"
    "fmt"
    "time"
    
    "github.com/cranemont/iris/lib/logger"
    "github.com/cranemont/iris/src/router"
    amqp "github.com/rabbitmq/amqp091-go"
)
  1. README and Documentation:

    • If there is any documentation or README file that references the old logger path, ensure those are updated to reflect the new location of the logger in lib.
  2. Testing:

    • Ensure that you have run tests to verify that the application behaves as expected after these changes. Consider adding tests if they are not in place yet for the logger.

By addressing these points, the PR will enhance the codebase's maintainability, readability, and cleanliness. Great job on the initial implementation!

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Feedback

Overall Review:
The PR aims to refactor the application by moving the logger service to the lib directory for better modularization and reusability. The diff indicates that the logger import paths have been updated accordingly throughout the application. The structure seems improved for maintainability, and the changes are consistent with the PR description.

Positive Points:

  1. Consistency: The logger package paths are consistently updated across all files.
  2. Modularity: Moving the logger to lib enhances modularity and potentially reusability across different services.

Suggestions for Improvement:

  1. Error Handling in Logging:

    • Please ensure that any logging errors are properly handled. If the logger fails for some reason, the application should have a fallback strategy, even if it's as simple as printing to the console.
  2. Code Style:

    • In main.go, consider keeping the alignment consistent for better readability around the time.Second * time.Duration(timeout). The change introduces a slight misalignment.
    - time.Second * time.Duration(timeout),
    + time.Second*time.Duration(timeout),
    • Across files, ensure you maintain a consistent format for imports, and it would be better to separate standard library imports and third-party imports with a blank line for clarity.
    import (
        "context"
        "fmt"
        "time"
        
        "github.com/cranemont/iris/lib/logger"
        "github.com/cranemont/iris/src/router"
        amqp "github.com/rabbitmq/amqp091-go"
    )
  3. Tests:

    • Ensure you update or add new tests as necessary. This refactor might impact various parts of your application that depend on the logger service. If there's no existing test coverage for logging, it would be good to add it to confirm everything is functioning as expected after the move.
  4. Documentation:

    • Update any relevant documentation to reflect the new paths for the logger service. This includes README files, inline comments, and any configuration documentation that might reference logger paths.

Additional File Changes:

  • The changes to .gitignore are unrelated to the main purpose of the PR (refactor logger). Consider making these changes in a separate PR for better traceability.

Summary:
The PR meets its goal of making the logger service more modular. Addressing the suggestions, especially around ensuring code style consistency and incorporating comprehensive tests, will further improve the quality and maintainability of the codebase.

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Feedback on PR

General Feedback:

  • The refactoring seems to be primarily aimed at moving the logger service to a more common lib module, which is a good approach for maintaining a cleaner project structure.
  • The changes are reflected consistently across various files in the project, ensuring that the logger is imported from the new location.

Detailed Feedback:

  1. .gitignore file:

    • Ensure new lines are terminable by adding a newline at the end of the file.
    • Consider adding specific patterns for IntelliJ IDEA and Go modules to be more exact in ignoring only the intended files or directories.
      results
      judger.log
      log
      logs
      .idea*/
      go.work.sum
  2. Removing unnecessary import aliases:

    • It may be more readable if you avoid aliasing the logger package since it's self-explanatory. This is more of a stylistic approach to enhance code readability.
      import "github.com/cranemont/iris/lib/logger"
  3. Code Formatting:

    • Make sure code formatting is consistent throughout the files. For example, within main.go:
      - time.Second * time.Duration(timeout),
      + time.Second*time.Duration(timeout),
  4. Unused imports:

    • Ensure there are no unused import statements left from the old logger path after the refactoring. It looks like they were cleanly removed, so good job there.
  5. Comprehensive review of all files:

    • Verify that all other files in the project that depend on logger have been updated to use the new path to avoid inconsistencies.
  6. Testing after refactoring:

    • It is essential to run all existing tests to verify that this refactor does not introduce any regressions. Ensure proper unit, integration, and end-to-end tests cover the parts where the logger is used.

Summary:

Overall, the refactoring has been implemented carefully and systematically. Just a few minor suggestions regarding code practices and file handling should help further improve the clarity and consistency of the project. Great work on ensuring a clean and structured codebase!

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Feedback:

The PR aims to refactor the logger service by moving it to a shared lib directory, which makes sense for better organization and reusability. Overall, the changes are straightforward with renamed imports and updated file paths.

Positive Aspects:

  1. The intention of refactoring the logger service to a common library is a good practice for code reusability.
  2. Properly updated import paths to reflect the new location of the logger package.
  3. The diff is clean and primarily consists of renaming, meaning no core functionality seems to be affected.

Issues and Suggestions:

  1. Gitignore file:

    • The .idea* and /go.work.sum entries should be checked if they are applicable and necessary for your specific project setup.
  2. Formatting:

    • While there are some formatting changes that do not affect functionality, consider running a linter for gofmt to maintain consistent code style, though some of these changes can appear as noise in PRs.
    - time.Second * time.Duration(timeout),
    + time.Second*time.Duration(timeout),
  3. Code Comments:

    • The PR lacks any code comments explaining why certain changes were made or the benefits of moving the logger to the lib directory. While the change may appear straightforward, an additional description would be helpful for future maintainers.
  4. Consistency in Import Ordering:

    • Ensure consistent ordering of imports. In Go, it is common to group standard library imports and third-party imports separately. Consider using tools like goimports.
    import (
        "context"
        "fmt"
        "time"
        "github.com/cranemont/iris/lib/logger"
        "github.com/cranemont/iris/src/router"
    )
  5. Testing:

    • Verify if there are corresponding unit tests that cover the logger’s functionality. You should ensure that moving the logger to a common lib directory doesn’t break any existing tests and that all tests pass as expected.
  6. Documentation:

    • If there is any project documentation specifying where the logger is located, update it to reflect this change.

Conclusion:

Overall, this PR is a positive step towards better code organization and reusability. Adjusting minor formatting and adding documentation/comments would improve the quality and maintainability of this refactor. Make sure all tests are updated and passing to ensure nothing is broken by this change.

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Feedback on the PR

The refactoring appears to be straightforward, moving the logger service to lib to centralize common functionality. Overall, this change is clean and logical. However, I have a few suggestions and comments to enhance the quality and maintainability of the code:

  1. Consistency in Import Formatting:

    • Ensure consistent formatting and ordering of imports across all files. For example, in src/handler/errors.go, there is a newline between imports. Consider using goimports (or a similar tool) to enforce consistent formatting.
  2. Code Cleanup:

    • There are some trailing spaces and unnecessary line breaks in src/connector/rabbitmq/connector.go. These should be removed for cleaner code:
      - } else {	
      + } else {
      
      -	
      +
  3. Newline at End of Files:

    • Ensure that all files end with a newline to be POSIX compliant. This also helps with better diff and version control practices.
  4. Documentation and Comments:

    • Since you are moving an essential service like logger, it would be beneficial to add some comments or documentation explaining why this move is made (e.g., centralizing common utilities). This can help future maintainers understand the rationale behind the changes more easily.
  5. .gitignore Update:

    • The update to .gitignore includes IDE-specific files (.idea*). It is generally a good idea to keep such entries in global .gitignore files managed per user. However, if this is a team standard, then it is acceptable.
  6. Testing:

    • Ensure that the change does not break any existing functionality. Running tests (if not already done) is crucial after such refactorings to ensure nothing is inadvertently broken. If there are no tests for logger, it is a good opportunity to add some.

Summary

The refactor aligns with the goal of centralizing common functionality, and while the changes are minimal, adhering to the above suggestions will make the codebase cleaner and more maintainable. Make sure to perform thorough testing to validate the changes.

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Feedback

General Feedback

  1. The PR clearly states the goal of the change and the description is clear.
  2. The refactor enhances code organization by moving a commonly used service to a more suitable location (lib).

Specific Suggestions

  1. Import Order Consistency:

    • Make sure to maintain a consistent order for your imports for better readability. Usually, the order can be:
      1. Standard library imports
      2. Third-party library imports
      3. Local imports
    • Example from main.go:
      import (
      	"context"
      	"net/http"
      	"os"
      	"strconv"
      	"time"
      
      	"github.com/cranemont/iris/lib/logger"
      	"github.com/cranemont/iris/src/handler"
      	"github.com/cranemont/iris/src/router"
      	"github.com/cranemont/iris/src/service/file"
      	"github.com/cranemont/iris/src/service/sandbox"
      	"github.com/cranemont/iris/src/service/testcase"
      	"github.com/cranemont/iris/src/utils"
      )
  2. Unnecessary Import Removal:

    • Remove commented out and unused imports to keep the code clean.
    • Example from handler/errors.go:
      import (
      	"errors"
      	"fmt"
      	"github.com/cranemont/iris/lib/logger"
      )
  3. Newline Consistency:

    • Maintain consistency in the newline format across all files. Files at the end should end with a newline for better compatibility with various text editors and tools.
    • Example diff: .gitignore should end with a newline:
      log
      logs
      .idea*
      /go.work.sum
      + 
  4. Whitespace Removal:

    • Remove unnecessary whitespace in the code base to keep it clean.
    • Example from connector/rabbitmq/connector.go:
      } else {	
          result = c.router.Route(message.Type, message.MessageId, message.Body)
      }
      
      if err := c.producer.Publish(result, ctx); err != nil {
          c.logger.Log(logger.ERROR, fmt.Sprintf("failed to publish result: %s: %s", string(result), err))
          // nack
      }
  5. Potential Code Formatting:

    • Ensure consistent code formatting is applied throughout all files. Use a gofmt or any other linters to enforce the style.

These changes would improve the quality and maintainability of the code. Overall, great work on the refactor!

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Feedback

Summary:

The PR focuses on relocating the logger service to the lib directory for better organization and reusability across the project. The implementation appears to be mostly correct, but there are a few areas where improvements can be made for better code quality and clarity.

Detailed Feedback:

  1. .gitignore Modifications:

    • The .gitignore file has a change where a missing newline character at the end of the file has been added. Ensure this adheres to the team’s code formatting guidelines.
  2. Import Statement Order:

    • It's always a good practice to group imports logically. Standard library imports should be separated from third-party package imports and project-specific imports.
    import (
      "context"
      "fmt"
      "log"
      "time"
    
      amqp "github.com/rabbitmq/amqp091-go"
    
      "github.com/cranemont/iris/lib/logger"
      "github.com/cranemont/iris/src/router"
    )
  3. Unnecessary Code Changes:

    • There is a change in main.go where an extra space was added in the time.Duration(timeout) line. These kinds of small, unnecessary changes should be avoided as they can clutter the diff output.
    -	time.Second * time.Duration(timeout),
    +	time.Second*time.Duration(timeout),
  4. Whitespace Changes:

    • Ensure that code only includes intentional whitespace changes. Examples include the change in rabbitmq/connector.go where there was a space added at the end of a line and removed in another:
    -	} else {	
    +	} else {
    ...
    -	
    +
  5. Commit Messages:

    • Ensure commit messages are descriptive so that they provide context for the changes made. For example, refactor: logger service->lib으로 이동 is good, but consider also adding the context or reason for the move: Refactor: Moved logger service to lib for modularity.
  6. General Best Practices:

    • Make sure you run the test suite to confirm that no existing functionality is broken due to these changes.
    • Ensure documentation is updated to reflect the new location of the logger service, if applicable.

Conclusion:

Overall, this PR is straightforward and helps in organizing the common logger service in a more centralized place (lib). Addressing these points will ensure clarity, maintainability, and adherence to best practices.

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Comments

Overall, the PR looks good with a few minor improvements that could be made:

  1. Consistency in Imports:

    • Ensure that there is a consistent order of import statements across the files. Typically, standard library imports go first, followed by third-party packages, and then local imports.

    For example:

    import (
        "context"
        "fmt"
        "time"
    
        "github.com/cranemont/iris/lib/logger"
        "github.com/cranemont/iris/src/router"
    
        amqp "github.com/rabbitmq/amqp091-go"
    )
  2. .gitignore Updates:

    • The .gitignore file has changes around the logs entry. Ensure there is a newline at the end of the file for better readability and to follow conventions.
    • Consider grouping similar entries in .gitignore for better organization.
    results
    judger.log
    log
    logs
    
    .idea*
    /go.work.sum
  3. Unnecessary Changes:

    • In main.go, there was a change from time.Second * time.Duration(timeout) to time.Second*time.Duration(timeout). Ensure such minor formatting changes are actually necessary or revert to keep the diff minimal.
  4. Whitespace Editing:

    • In rabbitmq/connector.go, there are whitespace changes:
      - } else {	
      + } else {

    Ensure unnecessary whitespace changes are avoided unless they add value, such as improving readability or adhering to a specific style guide.

  5. Documentation Updates:

    • Moving the logger from service to lib is a significant change. Ensure that the corresponding documentation, if any, is updated to reflect this change. This might include README files, inline comments, or external documentation.
  6. Running Tests:

    • Ensure that after refactoring and moving the logger, all tests pass. It's not shown in the PR, but it would be good to run your test suite to confirm nothing is broken due to these changes.

Summary

  • Make import statements consistent across files.
  • Ensure .gitignore is properly formatted with a newline at the end.
  • Avoid unnecessary formatting changes unless necessary.
  • Maintain proper documentation for changes.
  • Confirm tests are passing after these changes.

This will help keep the codebase clean, maintainable, and predictable.

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Feedback

General Comments

  • Great work on moving the logger service to the lib directory for better manageability and modularity.
  • The changes have been implemented correctly, ensuring that proper imports are updated across all the files.

.gitignore

  • There is no redundancy or unnecessary addition in the .gitignore file after adding the new entries. Good job on keeping it minimal.

Code Formatting

  • Ensure to maintain formatting consistency. For example, in main.go, the space before time.Duration was removed, which slightly deviates from the existing format.
-			time.Second * time.Duration(timeout),
+			time.Second*time.Duration(timeout),

While this change doesn't break anything, adhering to the pre-existing format throughout the codebase improves readability.

Unused Imports

  • In connector/rabbitmq/producer.go, it seems the log package is imported but not used. It would be ideal to remove unused imports to keep the code clean.
import (
  "log"
)

Since no instances of log are used, this can be safely removed.

Commit Messages

  • The commit message "refactor: logger service->lib으로 이동" could be more descriptive. For example:
    • "refactor: Move logger service to lib directory for shared usage"

Recommendations

  1. Consider adding a README.md or appropriate documentation specifying why the logger service has been moved to the lib directory. This will help new contributors understand the structure better.
  2. Ensure there is proper testing in place to verify that the refactoring does not break any existing functionality. While this feedback is not part of the code review, it's a good practice to include tests that confirm everything continues to operate as expected after restructuring.

Overall, the PR looks good with the logger service being correctly moved to the lib directory and imports being updated accordingly. Just a few minor tweaks could make it even better.

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Feedback

General:

  1. Commit Message and PR Title: The commit message and PR title are concise and to the point, following best practices. However, the PR description could benefit from a bit more detail about the rationale behind moving the logger service to the lib directory.

Specific Feedback:

  1. .gitignore:

    • Good idea to keep .idea* and /go.work.sum out of version control.
    • Consider adding a blank line at the end of .gitignore for better formatting.
  2. Dependency Updates:

    • Ensure that all the places where the logger was previously imported from src/service/logger are updated appropriately to the new location lib/logger.
  3. Whitespace and Formatting:

    • main.go (line 23): Ensure consistent spacing around the multiplication operation (time.Second * time.Duration(timeout) to time.Second*time.Duration(timeout)). This change, although minor, keeps consistency in the code style.
    • rabbitmq/connector.go (line 4): Remove unnecessary white spaces at the end of the line.
  4. Functionality & Imports:

    • The overall refactoring appears to be done correctly, ensuring that the logger is now imported from the new lib location. Make sure that there are no remaining unused imports.
    • Consider running the Go linter to check for any potential issues or improvements that might be suggested by the tool.
  5. Testing:

    • Ensure that all unit tests pass, and consider adding new tests if necessary to cover the changes made by moving the logger.
    • Look for integration tests or higher-level tests to ensure moving the logger did not cause any unexpected side effects in the overall system.
  6. Documentation:

    • Ensure that any relevant documentation or comments in the codebase are updated to reflect the new path of the logger service.

Suggested Commit Message:

refactor: Move logger service to lib for shared usage

- Relocate the logger package from `src/service/logger` to `lib/logger` for better reusability
- Update all imports to reference the new `lib/logger` path
- Ensure `.gitignore` includes IDE and Go workspace files
- Correct spacing and formatting issues

By addressing the above points, the PR will be more robust and maintainable. Well done on the refactor!

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Feedback

The PR generally looks good with effective refactoring of the logger service to a more centralized lib directory. It addresses the need to manage common functions in one place, which can ease future maintenance and code reuse. Here are some suggestions to improve the PR:

  1. Single Responsibility Principle (SRP) for .gitignore:

    • The .gitignore changes should be part of a separate commit or even a separate PR. It's good practice to keep unrelated changes separate for better traceability and cleaner code reviews.
    diff --git a/.gitignore b/.gitignore
    index 28c913a..09e6a60 100644
    --- a/.gitignore
    +++ b/.gitignore
    @@ -1,4 +1,6 @@
     results
     judger.log
     log
    -logs
    \ No newline at end of file
    +logs
    +.idea*
    +/go.work.sum
  2. Adding Documentation and Comments:

    • Consider adding a brief comment at the top of the lib/logger/logger.go file explaining why the logger has been moved to the lib directory. It helps future contributors understand the reasoning behind the refactor.
  3. Code Formatting:

    • There are a few whitespace issues that could be cleaned up, for instance in main.go. This can be fixed using a linter or a formatter.
    -	"time.Second * time.Duration(timeout),
    +	"time.Second*time.Duration(timeout),
  4. Seek Feedback from Team:

    • Ensure this change is well-communicated within the team and that everyone is aware of the new location of the logger. This avoids potential merge conflicts and confusion.
  5. Update Import Paths Consistently:

    • Currently, the changes in import paths seem well-managed. Just make sure to go through the whole codebase to ensure no import is missed.

Overall, excellent job on this refactoring PR! Implementing these suggestions will further improve the code quality and maintainability.

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Feedback

Summary: The PR aims to refactor the logger service's location from src/service to lib to manage common functionalities in a centralized location (lib).

Positive Remarks:

  • The intention of moving shared code to a central lib is good for maintainability and reusability.
  • All import statements have been updated correctly to reflect the new logger path.

Areas for Improvement:

  1. Folder Structure and Naming:

    • Ensure that the new lib directory is appropriate for logging functionalities. If lib is intended to be a common utility folder, make sure it contains only such shared modules.
  2. .gitignore File:

    • The .gitignore change includes .idea* and /go.work.sum. Make sure these changes are relevant to this PR. If they are for another purpose, consider separating them into a different commit or PR.
  3. Code Formatting:

    • There is a minor inconsistency in spacing in main.go:
      -			time.Second * time.Duration(timeout),
      +			time.Second*time.Duration(timeout),
      Be consistent with formatting. Both are valid but should align with the project's style guide.
  4. Error Handling (General):

    • Check if the logger provides enough context when logging errors. For example, in rabbitmq/connector.go:
      c.logger.Log(logger.ERROR, fmt.Sprintf("failed to publish result: %s: %s", string(result), err))
      Consider enhancing error messages or enriching the logger to add more context.
  5. Testing:

    • Ensure that all unit and integration tests are updated and passing. Refactoring should not break existing tests. Add new tests if required to cover these changes.
  6. Documentation:

    • Update any relevant documentation or README files to reflect the new structure if the logger service's location is mentioned.
  7. Future Scalability:

    • If more services need to be moved to lib in the future, establish clear guidelines on what qualifies as shared functionality to avoid unnecessary bloat.
  8. Unused Imports:

    • Scanning for any potential unused imports after the change in different files would be a good practice.

Final Note:
If possible, include a detailed description of why the logger was moved to lib in the PR description, which helps other contributors understand the rationale behind this change. Additionally, specifying which issues or technical debts this refactoring addresses can provide better context.

Overall, the PR looks good with the given specific purpose. Make the necessary adjustments mentioned for a smoother merge.

Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package main

import (
"context"
"github.com/cranemont/iris/lib/logger"
"net/http"
"os"
"strconv"
Expand All @@ -17,7 +18,6 @@ import (
"github.com/cranemont/iris/src/handler"
"github.com/cranemont/iris/src/router"
"github.com/cranemont/iris/src/service/file"
"github.com/cranemont/iris/src/service/logger"
"github.com/cranemont/iris/src/service/sandbox"
"github.com/cranemont/iris/src/service/testcase"
"github.com/cranemont/iris/src/utils"
Expand Down Expand Up @@ -60,7 +60,7 @@ func main() {
utils.Getenv("TESTCASE_SERVER_URL_PLACEHOLDER", ":id"),
utils.Getenv("TESTCASE_SERVER_AUTH_TOKEN", "iris"),
utils.Getenv("TESTCASE_SERVER_AUTH_HEADER", "Authorization"),
time.Second * time.Duration(timeout),
time.Second*time.Duration(timeout),
)
}
testcaseManager := testcase.NewTestcaseManager(dataSource, cache)
Expand Down
2 changes: 1 addition & 1 deletion src/connector/factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ package connector

import (
"fmt"
"github.com/cranemont/iris/lib/logger"

"github.com/cranemont/iris/src/connector/rabbitmq"
"github.com/cranemont/iris/src/router"
"github.com/cranemont/iris/src/service/logger"
)

type Providers struct {
Expand Down
6 changes: 3 additions & 3 deletions src/connector/rabbitmq/connector.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ package rabbitmq
import (
"context"
"fmt"
"github.com/cranemont/iris/lib/logger"
"time"

"github.com/cranemont/iris/src/router"
"github.com/cranemont/iris/src/service/logger"
amqp "github.com/rabbitmq/amqp091-go"
)

Expand Down Expand Up @@ -74,10 +74,10 @@ func (c *connector) handle(message amqp.Delivery, ctx context.Context) {
result = router.NewResponse("", nil, fmt.Errorf("type(message property) must not be empty")).Marshal()
} else if message.MessageId == "" {
result = router.NewResponse("", nil, fmt.Errorf("message_id(message property) must not be empty")).Marshal()
} else {
} else {
result = c.router.Route(message.Type, message.MessageId, message.Body)
}

if err := c.producer.Publish(result, ctx); err != nil {
c.logger.Log(logger.ERROR, fmt.Sprintf("failed to publish result: %s: %s", string(result), err))
// nack
Expand Down
2 changes: 1 addition & 1 deletion src/connector/rabbitmq/consumer.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ package rabbitmq

import (
"fmt"
"github.com/cranemont/iris/lib/logger"

"github.com/cranemont/iris/src/service/logger"
amqp "github.com/rabbitmq/amqp091-go"
)

Expand Down
2 changes: 1 addition & 1 deletion src/connector/rabbitmq/producer.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ package rabbitmq
import (
"context"
"fmt"
"github.com/cranemont/iris/lib/logger"
"log"

"github.com/cranemont/iris/src/service/logger"
amqp "github.com/rabbitmq/amqp091-go"
)

Expand Down
3 changes: 1 addition & 2 deletions src/handler/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@ package handler
import (
"errors"
"fmt"

"github.com/cranemont/iris/src/service/logger"
"github.com/cranemont/iris/lib/logger"
)

type HandlerError struct {
Expand Down
2 changes: 1 addition & 1 deletion src/handler/interface.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ package handler

import (
"encoding/json"
"github.com/cranemont/iris/lib/logger"

"github.com/cranemont/iris/src/service/logger"
"github.com/cranemont/iris/src/service/sandbox"
)

Expand Down
2 changes: 1 addition & 1 deletion src/handler/judge-handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@ package handler
import (
"encoding/json"
"fmt"
"github.com/cranemont/iris/lib/logger"
"strconv"
"time"

"github.com/cranemont/iris/src/common/constants"
"github.com/cranemont/iris/src/common/result"
"github.com/cranemont/iris/src/service/file"
"github.com/cranemont/iris/src/service/grader"
"github.com/cranemont/iris/src/service/logger"
"github.com/cranemont/iris/src/service/sandbox"
"github.com/cranemont/iris/src/service/testcase"
"github.com/cranemont/iris/src/utils"
Expand Down
2 changes: 1 addition & 1 deletion src/router/router.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ package router
import (
"encoding/json"
"fmt"
"github.com/cranemont/iris/lib/logger"

"github.com/cranemont/iris/src/handler"
"github.com/cranemont/iris/src/service/logger"
)

const (
Expand Down
3 changes: 1 addition & 2 deletions src/service/sandbox/sandbox.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,10 @@ import (
"bytes"
"encoding/json"
"fmt"
"github.com/cranemont/iris/lib/logger"
"os"
"os/exec"
"strconv"

"github.com/cranemont/iris/src/service/logger"
)

type Sandbox interface {
Expand Down