# arex-storage **Repository Path**: arextest/arex-storage ## Basic Information - **Project Name**: arex-storage - **Description**: A dedicated service for storing and managing recorded and replayed data in AREX. - **Primary Language**: Java - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-02-27 - **Last Updated**: 2025-08-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Arex Icon AREX Storage Service ## Introduction ### Overview This HTTP web API manages and accesses recording and replaying resources from a remote repository. Resources are organized as MockItem instances, each corresponding to a MockCategoryType enum. ### Key Functions 1. Agent Recording - Assigns version numbers to configuration files. - Saves entry points and dependent instances implementing MockItem. 2. Agent Replaying - Reads configuration files by version number prior to replaying. - Handles requests, performs diffs, and retrieves mock results as responses. 3. Scheduled Replaying - Uses MainEntry (extending MockItem) as replay trigger sources. - Provides diff response sources saved from agent’s replay. ### Persistence and Caching - Recording Storage (MongoDB): Default persistence for AREX’s agent recording. Collections are time-managed with TTL index expiration. - Replaying Cache (Redis): Default cache for AREX’s replaying. ### MockItem Interface The base interface MockItem, defined in arex.storage.model.mocker, is structured as follows: ```java public interface MockItem { String getReplayId(); void setReplayId(String replayId); String getRecordId(); void setRecordId(String recordId); /** * millis from utc format without timezone */ void setCreateTime(long createTime); } ``` ### Additional Details - **Identifiers:** `replayId` and `recordId` are generated by [**AREX's Agent**](arextest/arex-agent-java). - **`MainEntry` Interface:** Defined in `arex.storage.model.mocker`, `MainEntry` extends `MockItem` and includes methods for accessing request details, category type, format, and more. ```java public interface MainEntry extends MockItem { /** * @return utc format without timezone */ long getCreateTime(); /** * The request's content encoded by base64 * */ String getRequest(); /** * @return the mock category type value from MockCategoryType * @see MockCategoryType */ @JsonIgnore int getCategoryType(); /** * How to serialize the request's body to target ,default using application/json * * @return application/json or others */ default String getFormat() { return null; } /** * @return default http post */ default String getMethod() { return "POST"; } default Map getRequestHeaders() { return null; } default String getPath() { return null; } } ``` ## Getting Started 1. **Configuring Remote Storage:** Modify the `localhost` default value in `resources/META-INF/application.properties` for Redis and MongoDB connections. Example: ``` arex.storage.cache.redis.host=redis://10.3.2.42:6379/ arex.mongo.uri=mongodb://arex:iLoveArex@10.3.2.42:27017/arex_storage_db ``` 2. **Extending Providers:** Implement your own providers using Java's `SPI` mechanism. The `CacheProvider` interface is defined as: ```java public interface CacheProvider { /** * put the value with expired seconds * @param key the key for value * @param expiredSeconds the expired seconds * @param value bytes of the object * @return true if success,others false */ boolean put(byte[] key, long expiredSeconds, byte[] value); /** * Get the value of a key * * @param key the bytes of key * @return null when key does not exist. */ byte[] get(byte[] key); /** * Increment integer value of the key by on * * @param key the key * @return The value of the key after increment */ long incrValue(byte[] key); /** * Decrement the integer value of a key by one. * * @param key the key * @return the value of key after decrement */ long decrValue(byte[] key); /** * Delete value specified by the key * * @param key the bytes of key * @return True if key is removed. */ boolean remove(byte[] key); } ``` ## License - Code: [Apache-2.0](https://github.com/arextest/arex-agent-java/blob/LICENSE)