refresh_cache
Manually refresh enumeration values and user caches in Redmine to ensure data consistency and resolve synchronization issues.
Instructions
手動刷新列舉值和用戶快取
Returns:
刷新結果訊息
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/redmine_mcp/server.py:1166-1208 (handler)MCP tool handler for 'refresh_cache'. Calls RedmineClient.refresh_cache(), reloads cache info, and returns formatted status report with cache statistics.@mcp.tool() def refresh_cache() -> str: """ 手動刷新列舉值和用戶快取 Returns: 刷新結果訊息 """ try: client = get_client() client.refresh_cache() # 取得快取資訊 cache = client._load_enum_cache() domain = cache.get('domain', 'N/A') cache_time = cache.get('cache_time', 0) if cache_time > 0: cache_datetime = datetime.fromtimestamp(cache_time).strftime('%Y-%m-%d %H:%M:%S') else: cache_datetime = 'N/A' result = f"""快取刷新成功! Domain: {domain} 快取時間: {cache_datetime} 快取內容統計: - 優先權: {len(cache.get('priorities', {}))} 個 - 狀態: {len(cache.get('statuses', {}))} 個 - 追蹤器: {len(cache.get('trackers', {}))} 個 - 用戶(姓名): {len(cache.get('users_by_name', {}))} 個 - 用戶(登入名): {len(cache.get('users_by_login', {}))} 個 快取位置: {client._cache_file}""" return result except RedmineAPIError as e: return f"刷新快取失敗: {str(e)}" except Exception as e: return f"系統錯誤: {str(e)}"
- RedmineClient.refresh_cache() method invoked by the tool handler to trigger cache refresh.def refresh_cache(self): """手動刷新快取""" self._refresh_enum_cache()
- Core cache refresh logic: Fetches priorities, statuses, trackers, time activities, and users from Redmine API; builds name-to-ID mappings; saves to JSON file in ~/.redmine_mcp.def _refresh_enum_cache(self): """刷新列舉值快取""" try: # 取得所有列舉值 priorities = self.get_priorities() statuses = self.get_issue_statuses() trackers = self.get_trackers() time_entry_activities = self.get_time_entry_activities() # 取得用戶列表(限制100個避免太大) users = self.list_users(limit=100) # 建立名稱到ID的對應 user_by_name = {} user_by_login = {} for user in users: full_name = f"{user.firstname} {user.lastname}".strip() if full_name: user_by_name[full_name] = user.id user_by_login[user.login] = user.id self._enum_cache = { 'cache_time': datetime.now().timestamp(), 'domain': self.config.redmine_domain, 'priorities': {item['name']: item['id'] for item in priorities}, 'statuses': {item['name']: item['id'] for item in statuses}, 'trackers': {item['name']: item['id'] for item in trackers}, 'time_entry_activities': {item['name']: item['id'] for item in time_entry_activities}, 'users_by_name': user_by_name, 'users_by_login': user_by_login } # 儲存到檔案 with open(self._cache_file, 'w', encoding='utf-8') as f: json.dump(self._enum_cache, f, ensure_ascii=False, indent=2) except Exception as e: # 快取刷新失敗,使用空快取 self._enum_cache = { 'cache_time': 0, 'domain': self.config.redmine_domain, 'priorities': {}, 'statuses': {}, 'trackers': {}, 'time_entry_activities': {}, 'users_by_name': {}, 'users_by_login': {} }