input->is_cli_request())show_404();$days=max(30,(int)$days);$batch=min(20000,max(100,(int)$batch));$cutoff=date('Y-m-d H:i:s',strtotime('-'.$days.' days'));$ids=$this->db->select('id')->where('created_at <',$cutoff)->order_by('id')->limit($batch)->get('activity_logs')->result_array();$count=count($ids);if($count){$list=array_column($ids,'id');$this->db->trans_start();$this->db->query('INSERT IGNORE INTO activity_logs_archive SELECT a.*,NOW() FROM activity_logs a WHERE a.id IN('.implode(',',array_map('intval',$list)).')');$this->db->where_in('id',$list)->delete('activity_logs');$this->db->trans_complete();if(!$this->db->trans_status())throw new RuntimeException('Arsip activity log gagal.');}$this->db->where('expires_at <',date('Y-m-d H:i:s'))->delete('app_cache');$this->db->where('timestamp <',time()-86400)->delete('ci_sessions');$this->db->where('status','completed')->where('completed_at <',date('Y-m-d H:i:s',strtotime('-30 days')))->delete('app_jobs');echo $count." activity log diarsipkan.\n";} }