#!/usr/bin/env python3 """ Check team presence on Slack and save to individual CSV files per user This script runs every minute via cron """ import sys from datetime import datetime from config_multi_user import validate_config, setup_logging, TIMEZONE from slack_client_team import get_slack_client from data_handler_team import get_team_handler from user_mapping import get_user_mapper def main(): """Main function to check presence and save data""" # Setup logging logger = setup_logging('check_presence_team') try: # Validate configuration validate_config() # Get current time current_time = datetime.now(TIMEZONE) logger.info(f"Starting team presence check at {current_time.strftime('%Y-%m-%d %H:%M:%S')}") # Initialize clients slack_client = get_slack_client() team_handler = get_team_handler() mapper = get_user_mapper() # Get presence for all configured users (single API call if batch mode) presence_list = slack_client.get_all_users_presence() if not presence_list: logger.warning("No presence data retrieved") return 0 # Update each presence entry with readable names for presence_data in presence_list: user_info = mapper.get_user_info(presence_data['user_id']) # Override the user_name with the full real name from mapper presence_data['user_name'] = user_info['full_name'] # Add sanitized name for file naming presence_data['sanitized_name'] = user_info['sanitized_name'] # Add any custom fields if they exist if user_info.get('department'): presence_data['department'] = user_info['department'] if user_info.get('team'): presence_data['team'] = user_info['team'] # Save each user's data to their individual file for presence_data in presence_list: try: team_handler.save_user_presence(presence_data) except Exception as e: logger.error(f"Failed to save data for {presence_data['user_id']}: {e}") continue # Log summary active_count = sum(1 for p in presence_list if p['presence'] == 'active') logger.info(f"Presence check complete - {active_count}/{len(presence_list)} users active") # Output for cron log print(f"[{current_time.strftime('%H:%M:%S')}] Checked {len(presence_list)} users - {active_count} active") # Show active users (compact format) if active_count > 0: active_names = [p['user_name'] for p in presence_list if p['presence'] == 'active'] print(f" Active: {', '.join(active_names[:5])}" + (f" +{len(active_names)-5} more" if len(active_names) > 5 else "")) return 0 except Exception as e: logger.error(f"Presence check failed: {e}", exc_info=True) print(f"ERROR: {e}", file=sys.stderr) return 1 if __name__ == "__main__": sys.exit(main())