Skip to main content

No project description provided

Project description

Judge Micro ๐Ÿš€

A modern, configuration-driven online judge microservice system built for competitive programming evaluation.

โœจ Features

  • ๐ŸŽฏ Configuration-Driven: Define test cases through JSON config files
  • ๐Ÿ”ง Microservice Architecture: Stateless, containerized evaluation engines
  • ๐Ÿณ Docker Native: Full containerization with remote Docker support
  • ๐Ÿ›ก๏ธ Resource Isolation: Secure sandboxed execution environment
  • โšก High Performance: Efficient container lifecycle management
  • ๐Ÿ”Œ Python SDK: Easy-to-use Python API for integration
  • ๐ŸŒ Remote Support: Execute on remote Docker hosts via SSH
  • ๐Ÿ“Š Detailed Reporting: Comprehensive performance metrics and error analysis

๐Ÿ—๏ธ System Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                        Judge Micro System                            โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                      โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚  Client Code    โ”‚    โ”‚   Python SDK    โ”‚    โ”‚  Docker Manager   โ”‚ โ”‚
โ”‚  โ”‚  - Submit Code  โ”‚โ”€โ”€โ”€โ–ถโ”‚  - JudgeMicro   โ”‚โ”€โ”€โ”€โ–ถโ”‚  - Local/Remote   โ”‚ โ”‚
โ”‚  โ”‚  - Get Results  โ”‚    โ”‚  - Validation   โ”‚    โ”‚  - SSH Support    โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚                                   โ”‚                       โ”‚          โ”‚
โ”‚                                   โ–ผ                       โ–ผ          โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚                    Execution Containers                         โ”‚ โ”‚
โ”‚  โ”‚                                                                 โ”‚ โ”‚
โ”‚  โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”              โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”           โ”‚ โ”‚
โ”‚  โ”‚  โ”‚   C Container   โ”‚              โ”‚  C++ Container  โ”‚           โ”‚ โ”‚
โ”‚  โ”‚  โ”‚  - GCC Compiler โ”‚              โ”‚ - G++ Compiler  โ”‚           โ”‚ โ”‚
โ”‚  โ”‚  โ”‚  - cJSON Libraryโ”‚              โ”‚ - JSON Library  โ”‚           โ”‚ โ”‚
โ”‚  โ”‚  โ”‚  - Test Harness โ”‚              โ”‚ - Test Harness  โ”‚           โ”‚ โ”‚
โ”‚  โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜              โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜           โ”‚ โ”‚
โ”‚  โ”‚           โ”‚                                 โ”‚                   โ”‚ โ”‚
โ”‚  โ”‚           โ–ผ                                 โ–ผ                   โ”‚ โ”‚
โ”‚  โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”              โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”           โ”‚ โ”‚
โ”‚  โ”‚  โ”‚  Config.json    โ”‚              โ”‚  Config.json    โ”‚           โ”‚ โ”‚
โ”‚  โ”‚  โ”‚  User Code      โ”‚              โ”‚  User Code      โ”‚           โ”‚ โ”‚
โ”‚  โ”‚  โ”‚  Test Cases     โ”‚              โ”‚  Test Cases     โ”‚           โ”‚ โ”‚
โ”‚  โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜              โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜           โ”‚ โ”‚
โ”‚  โ”‚           โ”‚                                 โ”‚                   โ”‚ โ”‚
โ”‚  โ”‚           โ–ผ                                 โ–ผ                   โ”‚ โ”‚
โ”‚  โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”              โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”           โ”‚ โ”‚
โ”‚  โ”‚  โ”‚  Result.json    โ”‚              โ”‚  Result.json    โ”‚           โ”‚ โ”‚
โ”‚  โ”‚  โ”‚  - Status       โ”‚              โ”‚  - Status       โ”‚           โ”‚ โ”‚
โ”‚  โ”‚  โ”‚  - Performance  โ”‚              โ”‚  - Performance  โ”‚           โ”‚ โ”‚
โ”‚  โ”‚  โ”‚  - Errors       โ”‚              โ”‚  - Errors       โ”‚           โ”‚ โ”‚
โ”‚  โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜              โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜           โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐ŸŽฏ Core Design Principles

1. Configuration-Driven Evaluation ๐Ÿ“

  • Zero Code Modification: The evaluation harness never needs changes
  • Pure Function Interface: User functions operate on parameters without global state
  • JSON Configuration: Test cases defined through structured configuration files
  • Flexible Parameters: Support for arbitrary function signatures and types

2. Microservice Architecture ๐Ÿ”ง

  • Stateless Execution: Each evaluation runs in isolation
  • Container Lifecycle: Create โ†’ Execute โ†’ Destroy pattern
  • Resource Management: CPU, memory, and time limits enforced
  • Scalable Design: Horizontal scaling through container orchestration

3. Multi-Language Support ๐Ÿ’ป

  • C Language: GCC with cJSON library support
  • C++ Language: G++ with modern standards (C++11 to C++23)
  • Extensible Framework: Easy addition of new language containers

4. Comprehensive Error Detection ๐Ÿ›ก๏ธ

  • Compilation Errors: Automatic detection of syntax and type errors
  • Runtime Errors: Segmentation faults, exceptions, and crashes
  • Logic Errors: Output validation against expected results
  • Resource Monitoring: CPU time, memory usage, and execution metrics

๐Ÿ› ๏ธ System Requirements

  • Operating System: Linux (Ubuntu/Debian recommended)
  • Container Runtime: Docker Engine 20.10+
  • Python: 3.8+ for SDK usage
  • Network: Internet access for Docker image pulls

๐Ÿš€ Quick Start

Docker Compose

git clone https://github.com/TsukiSama9292/judge_micro.git
docker compose up -d

Installation

# Install from PyPI
pip install judge_micro

# Or install from source
git clone https://github.com/TsukiSama9292/judge_micro.git
cd judge_micro
pip install -e .

Basic Usage

from judge_micro.services.efficient import judge_micro

# C language example
c_code = '''
#include <stdio.h>

int solve(int *a, int *b) {
    *a = *a * 2;      // 3 * 2 = 6
    *b = *b * 2 + 1;  // 4 * 2 + 1 = 9
    return 0;
}
'''

# Configuration
config = {
    "solve_params": [
        {"name": "a", "type": "int", "input_value": 3},
        {"name": "b", "type": "int", "input_value": 4}
    ],
    "expected": {"a": 6, "b": 9},
    "function_type": "int"
}

# Execute
result = judge_micro.run_microservice(
    language='c',
    user_code=c_code,
    config=config
)

print(f"Status: {result['status']}")
if result['status'] == 'SUCCESS':
    print(f"โœ… Match: {result.get('match', True)}")
    print(f"โฑ๏ธ Execution time: {result['time_ms']:.3f}ms")
elif result['status'] == 'COMPILE_ERROR':
    print(f"โŒ Compilation failed: {result['stderr']}")
elif result['status'] == 'RUNTIME_ERROR':
    print(f"โŒ Runtime error: {result['stderr']}")
elif result['status'] == 'WRONG_ANSWER':
    print(f"โŒ Wrong answer - Expected: {result['expected']}, Got: {result['actual']}")

๐Ÿ“Š Example Output

Successful Execution

{
  "status": "SUCCESS",
  "match": true,
  "time_ms": 1.234,
  "cpu_utime": 0.0012,
  "cpu_stime": 0.0008,
  "maxrss_mb": 2.1,
  "compile_time_ms": 145.6,
  "expected": {"a": 6, "b": 9},
  "actual": {"a": 6, "b": 9},
  "stdout": "Debug output from user code",
  "stderr": ""
}

Compilation Error

{
  "status": "COMPILE_ERROR",
  "error": "Compilation failed",
  "stderr": "error: expected ';' before '}' token",
  "exit_code": 1,
  "compile_time_ms": 89.3
}

Runtime Error

{
  "status": "RUNTIME_ERROR",
  "error": "Execution failed", 
  "stderr": "Segmentation fault (core dumped)",
  "exit_code": 139,
  "time_ms": 23.1,
  "compile_time_ms": 156.7
}

Wrong Answer

{
  "status": "WRONG_ANSWER",
  "match": false,
  "expected": {"a": 6, "b": 9},
  "actual": {"a": 6, "b": 8},
  "time_ms": 2.1,
  "cpu_utime": 0.002,
  "cpu_stime": 0.001,
  "maxrss_mb": 1.3,
  "compile_time_ms": 128.5,
  "stdout": "Debug: Processing values...",
  "stderr": ""
}

๐Ÿ”ง Advanced Configuration

Remote Docker Support

# Configure remote Docker host via SSH
import os
os.environ['DOCKER_SSH_REMOTE'] = 'true'
os.environ['DOCKER_SSH_HOST'] = '192.168.1.100'
os.environ['DOCKER_SSH_USER'] = 'docker'
os.environ['DOCKER_SSH_KEY_PATH'] = '/path/to/ssh/key'

Resource Limits

# Set container resource limits
os.environ['CONTAINER_CPU'] = '1.0'      # CPU limit
os.environ['CONTAINER_MEM'] = '256m'     # Memory limit
os.environ['CONTAINER_COUNT'] = '5'      # Max containers

๐ŸŒ Use Cases

  • Online Judge Platforms: Competitive programming websites
  • Educational Systems: Automated assignment grading
  • Coding Interviews: Technical assessment platforms
  • Code Quality Tools: Automated testing and validation
  • Research Projects: Algorithm performance evaluation

๐Ÿ“š Documentation

๐Ÿ“„ License

This project is licensed under the Apache License 2.0 - see the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

judge_micro-0.0.1.tar.gz (21.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

judge_micro-0.0.1-py3-none-any.whl (19.3 kB view details)

Uploaded Python 3

File details

Details for the file judge_micro-0.0.1.tar.gz.

File metadata

  • Download URL: judge_micro-0.0.1.tar.gz
  • Upload date:
  • Size: 21.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.3

File hashes

Hashes for judge_micro-0.0.1.tar.gz
Algorithm Hash digest
SHA256 6eee974e42b2fab3a26f9f753236928674c217f19ddecfd514f0d9b87d9dca6c
MD5 8247428378d868ff41f4f2bfa9defabd
BLAKE2b-256 567f955f51caf157809a9bb85d7fb57f436e2926ef49cc423f246d9cd3b2fc7e

See more details on using hashes here.

File details

Details for the file judge_micro-0.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for judge_micro-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 11a630ab263b5d7f978af386f67597d5f657e86a71748f63f3cdd5f81cd15ff5
MD5 4b98a5cafb6bc9b684849d3147f28b86
BLAKE2b-256 565672ab53755fedc9a0c1f88c6e4b9a34a2ced30614c6d20331124d2eb5dfc0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page