Xiaohui Chen

298 papers A* 15A 6B 7C 9Misc 5Journal 185Unranked 71
YearRankTypeTitle / Venue / Authors
2026 J jnl
Ecol. Informatics
Tuyan Luo, Xiaohu Tang, Xin Lv, Baolong Bao, Xiaohui Chen, Xiu Fang, Zhixiang Liu, Jingxiang Xu
2026 A* conf
WWW
Zhihui Zhao, Xiaorong Dong, Yaowen Zheng, Xiaohui Chen, Yimo Ren, Hangbei Cheng, Yongle Chen, Limin Sun
2026 J jnl
IEEE Trans. Mob. Comput.
Xinzhao Zhou, Li Chen, Huarui Yin, Xiaohui Chen, Weidong Wang
2026 J jnl
IEEE Signal Process. Lett.
Jiaqian Ren, Xiaohui Chen, Xupu Cai, Kan Guo, Liang Chen, Jia Wei
2026 A* conf
AAAI
Xiaohui Chen, Chuan-Xian Ren
2026 J jnl
J. Ind. Inf. Integr.
Zixian Li, Hebin Zheng, Shenlan Liu, Wenbin Huang, Xiaoxi Ding, Xiaohui Chen
2026 J jnl
Appl. Soft Comput.
Bo Sheng, Shuyang Li, Xiaohui Chen, Sheng Quan Xie, Aiqin Liu, Chao Wang, Qiurong Xie
2026 J jnl
Expert Syst. Appl.
Mingqi Zheng, Xiaohui Chen, Bing Liu, Yiwen Ye, Sinian Lin
2025 J jnl
CoRR
Haoran Yang, Xiaohui Chen, Chuan-Xian Ren
2025 conf
SpatialDI
Xiaohui Chen, Ran Zhang, Deze Wang, Bing Zhang, Yunpeng Zhao, LinYe, Mingqi Zheng
2025 conf
SpatialDI
Lin Ye, Xiaohui Chen, Haiyan Liu, Ran Zhang, Bing Zhang, Mingqi Zheng
2025 J jnl
ISPRS Int. J. Geo Inf.
Xuan Guo, Shutong Yu, Jinxue Zhang, Huanyu Bi, Xiaohui Chen, Junnan Liu
2025 conf
GISTAM
Yijing Li, Sijie Tan, Xiangbo Chang, Xiaohui Chen
2025 J jnl
J. Medical Syst.
Qi Xu, Jing Wang, Xiaohui Chen, Jiale Wang, Hanzhi Li, Zheng Wang, Weihan Li, Jinliang Gao, Chen Chen, Yuwan Gao
2025 J jnl
IEEE Trans. Commun.
Hongtao Zhu, Li Chen, Dingzhu Wen, Xiaohui Chen, Weidong Wang
2025 J jnl
Educ. Inf. Technol.
Jia Lu, Xiaodan Wang, Xiaohui Chen, Xin Wang, Xundiao Ma, Hanxi Wang
2025 J jnl
IEEE Trans. Instrum. Meas.
Xiaohui Chen, Lingzhen Yang, Juanfen Wang, Bowei Zeng, Xianwei Pan, Yisong Li, Xiaomin Fu, Meiling Wang, Yuxin Bai, Jin Qi
2025 J jnl
IEEE Trans. Geosci. Remote. Sens.
Bing Liu, Xiaohui Chen, Zhixiang Xue, Pengqiang Zhang, Bing Zhang, Jiaying Yue
2025 J jnl
Reliab. Eng. Syst. Saf.
Yaoyao Han, Xiaoxi Ding, Fengshou Gu, Xiaohui Chen, Minmin Xu
2025 J jnl
Educ. Inf. Technol.
Xinyi Wu, Xiaohui Chen, Xingyang Wang, Hanxi Wang
2025 J jnl
CoRR
Mingchen Jiang, Peng Xu, Xichen Ye, Xiaohui Chen, Yun Yang, Yifan Chen
2025 J jnl
IEEE Internet Things J.
Xinzhao Zhou, Li Chen, Yunfei Chen, Huarui Yin, Xiaohui Chen, Weidong Wang
2025 Misc conf
ICASSP
Yanxu Mao, Xiaohui Chen, Peipei Liu, Tiehan Cui, Zuhui Yue, Zheng Li
2025 J jnl
IEEE Trans. Big Data
Zhiguang Zhou, Haoxuan Wang, Zhendong Yang, Yuanyuan Chen, Xiaohui Chen, Ying Lai, Wei Chen, Yuwei Meng
2025 A* conf
ICML
Xiaohui Chen, Yinkai Wang, Jiaxing He, Yuanqi Du, Soha Hassoun, Xiaolin Xu, Liping Liu
2025 J jnl
CoRR
Xiaohui Chen, Yinkai Wang, Jiaxing He, Yuanqi Du, Soha Hassoun, Xiaolin Xu, Li-Ping Liu
2025 J jnl
IEEE Wirel. Commun. Lett.
Wanting Xie, Li Chen, Xiaohui Chen, Weidong Wang, Huarui Yin
2025 J jnl
CoRR
Biao Yuan, He Wang, Yanjie Song, Ana Heitor, Xiaohui Chen
2025 J jnl
Reliab. Eng. Syst. Saf.
Ji Zhang, Xiaohui Chen, Youjun An, Lin Zhang, Haohao Shi, Weigang Xu
2025 J jnl
CoRR
Yinkai Wang, Jiaxing He, Yuanqi Du, Xiaohui Chen, Jianan Canal Li, Liping Liu, Xiaolin Xu, Soha Hassoun
2025 J jnl
J. Supercomput.
Zhiyao Zhang, Jiting Cheng, Pengpeng Chen, Shuang Gao, Xiaohui Chen, Enrico Zio
2025 A* conf
ICLR
Yinkai Wang, Xiaohui Chen, Liping Liu, Soha Hassoun
2025 J jnl
CoRR
Yinkai Wang, Xiaohui Chen, Liping Liu, Soha Hassoun
2025 A conf
ICME
Xiaohui Chen, Xin Wang, Zuhui Yue, Zheng Li, Peipei Liu, Hongsong Zhu
2025 J jnl
CoRR
Dong Li, Guihong Wan, Xintao Wu, Xinyu Wu, Xiaohui Chen, Yi He, Christine G. Lian, Peter K. Sorger, Yevgeniy R. Semenov, Chen Zhao
2025 J jnl
Trans. Mach. Learn. Res.
Dong Li, Guihong Wan, Xintao Wu, Xinyu Wu, Xiaohui Chen, Yi He, Zhong Chen, Peter K. Sorger, Chen Zhao
2025 J jnl
Comput. Ind. Eng.
Ziye Zhao, Xiaohui Chen, Youjun An
2025 J jnl
CoRR
Inga Girshfeld, Xiaohui Chen
2025 A* conf
ICML
Kaheon Kim, Rentian Yao, Changbo Zhu, Xiaohui Chen
2025 J jnl
CoRR
Kaheon Kim, Rentian Yao, Changbo Zhu, Xiaohui Chen
2025 J jnl
Internet Things
Xiaohui Chen, Kaimin Wei, Jinpeng Chen, Yongdong Wu
2025 conf
HCI (83)
Xiaohui Chen
2025 J jnl
CoRR
He Yang, Fei Ren, Hai-Sui Yu, Xiaohui Chen, Pei-Zhi Zhuang
2025 J jnl
Ann. Oper. Res.
Ji Zhang, Hongshuang Feng, Xiaohui Chen
2025 J jnl
J. Comput. Methods Sci. Eng.
Anchi Shi, Liuyuan Zhao, Xiaoying Lu, Hongpin Gao, Tingxuan Chen, Bing Zhao, Xiaohui Chen, Zhongcheng Zhang
2025 J jnl
Big Data Min. Anal.
Xiaohui Chen, Jingqi Huang, Chen Tang, Haili Ye, Mingming Yang, Yan Hu, Xiaoqing Zhang, Jiang Liu
2025 J jnl
IEEE Access
Xiaohui Chen, Yunzhi Ling, Lingjun Chen, Li Liu, Xuechen Cui, Ziqiang Liu, Zhenyu Wang
2025 J jnl
CoRR
Peng Xu, Chun-Ying Hou, Xiaohui Chen, Richard Y. Zhang
2025 J jnl
Int. J. Bifurc. Chaos
Wensheng Yang, Keyu Liu, Xiaohui Chen
2025 J jnl
Reliab. Eng. Syst. Saf.
Xiaoning Feng, Xiaohui Chen, Lin Zhang
2025 J jnl
CoRR
Kaheon Kim, Bohan Zhou, Changbo Zhu, Xiaohui Chen
2025 J jnl
IEEE Trans. Netw. Serv. Manag.
Kaimin Wei, Guozi Qi, Lin Cui, Jinpeng Chen, Xiaohui Chen, Ke Xu
2025 J jnl
Technol. Anal. Strateg. Manag.
Xiaohui Chen, Hongwei Zhang
2024 conf
WCSP
Xiangzhi Guo, Xiaohui Chen, Weidong Wang, Sihai Zhang
2024 J jnl
Comput. Methods Programs Biomed.
Bo Sheng, Xiaohui Chen, Jian Cheng, Yanxin Zhang, Shane S. Q. Xie, Jing Tao, Chaoqun Duan
2024 J jnl
Swarm Evol. Comput.
Youjun An, Ziye Zhao, Kaizhou Gao, Yuanfa Dong, Xiaohui Chen, Bin Zhou
2024 conf
PKDD (4)
Xiaohui Chen, Tie Luo
2024 J jnl
CoRR
Xiaohui Chen, Tie Luo
2024 conf
WCSP
Jiahang Xu, Xiaohui Chen, Huarui Yin
2024 conf
DTPI
Xiaohui Chen, Jian Liu
2024 J jnl
CoRR
Xiaohui Chen, Satya Narayan Shukla, Mahmoud Azab, Aashu Singh, Qifan Wang, David Yang, Shengyun Peng, Hanchao Yu, Shen Yan, Xuewen Zhang, Baosheng He
2024 conf
FAIML
Xiaohui Chen, Yajie Zou
2024 J jnl
Inf. Process. Manag.
Yi Xia, Junyong Luo, Gang Zhou, Mingjing Lan, Xiaohui Chen, Jing Chen
2024 A conf
ISSTA
Zhe Lang, Zhengzi Xu, Xiaohui Chen, Shichao Lv, Zhanwei Song, Zhiqiang Shi, Limin Sun
2024 J jnl
CoRR
Xiaohui Chen, Katherine Luo, Trevor Gee, Mahla Nejati
2024 A conf
UAI
Andrew Gracyk, Xiaohui Chen
2024 J jnl
Signal Image Video Process.
Xiaohui Chen, Ping Zhao
2024 J jnl
J. Appl. Math. Comput.
Xiaohui Chen, Wensheng Yang
2024 J jnl
Educ. Inf. Technol.
Xinyi Wu, Xiaohui Chen, Jingwen Zhao, Yongsheng Xie
2024 J jnl
Reliab. Eng. Syst. Saf.
Lin Zhang, Xiaohui Chen, Abdelhakim Khatab, Youjun An, Xiaoning Feng
2024 conf
CASE
Shunkang Zhao, Youjun An, Xiaohui Chen, Yuanfa Dong, Ziye Zhao, Bin Zhou
2024 J jnl
J. Comput. Phys.
Yanjie Song, He Wang, He Yang, Maria Luisa Taccari, Xiaohui Chen
2024 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Xiaohui Chen, Lin Chen, Lingjun Chen, Peng Chen, Guanqun Sheng, Xiaosheng Yu, Yaobin Zou
2024 J jnl
Expert Syst. Appl.
Xiaoning Feng, Xiaohui Chen, Lin Zhang, Youjun An
2024 J jnl
IEEE Trans. Knowl. Data Eng.
Yujian Fu, Cheng Chen, Xiaohui Chen, Weng-Fai Wong, Bingsheng He
2024 J jnl
CoRR
Biao Yuan, Ana Heitor, He Wang, Xiaohui Chen
2024 J jnl
IEEE Access
Guo Jinbo, Shenghuai Wang, Xiaohui Chen, Chen Wang, Wei Zhang
2024 A* conf
ICLR
Yubo Zhuang, Xiaohui Chen, Yun Yang, Richard Y. Zhang
2024 J jnl
Multim. Tools Appl.
Bo Sheng, Xiaohui Chen, Yanxin Zhang, Jing Tao, Yueli Sun
2024 J jnl
IEEE Trans. Comput. Soc. Syst.
Fangfang Zhou, Yunpeng Chen, Chunyao Zhu, Lijia Jiang, Xincheng Liao, Zengsheng Zhong, Xiaohui Chen, Yi Chen, Ying Zhao
2024 J jnl
J. Mach. Learn. Res.
Rentian Yao, Xiaohui Chen, Yun Yang
2024 J jnl
IEEE Trans. Commun.
Borui Fang, Li Chen, Yunfei Chen, Changsheng You, Xiaohui Chen, Weidong Wang
2024 J jnl
J. Comput. Phys.
Biao Yuan, He Wang, Ana Heitor, Xiaohui Chen
2023 J jnl
IEEE Commun. Lett.
Yue Zhang, Li Chen, Xiaohui Chen, Weidong Wang
2023 conf
INFOCOM Workshops
Jie Zhang, Li Chen, Xiaohui Chen, Guo Wei
2023 J jnl
CoRR
Mu Tian, Xiaohui Chen, Yi Gao
2023 J jnl
Expert Syst. Appl.
Youjun An, Xiaohui Chen, Kaizhou Gao, Lin Zhang, Yinghe Li, Ziye Zhao
2023 J jnl
Int. J. Digit. Earth
Jing Li, Haiyan Liu, Jia Li, Xiaohui Chen, Zekun Tao
2023 J jnl
Expert Syst. Appl.
Ziye Zhao, Xiaohui Chen, Youjun An, Yinghe Li, Kaizhou Gao
2023 J jnl
IEEE Commun. Mag.
Xiaohui Chen, Tie Luo
2023 J jnl
CoRR
Xiaohui Chen, Tie Luo
2023 J jnl
CoRR
Maria Luisa Taccari, He Wang, Somdatta Goswami, Jonathan Nuttall, Xiaohui Chen, Peter K. Jimack
2023 J jnl
CoRR
Mingyang Wu, Xiaohui Chen, Liping Liu
2023 A* conf
ICML
Xiaohui Chen, Jiaxing He, Xu Han, Liping Liu
2023 J jnl
CoRR
Xiaohui Chen, Jiaxing He, Xu Han, Li-Ping Liu
2023 J jnl
J. Mach. Learn. Res.
Xu Han, Xiaohui Chen, Francisco J. R. Ruiz, Li-Ping Liu
2023 J jnl
CoRR
Bingzhi Zhang, Peng Xu, Xiaohui Chen, Quntao Zhuang
2023 A* conf
KDD
Xiaohui Chen, Jiankai Sun, Taiqing Wang, Ruocheng Guo, Li-Ping Liu, Aonan Zhang
2023 J jnl
CoRR
Xiaohui Chen, Jiankai Sun, Taiqing Wang, Ruocheng Guo, Li-Ping Liu, Aonan Zhang
2023 conf
VTC Fall
Hongtao Zhu, Li Chen, Xiaohui Chen, Weidong Wang
2023 J jnl
IEEE Signal Process. Lett.
Naijie Xu, Xiaohui Chen, Youlong Cao, Wenyi Zhang
2023 J jnl
Reliab. Eng. Syst. Saf.
Youjun An, Xiaohui Chen, Jiawen Hu, Lin Zhang, Ziye Zhao
2023 J jnl
Swarm Evol. Comput.
Youjun An, Xiaohui Chen, Kaizhou Gao, Lin Zhang, Yinghe Li, Ziye Zhao
2023 J jnl
Comput. Ind. Eng.
Yinghe Li, Xiaohui Chen, Youjun An, Ziye Zhao, Hongrui Cao, Junwei Jiang
2023 J jnl
IEEE Commun. Lett.
Hangyang Shan, Xiaohui Chen, Huarui Yin, Li Chen, Guo Wei
2023 A* conf
ICML
Yubo Zhuang, Xiaohui Chen, Yun Yang
2023 conf
VTC Fall
Borui Fang, Li Chen, Xiaohui Chen, Weidong Wang
2023 A conf
DSN
Xiaohui Chen, Lei Cui, Hui Wen, Zhi Li, Hongsong Zhu, Zhiyu Hao, Limin Sun
2023 J jnl
Reliab. Eng. Syst. Saf.
Zhiyao Zhang, Xiaohui Chen, Enrico Zio, Longxiao Li
2023 J jnl
IEEE Trans. Cybern.
Youjun An, Xiaohui Chen, Kaizhou Gao, Yinghe Li, Lin Zhang
2023 A* conf
NeurIPS
Xiaohui Chen, Yinkai Wang, Yuanqi Du, Soha Hassoun, Liping Liu
2023 J jnl
CoRR
Xiaohui Chen, Yinkai Wang, Yuanqi Du, Soha Hassoun, Li-Ping Liu
2023 conf
VTC2023-Spring
Jie Hou, Xiaohui Chen, Wenyi Zhang
2023 J jnl
CoRR
Xiaohui Chen, Yongfei Liu, Yingxiang Yang, Jianbo Yuan, Quanzeng You, Li-Ping Liu, Hongxia Yang
2023 J jnl
Vis. Comput. Ind. Biomed. Art
Fangfang Zhou, Jiapeng Mi, Beiwen Zhang, Jingcheng Shi, Ran Zhang, Xiaohui Chen, Ying Zhao, Jian Zhang
2023 conf
ROBIO
Bo Sheng, Xiaohui Chen, Xinyue Zhang, Jing Tao, Huijia Qu
2023 conf
SpatialDI
Li Xu, Xiaohui Chen, Bowei Wen, Jingzhen Ma, Yujun Wang, Qing Xu
2023 J jnl
CoRR
Yubo Zhuang, Xiaohui Chen, Yun Yang, Richard Y. Zhang
2023 J jnl
CoRR
Maria Luisa Taccari, Oded Ovadia, He Wang, Adar Kahana, Xiaohui Chen, Peter K. Jimack
2022 J jnl
Appl. Soft Comput.
Zhiyao Zhang, Xiaohui Chen, Enrico Zio
2022 J jnl
CoRR
Maria Luisa Taccari, Jonathan Nuttall, Xiaohui Chen, He Wang, Bennie Minnema, Peter K. Jimack
2022 J jnl
Proc. VLDB Endow.
Changji Li, Hongzhi Chen, Shuai Zhang, Yingqian Hu, Chao Chen, Zhenjie Zhang, Meng Li, Xiangchen Li, Dongqing Han, Xiaohui Chen, Xudong Wang, Huiming Zhu, Xuwei Fu, Tingwei Wu, Hongfei Tan, Hengtian Ding, Mengjin Liu, Kangcheng Wang, Ting Ye, Lei Li, Xin Li, Yu Wang, Chenguang Zheng, Hao Yang, James Cheng
2022 J jnl
IEEE Trans. Inf. Forensics Secur.
Xiaohui Chen, Zhiyu Hao, Lun Li, Lei Cui, Yiran Zhu, Zhenquan Ding, Yongji Liu
2022 conf
WCSP
Zhongming Ji, Li Chen, Xiaohui Chen, Guo Wei
2022 J jnl
CoRR
Andrew Gracyk, Xiaohui Chen
2022 J jnl
CoRR
Xiaohui Chen, Xi Chen, Liping Liu
2022 J jnl
Trans. Mach. Learn. Res.
Xiaohui Chen, Xi Chen, Li-Ping Liu
2022 J jnl
Inf. Process. Manag.
Yi Xia, Mingjing Lan, Junyong Luo, Xiaohui Chen, Gang Zhou
2022 J jnl
Reliab. Eng. Syst. Saf.
Youjun An, Xiaohui Chen, Jiawen Hu, Lin Zhang, Yinghe Li, Junwei Jiang
2022 J jnl
CoRR
Yubo Zhuang, Xiaohui Chen, Yun Yang
2022 C conf
ISCC
Xiaohui Chen, Ying Tong, Chunlai Du, Yongji Liu, Zhenquan Ding, Qingyun Ran, Yi Zhang, Lei Cui, Zhiyu Hao
2022 A* conf
COLT
Rentian Yao, Xiaohui Chen, Yun Yang
2022 J jnl
CoRR
Xiaohui Chen, Yukun Li, Aonan Zhang, Li-Ping Liu
2022 J jnl
Reliab. Eng. Syst. Saf.
Lin Zhang, Xiaohui Chen, Abdelhakim Khatab, Youjun An
2022 J jnl
CoRR
Yubo Zhuang, Xiaohui Chen, Yun Yang
2022 A conf
AISTATS
Yubo Zhuang, Xiaohui Chen, Yun Yang
2022 J jnl
J. Enterp. Inf. Manag.
Yang Zhao, Xiaohui Chen
2022 A* conf
NeurIPS
Yubo Zhuang, Xiaohui Chen, Yun Yang
2022 J jnl
CoRR
Yubo Zhuang, Xiaohui Chen, Yun Yang
2021 A* conf
ICRA
Xiaohui Chen, Ramtin Hosseini, Karen Panetta, Jivko Sinapov
2021 J jnl
CoRR
Xiaohui Chen, Ramtin Hosseini, Karen Panetta, Jivko Sinapov
2021 conf
SpatialDI
Lei Kang, Haiyan Liu, Xiaohui Chen, Weiying Cheng, Jing Li, Jia Li, Chenye She
2021 conf
WCSP
Xin Huang, Xiaohui Chen, Li Chen, Huarui Yin, Weidong Wang
2021 J jnl
IEEE Access
Xinyu Dou, Xiaohui Chen, Dequn Liang, Bin Lin
2021 J jnl
Expert Syst. Appl.
Gang Duan, Tao Fan, Xiaohui Chen, Li Chen, Junfeng Ma
2021 J jnl
Appl. Soft Comput.
Youjun An, Xiaohui Chen, Yinghe Li, Yaoyao Han, Ji Zhang, Haohao Shi
2021 J jnl
Remote. Sens.
Chao Wang, Yan Zhang, Xiaohui Chen, Hao Jiang, Mithun Mukherjee, Shuai Wang
2021 J jnl
IEEE Trans. Inf. Theory
Xiaohui Chen, Yun Yang
2021 conf
WCSP
Shouheng Xia, Xiaohui Chen, Huarui Yin
2021 J jnl
J. Intell. Fuzzy Syst.
Xiaohui Chen, Yang Xi, Pang Haoyuan, Ou Yongjian
2021 J jnl
Remote. Sens.
Chao Wang, Xing Qiu, Hai Huan, Shuai Wang, Yan Zhang, Xiaohui Chen, Wei He
2021 J jnl
Expert Syst. Appl.
Youjun An, Xiaohui Chen, Yinghe Li, Ji Zhang, Junwei Jiang
2021 A* conf
AAAI
Xu Han, Xiaohui Chen, Li-Ping Liu
2021 J jnl
Vis. Informatics
Haoxuan Wang, Yuna Ni, Ling Sun, Yuanyuan Chen, Ting Xu, Xiaohui Chen, Weihua Su, Zhiguang Zhou
2021 J jnl
IEEE Access
Xiaohui Chen, Shuyang Yu, Yongfang Zhang, Fangfang Chu, Bin Sun
2021 J jnl
Int. J. Medical Informatics
Huilin Jiang, Haifeng Mao, Huimin Lu, Peiyi Lin, Wei Garry, Huijing Lu, Guangqian Yang, Timothy Hudson Rainer, Xiaohui Chen
2021 A* conf
ICML
Xiaohui Chen, Xu Han, Jiajing Hu, Francisco J. R. Ruiz, Li-Ping Liu
2021 J jnl
CoRR
Xiaohui Chen, Xu Han, Jiajing Hu, Francisco J. R. Ruiz, Li-Ping Liu
2021 conf
ICSCA
Wentao Zhang, Ting Zhu, Xiaohui Chen, Weidong Wang
2021 conf
SpatialDI
Jing Li, Haiyan Liu, Xiaohui Chen, Wenyue Guo, Lei Kang, Jia Li, Qingbo Zhao
2021 conf
CSAI
Jia Li, Haiyan Liu, Xiaohui Chen, Jing Li, Junhong Xiang
2021 J jnl
J. Vis.
Fengling Zheng, Jin Wen, Xiang Zhang, Yuanyuan Chen, Xinlong Zhang, Yanan Liu, Ting Xu, Xiaohui Chen, Yigang Wang, Weihua Su, Zhiguang Zhou
2021 J jnl
Vis. Informatics
Haiyan Liu, Xiaohui Chen, Yidi Wang, Bing Zhang, Yunpeng Chen, Ying Zhao, Fangfang Zhou
2020 conf
iThings/GreenCom/CPSCom/SmartData/Cybermatics
Wei Zhang, Xiaohui Chen, Jiajun Sun, Qian Xi
2020 J jnl
IEEE Access
Wei Zhang, Xiaohui Chen, Yueqi Liu, Qian Xi
2020 conf
VTC Spring
Gaozheng Liu, Li Chen, Weidong Wang, Xiaohui Chen
2020 conf
ICCDE
Xiaohui Chen, Wenxuan Xie, Shuyang Yu
2020 B conf
GLOBECOM
Wendi Wang, Huarui Yin, Xiaohui Chen, Weidong Wang
2020 J jnl
CoRR
Xiaohui Chen, Yun Yang
2020 J jnl
Entropy
Mengyu Xu, Xiaohui Chen, Wei Biao Wu
2020 J jnl
CoRR
Xu Han, Xiaohui Chen, Li-Ping Liu
2020 J jnl
IEEE Access
Ting Zhu, Xiaohui Chen, Li Chen, Weidong Wang, Guo Wei
2020 J jnl
IEEE Commun. Lett.
Yiyun Wang, Xiaohui Chen, Huarui Yin, Weidong Wang
2020 J jnl
IEEE Commun. Lett.
Wendi Wang, Huarui Yin, Xiaohui Chen, Weidong Wang
2020 conf
FSDM
Xiaohui Chen, Ping Hu
2020 J jnl
IEEE Access
Wendi Wang, Huarui Yin, Xiaohui Chen, Weidong Wang
2020 conf
WCSP
Tianjie Mu, Xiaohui Chen, Li Chen, Huarui Yin, Guo Wei
2019 J jnl
IEEE Access
Rongjiang Nie, Li Chen, Chuanqiang Shan, Xiaohui Chen
2019 J jnl
IEEE J. Sel. Top. Appl. Earth Obs. Remote. Sens.
Chen Zheng, Leiguang Wang, Xiaohui Chen
2019 C conf
IGARSS
Chen Zheng, Min Zhang, Xiaohui Chen, Leiguang Wang
2019 J jnl
Sensors
Wei Zhang, Gongxuan Zhang, Xiaohui Chen, Xiumin Zhou, Yueqi Liu, Junlong Zhou
2019 J jnl
CoRR
Tianjie Mu, Xiaohui Chen, Li Chen, Huarui Yin, Weidong Wang
2019 J jnl
Remote. Sens.
Chen Zheng, Xinxin Pan, Xiaohui Chen, Xiaohui Yang, Xin Xin, Limin Su
2019 conf
WCSP
Zhiyuan Li, Li Chen, Xiaohui Chen, Weidong Wang
2019 J jnl
J. Circuits Syst. Comput.
Wei Zhang, Gongxuan Zhang, Xiaohui Chen, Yueqi Liu, Xiumin Zhou, Junlong Zhou
2019 conf
VTC Spring
Kaijing Chen, Wendi Wang, Xiaohui Chen, Huarui Yin
2019 C conf
VINCI
Li Xu, Xiaohui Chen, Mengting Sun, Huanxin Chen
2019 J jnl
IEEE Wirel. Commun. Lett.
Chuanqiang Shan, Xiaohui Chen, Huarui Yin, Weidong Wang, Guo Wei, Yi Zhang
2019 J jnl
CoRR
Xiaohui Chen, Yun Yang
2019 conf
CAA SAFEPROCESS
Qian Fan, Xiaohui Chen, Jianliang Chen
2019 J jnl
J. Netw. Comput. Appl.
Yanbing Liu, Xiaowei Qin, Ting Zhu, Xiaohui Chen, Guo Wei
2019 J jnl
IEEE Access
Ziqian Pei, Chensheng Li, Xiaowei Qin, Xiaohui Chen, Guo Wei
2019 conf
CSAI
Xiaohui Chen, Yinzhen Liu, Li Xu, Lei Ge, Yiwei Ma
2019 J jnl
IEEE Access
Zhongming Ji, Li Chen, Min Qin, Xiaohui Chen
2019 Misc conf
ICASSP
Shuang Tang, Xiaowei Qin, Xiaohui Chen, Guo Wei
2018 J jnl
IEEE Trans. Veh. Technol.
Chuanqiang Shan, Li Chen, Xiaohui Chen, Weidong Wang
2018 conf
WCSP
Jiaqi Gu, Chuanqiang Shan, Xiaohui Chen, Huarui Yin, Weidong Wang
2018 J jnl
Int. J. Emerg. Technol. Learn.
Doniyorbek Qambaralievich Ahmadaliev, Xiaohui Chen, Murodjon Abduvohidov
2018 conf
I2MTC
Wendong Gan, Chun Yin, Yuhua Cheng, Xuegang Huang, Xiaohui Chen, Dexing Gong, Jianhong Xue, Bo Zhang
2018 conf
WCSP
Wendi Wang, Huarui Yin, Xiaohui Chen, Weidong Wang
2018 conf
I2MTC
Bo Zhang, Yuhua Cheng, Xuegang Huang, Chun Yin, Xiaohui Chen, Dexing Gong, Jianhong Xue, Wendong Gan
2018 conf
WCSP
Chengcheng Han, Li Chen, Xiaohui Chen, Weidong Wang
2018 conf
VTC Fall
Yanbing Liu, Xiaowei Qin, Ting Zhu, Xiaohui Chen, Guo Wei
2018 J jnl
CoRR
Xiaohui Chen, Marc Moreno Maza, Jeeva Paudel, Ning Xie
2018 conf
VTC Fall
Min Qin, Yi Zhang, Haichao Wei, Li Chen, Xiaohui Chen, Guo Wei
2018 J jnl
JOCN
Yanbing Liu, Xiaowei Qin, Tianyi Zhang, Ting Zhu, Xiaohui Chen, Guo Wei
2018 conf
CCIS
Yongfang Zhang, Xiaohui Chen, Yongsheng Zhang
2018 conf
VTC Fall
Wendi Wang, Huarui Yin, Xiaohui Chen, Weidong Wang
2018 J jnl
CoRR
Wendi Wang, Huarui Yin, Xiaohui Chen, Weidong Wang
2018 J jnl
CoRR
Xiaohui Chen, Xiaowei Qin, Li Chen, Huarui Yin, Weidong Wang, Guo Wei, Tianyi Zhang, Yanbin Liu, Ting Zhu, Hailun Liu
2018 conf
VTC Fall
Ting Zhu, Xiaowei Qin, Li Chen, Xiaohui Chen, Guo Wei
2017 conf
CSPS
Zhang Kun, Wendi Wang, Xiaohui Chen, Guo Wei
2017 J jnl
J. Intell. Manuf.
Lei Xiao, Xiaohui Chen, Xinghui Zhang, Min Liu
2017 J jnl
Comput. Math. Methods Medicine
Nan Jia, Xiaohui Chen, Liang Yu, Ruomei Wang, Kaixing Yang, Xiaonan Luo
2017 conf
WCSP
Qiyao Wu, Li Chen, Xiaohui Chen, Weidong Wang
2017 J jnl
Comput. Hum. Behav.
Bing Wu, Xiaohui Chen
2017 J jnl
J. Commun. Inf. Networks
Wentao Zhang, Li Chen, Xiaohui Chen, Zihao Yu, Zhiyuan Li, Weidong Wang
2017 conf
ICIA
Xiaohui Chen, Liang Yu, Fan Zhou, Nan Jia, Ruomei Wang
2017 J jnl
Comput. Geosci.
Liheng Tan, Gang Wan, Feng Li, Xiaohui Chen, Wenlong Du
2017 J jnl
IET Image Process.
Min Qin, Xiaoxin Lv, Xiaohui Chen, Weidong Wang
2017 J jnl
IET Image Process.
Xiaohui Chen, Chen Zheng, Hongtai Yao, Bingxue Wang
2017 J jnl
IEEE Access
Chuanqiang Shan, Yi Zhang, Li Chen, Xiaohui Chen, Weidong Wang
2017 J jnl
J. Commun. Networks
Li Chen, Xiaohui Chen, Weidong Wang, Chi Zhang
2017 J jnl
Int. J. Commun. Syst.
Shipeng Wang, Li Chen, Xiaohui Chen, Guo Wei
2017 J jnl
Int. J. Mach. Learn. Cybern.
Fanwei Meng, Xiaohui Chen, Yunjing Liu, Feng Guo
2016 J jnl
Intell. Autom. Soft Comput.
Xiaohui Chen, Mengjiao Zhang, Kai Ruan, Canfeng Gong, Yinyin Zhang, Simon X. Yang
2016 C conf
VCIP
Xiaohui Chen, Guangtao Zhai, Jia Wang, Chunjia Hu, Yuanchun Chen
2016 conf
ICNC-FSKD
Tianchun Xu, Xiaohui Chen, Guo Wei, Weidong Wang
2016 conf
VTC Fall
Didi Liu, Jiming Lin, Junyi Wang, Xiaohui Chen, Yibin Chen
2016 J jnl
Reliab. Eng. Syst. Saf.
Lei Xiao, Sanling Song, Xiaohui Chen, David W. Coit
2016 B conf
GLOBECOM
Ronggui Xie, Huarui Yin, Zhengdao Wang, Xiaohui Chen, Guo Wei
2016 J jnl
IEEE Trans. Commun.
Ronggui Xie, Huarui Yin, Xiaohui Chen, Zhengdao Wang
2016 J jnl
IEEE Trans. Signal Process.
Xiaohui Chen, Mengyu Xu, Wei Biao Wu
2016 conf
WCSP
Ronggui Xie, Huarui Yin, Xiaohui Chen, Guo Wei
2015 conf
OFC
Wangyang Liu, Nan Hua, Xiaoping Zheng, Bingkun Zhou, Xiaohui Chen
2015 B conf
PIMRC
Shu Zhao, Li Chen, Xiaohui Chen
2015 conf
INFOCOM Workshops
Xiaoxin Lv, Min Qin, Xiaohui Chen, Xiaowei Qin
2015 J jnl
IET Commun.
Shipeng Wang, Li Chen, Xiaohui Chen, Guo Wei
2015 J jnl
CoRR
Ronggui Xie, Huarui Yin, Xiaohui Chen, Zhengdao Wang
2015 conf
CASCON
Changbo Chen, Xiaohui Chen, Abdoul-Kader Keita, Marc Moreno Maza, Ning Xie
2015 conf
iCAST
Fanwei Meng, Xiaohui Chen, Yunjing Liu, Feng Guo
2015 J jnl
计算机科学
Yuesong Gan, Xiuhong Chen, Xiaohui Chen
2014 J jnl
IEEE Trans. Biomed. Eng.
Aiping Liu, Xiaohui Chen, Z. Jane Wang, Qi Xu, Silke Appel-Cresswell, Martin J. McKeown
2014 J jnl
CoRR
Ronggui Xie, Huarui Yin, Zhengdao Wang, Xiaohui Chen
2014 conf
ECOC
Wangyang Liu, Xiaohui Chen, Nan Hua, Xiaoping Zheng, Bingkun Zhou
2014 conf
BIBM
Xianjun Shen, Yang Yi, Yan Wang, Xiaohui Chen, Jincai Yang, Tingting He
2014 C conf
ICCC
Ronggui Xie, Huarui Yin, Zhengdao Wang, Xiaohui Chen
2014 conf
CSE
Mengjiao Zhang, Xiaohui Chen, Kai Ruan, Jiyuan Sun, Yangrui Zhu
2014 conf
IWOMP
Xiaohui Chen, Marc Moreno Maza, Sushek Shekar, Priya Unnikrishnan
2014 J jnl
CoRR
Ronggui Xie, Huarui Yin, Xiaohui Chen, Zhengdao Wang
2013 J jnl
Wirel. Commun. Mob. Comput.
Ying Yang, Xiaohui Chen, Wenxiang Dong, Weidong Wang
2013 J jnl
Int. J. Netw. Manag.
Ying Yang, Wenxiang Dong, Xiaohui Chen, Weidong Wang
2013 J jnl
IEEE Wirel. Commun. Lett.
Xiaohui Chen, Wei Yuan, Wenqing Cheng, Wei Liu, Henry Leung
2013 J jnl
IEICE Trans. Commun.
Weiqiang Liu, Xiaohui Chen, Weidong Wang
2013 J jnl
Comput. Networks
Xiaohui Chen, Jing Xu, Wei Yuan, Wei Liu, Wenqing Cheng
2013 J jnl
IEEE Trans. Veh. Technol.
Li Chen, Ying Yang, Xiaohui Chen, Guo Wei
2013 conf
BIBM
Xianjun Shen, Rui Xu, Xiaohui Chen, Jincai Yang, Tingting He
2013 J jnl
IEEE Geosci. Remote. Sens. Lett.
Chen Zheng, Leiguang Wang, Rongyuan Chen, Xiaohui Chen
2013 B conf
WCNC
Xiaohui Chen, Wenqing Cheng, Wei Yuan, Wei Liu, Jing Xu
2013 conf
BIBM
Xianjun Shen, Xiaohui Chen, Rui Xu, Tingting He, Jincai Yang, Xiaohua Hu
2012 conf
VTC Fall
Ying Yang, Pengfei Li, Xiaohui Chen, Weidong Wang
2012 J jnl
J. Networks
Xiaohui Chen, Canfeng Gong, Jiangbo Min
2012 conf
VTC Fall
Weiqiang Liu, Dandan Miao, Xiaohui Chen, Weidong Wang
2012 J jnl
J. Comput.
Xiaohui Chen, Jinpeng Chen, Bangjun Lei
2012 A conf
AISTATS
Xiaohui Chen, Xinghua Shi, Xing Xu, Zhiyong Wang, Ryan Mills, Charles Lee, Jinbo Xu
2012 C conf
ICCC
Wenxiang Dong, Wenyi Zhang, Xiaohui Chen, Guo Wei
2012 J jnl
J. Networks
Xiaohui Chen, Jinpeng Chen, Jing He, Bangjun Lei
2012 J jnl
J. Networks
Xiaohui Chen, Jing He, Bangjun Lei, Tingyao Jiang
2012 J jnl
Photonic Netw. Commun.
Zhen Chen, Yunfeng Peng, Zongwei Wang, Yin Wang, Xiaohui Chen, Keping Long
2012 C conf
ICCC
Fei Wang, Weiqiang Liu, Xiaohui Chen, Weidong Wang
2012 J jnl
IEEE Trans. Signal Process.
Xiaohui Chen, Young-Heon Kim, Z. Jane Wang
2012 conf
CHINACOM
Wangyang Liu, Qingshan Li, Rui Lu, Xin Wan, Nan Hua, Xiaoping Zheng, Bingkun Zhou, Xiaohui Chen, Pi Wang
2012 Misc conf
ICASSP
Xiaohui Chen, Z. Jane Wang, Martin J. McKeown
2012 J jnl
Image Vis. Comput.
Yiguang Liu, Bingbing Liu, Yifei Pu, Xiaohui Chen, Hong Cheng
2012 B conf
WCNC
Weiqiang Liu, Xiaohui Chen, Weidong Wang
2012 J jnl
IEEE Trans. Signal Process.
Xiaohui Chen, Z. Jane Wang, Martin J. McKeown
2012 J jnl
Intell. Autom. Soft Comput.
Xiaohui Chen, Jinpeng Chen, Jing He, Chen Chen
2012 B conf
PIMRC
Chen Zhang, Xiaohui Chen, Huarui Yin, Guo Wei
2011 J jnl
Signal Process.
Xiaohui Chen, Z. Jane Wang, Martin J. McKeown
2011 conf
CHINACOM
Ying Yang, Xiaohui Chen, Weidong Wang
2011 conf
CSEE (2)
Xiaohui Chen, Jing He, Bangjun Lei
2011 J jnl
Intell. Autom. Soft Comput.
Xiaohui Chen, Jing He, Jinpeng Chen
2011 conf
CSEE (2)
Xiaohui Chen, Jinpeng Chen, Bangjun Lei
2011 conf
CHINACOM
Li Chen, Ying Yang, Xiaohui Chen, Weidong Wang
2011 J jnl
Pers. Ubiquitous Comput.
Xiaohui Chen, Sheng Xu, Huarui Yin, Weidong Wang, Guo Wei
2011 C conf
CIS
Kai Peng, Jing Xu, Wei Liu, Xiaohui Chen, Jian Wu
2011 J jnl
Wirel. Pers. Commun.
Xiaohui Chen, Weidong Wang, Guo Wei
2010 J jnl
IEEE Trans. Inf. Theory
Xiaohui Chen, Z. Jane Wang, Martin J. McKeown
2010 Misc conf
ICASSP
Xiaohui Chen, Z. Jane Wang, Martin J. McKeown
2010 B conf
ICIP
Xiaohui Chen, Z. Jane Wang, Martin J. McKeown
2009 conf
ICESS
Xiaohui Chen, Xiaowei Qin, Sheng Xu, Weidong Wang, Guo Wei
2009 conf
MUE
Xiaohui Chen, Weidong Wang, Guo Wei
2009 conf
ACIS-ICIS
Xiaohui Chen, Weidong Wang, Guo Wei
2009 conf
ACIS-ICIS
Xiaohui Chen, Weidong Wang, Guo Wei
2009 conf
FSKD (3)
Xiaohui Chen, Weidong Wang, Guo Wei
2008 conf
ICNC (2)
Dejun Liu, Xiaohui Chen, Qinghui Ai, Mingming Zou
2008 Misc conf
WSC
Ahad Ali, Xiaohui Chen, Ziming Yang, Jay Lee, Jun Ni
2007 C conf
CIS
Xiaohui Chen, Yang Zhang
redb/ingestor.py
← Index redb/ingestor.py python
"""
REDB Ingestor - Core ingestion orchestration.

This module contains the Ingestor class which orchestrates the entire
sample processing pipeline: querying catalogs, downloading from S3,
dispatching to workers, and collecting results.

The actual implementation is split across focused modules:
- redb.queries: Database query and deduplication functions
- redb.s3_utils: S3/MinIO client and file operations
- redb.workers: File processing and worker functions
- redb.logging_utils: Logging setup and ImportResult enum

For backward compatibility, all public names from these modules are
re-exported here so that `from redb.ingestor import *` continues to work.
"""
import multiprocessing
from multiprocessing import Pool
from datetime import datetime
import os
import sys
import gc
import psutil
import time
import json
import tempfile
import warnings
from urllib3.exceptions import InsecureRequestWarning
from dotenv import load_dotenv

load_dotenv(override=True)

warnings.filterwarnings("ignore", category=InsecureRequestWarning, module="urllib3")
warnings.filterwarnings("ignore", category=UserWarning, module="elasticsearch")

# =============================================================================
# Re-exports for backward compatibility
# =============================================================================
# These imports ensure that `from redb.ingestor import X` and
# `@patch('redb.ingestor.X')` continue to work after the refactor.

from redb.logging_utils import (  # noqa: F401
    ImportResult,
    FileNameFormatter,
    setup_logger,
    logger_thread,
    setup_direct_logger,
)

from redb.queries import (  # noqa: F401
    get_supported_formats,
    get_db_catalog_connection,
    fetch_s3_objects_by_repository,
    fetch_s3_objects_by_date_range,
    fetch_analyzed_samples,
    is_in_db,
    is_in_code_db,
    is_in_db_bulk,
)

from redb.s3_utils import (  # noqa: F401
    get_minio_client,
    generate_s3_key_from_hash,
    download_s3_object,
    extract_fat_slices,
)

from redb.workers import (  # noqa: F401
    process_s3_file,
    process_file,
    _process_file_internal,
    process_zip_file,
    process_7zip_file,
    process_binary_file,
    worker,
    direct_s3_worker,
    is_binary_file,
    check_dotnet,
    check_high_swap,
    get_module_by_name,
    filter_selected_modules,
    _is_packed,
)

# Re-export settings for patches like @patch('redb.ingestor.settings')
from redb import settings  # noqa: F401

# Re-export hashlib and Magika for patches like @patch('redb.ingestor.hashlib')
import hashlib  # noqa: F401
try:
    from magika import Magika  # noqa: F401
except ImportError:
    pass

# Re-export py7zr for patches like @patch('redb.ingestor.py7zr')
try:
    import py7zr  # noqa: F401
except ImportError:
    pass


class Ingestor:
    def __init__(
        self,
        path=None,
        decompile=False,
        yara_scan=False,
        with_yara=False,
        repository="",
        index_prefix="",
        selected_modules=None,
        s3_mode=False,
        s3_notes=None,
        magika_filter=None,
        s3_solo=False,
        s3_solo_hash=None,
        s3_solo_key=None,
        dry_run=False,
        force=False,
        job_id=None,
        start_date=None,
        end_date=None,
        analyzed=False,
        decompile_modules=None,
        rerun=False,
    ):

        # Set multiprocessing start method as early as possible
        try:
            multiprocessing.set_start_method('spawn', force=True)
        except RuntimeError:
            current_method = multiprocessing.get_start_method()
            if current_method != 'spawn':
                print(f"[WARNING] Multiprocessing start method is {current_method}, not 'spawn'. This may cause issues.")

        self.path = path
        self.decompile = decompile
        self.yara_scan = yara_scan
        self.with_yara = with_yara
        self.repository = repository
        self.index_prefix = index_prefix
        self.selected_modules = selected_modules
        self.s3_mode = s3_mode
        self.s3_notes = s3_notes
        self.magika_filter = magika_filter
        self.s3_solo = s3_solo
        self.s3_solo_hash = s3_solo_hash
        self.s3_solo_key = s3_solo_key
        self.dry_run = dry_run
        # --rerun implies force at the worker level: the query already selects
        # only already-disassembled samples, so the per-file is_in_code_db
        # dedup check must be skipped or every sample gets skipped.
        self.force = force or rerun
        self.job_id = job_id
        self.start_date = start_date
        self.end_date = end_date
        self.analyzed = analyzed
        self.decompile_modules = decompile_modules or {"all"}
        self.rerun = rerun

        self.manager = multiprocessing.Manager()
        self.file_type_stats = self.manager.dict()
        self.total_results = self.manager.dict({result: 0 for result in ImportResult})

        self.today = datetime.today().strftime("%Y%m%dT%H%M%S")
        log_base_path = os.getenv("LOG_FILE_PATH", "/app/logs/")
        if not log_base_path.endswith("/"):
            log_base_path += "/"
        index_suffix = self.index_prefix.upper() if self.index_prefix else "DEFAULT"
        self.log_file = log_base_path + f"{self.today}-{self.repository}-{index_suffix}.txt"

        with open(self.log_file, "a") as f:
            f.write(f"CMD: {' '.join(sys.argv)}\n")
            f.write(f"=== Ingestor started at {datetime.now()} ===\n")


    def restart_worker_pool(self):
        """Restart the worker pool to help address memory issues"""
        if hasattr(self, 'pool') and self.pool:
            try:
                print("[INFO] Restarting worker pool to address memory fragmentation")
                self.pool.close()
                self.pool.join()
                self.pool = None
            except:
                pass

        # Force garbage collection
        gc.collect(2)


    def _process_files_streaming(self, s3_files, temp_dir, total_files, parallel_proc, decompile=None):
        """Process files in a streaming fashion using direct process management."""
        import queue

        # Use the instance's decompile flag if not provided
        if decompile is None:
            decompile = self.decompile

        # Use local tracking for statistics
        completed_count = 0
        skipped_count = 0
        failed_count = 0
        correctly_processed = 0
        partially_processed = 0
        filetype_stats = {}

        # Create a result queue for workers to return their results
        result_queue = multiprocessing.Queue()

        # Create a process ID tracking dict
        active_processes = {}  # {proc_id: (process, start_time, s3_key)}

        mode_str = "decompile" if decompile else "analysis"
        print(f"[INFO] Starting streaming processing of {len(s3_files)} files with {parallel_proc} workers ({mode_str} mode)")

        # Process files
        file_index = 0
        # Use different timeouts based on mode
        if decompile:
            worker_timeout = int(os.getenv("DECOMPILE_WORKER_TIMEOUT", "2700"))
        else:
            worker_timeout = int(os.getenv("REDB_TIMEOUT", "1200"))

        # Main processing loop
        while file_index < len(s3_files) or active_processes:
            # Start new processes if we have capacity and files to process
            while len(active_processes) < parallel_proc and file_index < len(s3_files):
                s3_bucket, s3_key, first_seen = s3_files[file_index]
                file_number = file_index + 1

                # Create and start a new process
                p = multiprocessing.Process(
                    target=direct_s3_worker,
                    args=(
                        s3_bucket,
                        s3_key,
                        temp_dir,
                        decompile,  # Pass the actual decompile flag
                        self.index_prefix,
                        self.log_file,
                        file_number,
                        total_files,
                        self.selected_modules,
                        result_queue,
                        self.dry_run,
                        self.yara_scan,
                        self.with_yara,
                        self.force,
                        self.decompile_modules,
                        first_seen,
                    )
                )
                p.start()

                # Track the process
                active_processes[p.pid] = (p, time.time(), s3_key, file_number)
                file_index += 1

                # Small delay to avoid overloading
                time.sleep(0.05)

            # Check for completed processes
            try:
                # Poll the result queue with a timeout
                while True:
                    try:
                        result = result_queue.get(block=True, timeout=1)

                        # Process result
                        s3_key = result.get('s3_key')
                        status = result.get('status', 'FAILED')
                        filetype = result.get('filetype')
                        file_number = result.get('file_number')
                        worker_pid = result.get('worker_pid')

                        # Remove from active processes if present
                        if worker_pid in active_processes:
                            del active_processes[worker_pid]

                        # Update statistics
                        if status == 'CORRECTLY':
                            correctly_processed += 1
                        elif status == 'PARTIALLY':
                            partially_processed += 1
                        elif status == 'SKIPPED':
                            skipped_count += 1
                        else:  # Any other status is treated as failure
                            failed_count += 1

                        if filetype:
                            filetype_stats[filetype] = filetype_stats.get(filetype, 0) + 1

                        # Update progress
                        completed_count += 1
                        if completed_count % 50 == 0 or completed_count == 1:
                            print(f"[INFO] Completed {completed_count}/{total_files} files. Last: {s3_key}")
                            print(f"[INFO] Progress - OK: {correctly_processed}, Partial: {partially_processed}, Failed: {failed_count}, Skipped: {skipped_count}, Active: {len(active_processes)}")

                    except queue.Empty:
                        # No results in the queue, break and check for timeouts
                        break

                # Check for timed-out processes
                current_time = time.time()
                timed_out_pids = []

                for pid, (proc, start_time, s3_key, file_number) in active_processes.items():
                    runtime = current_time - start_time

                    # Check if process has exceeded timeout
                    if runtime > worker_timeout:
                        print(f"[WARNING] Process {pid} processing {s3_key} exceeded timeout ({runtime:.0f}s > {worker_timeout}s)")

                        # Terminate the process
                        try:
                            proc.terminate()
                            time.sleep(0.1)  # Give it a moment to terminate
                            if proc.is_alive():
                                # If still alive, force kill
                                proc.kill()
                        except:
                            pass

                        # Clean up any child processes
                        try:
                            parent = psutil.Process(pid)
                            for child in parent.children(recursive=True):
                                try:
                                    child.kill()
                                except:
                                    pass
                        except:
                            pass

                        # Mark as failed
                        failed_count += 1
                        completed_count += 1
                        timed_out_pids.append(pid)

                    # Check if process has terminated without returning a result
                    elif not proc.is_alive():
                        print(f"[WARNING] Process {pid} processing {s3_key} terminated without result")

                        # Mark as failed
                        failed_count += 1
                        completed_count += 1
                        timed_out_pids.append(pid)

                # Remove timed-out processes from tracking
                for pid in timed_out_pids:
                    if pid in active_processes:
                        del active_processes[pid]

                # Sleep briefly to avoid hogging CPU
                time.sleep(0.1)

            except Exception as e:
                print(f"[ERROR] Exception in main processing loop: {e}")
                time.sleep(1)  # Sleep to avoid tight loop on error

        # Set final results in the shared dictionaries
        self.total_results[ImportResult.CORRECTLY] = correctly_processed
        self.total_results[ImportResult.PARTIALLY] = partially_processed
        self.total_results[ImportResult.FAILED] = failed_count
        self.total_results[ImportResult.SKIPPED] = skipped_count

        for filetype, count in filetype_stats.items():
            self.file_type_stats[filetype] = count

        print(f"[INFO] Streaming processing completed. Processed {completed_count}/{total_files} files.")

        # Final cleanup
        killed = self._kill_all_python_processes()
        if killed > 0:
            print(f"[INFO] Killed {killed} lingering processes during final cleanup")


    def _kill_all_python_processes(self):
        """Kill all python worker processes."""
        killed_count = 0
        for proc in psutil.process_iter(['pid', 'name', 'cmdline']):
            try:
                if proc.info['name'] == 'python' and proc.info['cmdline']:
                    # Check if it's one of our processes
                    is_worker = False
                    for cmd in proc.info['cmdline']:
                        if 'deploy/redb/venv312bin/python' in cmd and 'multiprocessing' in cmd:
                            is_worker = True
                            break

                    if is_worker:
                        try:
                            proc.kill()
                            killed_count += 1
                        except Exception as e:
                            print(f"[ERROR] Failed to kill process {proc.info['pid']}: {e}")
            except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
                pass

        if killed_count > 0:
            print(f"[INFO] Killed {killed_count} python processes during cleanup")

        return killed_count


    def ingest(self):
        general_start_time = time.time()
        BATCH_SIZE = int(os.getenv("BATCH_SIZE", 1000))
        pool = None

        try:
            # Handle S3-solo mode
            if self.s3_solo:
                # Create a temporary directory for S3 downloads
                with tempfile.TemporaryDirectory() as temp_dir:
                    s3_bucket = os.getenv('S3_BUCKET')
                    if not s3_bucket:
                        print("[ERROR] S3_BUCKET environment variable is required for S3-solo mode")
                        return

                    # Use the provided S3 key directly (supports both sharded and private paths)
                    s3_key = self.s3_solo_key
                    print(f"[INFO] S3-solo mode: processing {s3_bucket}/{s3_key}")
                    print(f"[INFO] Extracted hash: {self.s3_solo_hash}")

                    # Fetch first_seen from catalog_samples
                    first_seen = None
                    try:
                        client = get_db_catalog_connection()
                        result = client.query(
                            "SELECT first_seen FROM catalog_samples WHERE sha256 = %(hash)s LIMIT 1",
                            parameters={"hash": self.s3_solo_hash}
                        )
                        if result.result_rows:
                            first_seen = result.result_rows[0][0]
                            print(f"[INFO] first_seen from catalog: {first_seen}")
                        else:
                            print(f"[INFO] No catalog entry found, first_seen will default to epoch zero")
                        client.close()
                    except Exception as e:
                        print(f"[WARNING] Could not fetch first_seen from catalog: {e}")

                    # Process single S3 file directly
                    result = process_s3_file(
                        s3_bucket,
                        s3_key,
                        temp_dir,
                        self.decompile,
                        self.index_prefix,
                        self.log_file,
                        1,  # file_number
                        1,  # total_files
                        selected_modules=self.selected_modules,
                        dry_run=self.dry_run,
                        yara_scan=self.yara_scan,
                        with_yara=self.with_yara,
                        force=self.force,
                        decompile_modules=self.decompile_modules,
                        first_seen=first_seen,
                    )

                    if result:
                        print(f"[INFO] S3-solo processing completed successfully")
                    else:
                        print(f"[ERROR] S3-solo processing failed")

                    return

            # Handle S3 bulk mode
            elif self.s3_mode:
                # Create a temporary directory for S3 downloads
                with tempfile.TemporaryDirectory() as temp_dir:
                    # Query catalog for S3 objects based on mode
                    if self.start_date and self.end_date:
                        # Date-based query: join catalog_samples with repository_upload_sessions
                        print(f"[INFO] Querying samples by date range: {self.start_date} to {self.end_date}")
                        # Pass repository as None if it's a default placeholder (not a real repo name)
                        repo_filter = self.repository if self.repository not in ("date-range", "analyzed") else None
                        catalog_entries = fetch_s3_objects_by_date_range(
                            index_prefix=self.index_prefix,
                            decompile=self.decompile,
                            start_date=self.start_date,
                            end_date=self.end_date,
                            repository=repo_filter,
                            notes=self.s3_notes,
                            magika_filter=self.magika_filter,
                            yara_scan=self.yara_scan,
                            force=self.force,
                            analyzed=self.analyzed
                        )
                        date_info = f" from {self.start_date} to {self.end_date}"
                    elif self.analyzed:
                        # Analyzed mode (standalone, no date filter): query basic_properties for already-analyzed samples
                        print(f"[INFO] Querying already-analyzed samples from {self.index_prefix}_basic_properties")
                        catalog_entries = fetch_analyzed_samples(
                            index_prefix=self.index_prefix,
                            decompile=self.decompile,
                            magika_filter=self.magika_filter,
                            yara_scan=self.yara_scan,
                            force=self.force,
                            rerun=self.rerun
                        )
                        date_info = ""
                    else:
                        # Repository-based query: direct query to repository_upload_sessions
                        catalog_entries = fetch_s3_objects_by_repository(
                            self.repository,
                            self.index_prefix,
                            self.decompile,
                            self.s3_notes,
                            self.magika_filter,
                            self.yara_scan,
                            self.force
                        )
                        date_info = ""

                    if not catalog_entries:
                        print(f"[INFO] No files found for repository: {self.repository}{date_info}" +
                              (f" with notes: {self.s3_notes}" if self.s3_notes else ""))
                        return

                    # Extract S3 bucket, keys, and first_seen
                    s3_files = []
                    for entry in catalog_entries:
                        s3_bucket = entry.get('s3_bucket')
                        s3_key = entry.get('s3_key')
                        first_seen = entry.get('first_seen')
                        if s3_bucket and s3_key:
                            s3_files.append((s3_bucket, s3_key, first_seen))

                    total_files = len(s3_files)
                    num_cores = multiprocessing.cpu_count()
                    parallel_proc = num_cores - 1

                    if self.decompile:
                        if self.magika_filter == 'apk':
                            parallel_proc = num_cores - 1
                            print(f"[INFO] Using decompile mode (APK) with {parallel_proc} parallel processes")
                        else:
                            parallel_proc = max(1, int((num_cores - 1) / 2))
                            print(f"[INFO] Using decompile mode with {parallel_proc} parallel processes")
                    else:
                        print(f"[INFO] Using analysis mode with {parallel_proc} parallel processes")

                    # Use streaming approach for both decompile and non-decompile cases
                    self._process_files_streaming(s3_files, temp_dir, total_files, parallel_proc, self.decompile)
            else:
                # Original file/directory processing logic
                if os.path.isfile(self.path):
                    # Check if it's a text file containing paths
                    if self.path.endswith('.txt'):
                        try:
                            with open(self.path, 'r') as f:
                                files = [line.strip() for line in f
                                    if line.strip() and not os.path.basename(line.strip()).startswith('.')]
                        except Exception as e:
                            print(f"[ERR] Failed to read file list from {self.path}: {str(e)}")
                            return
                    else:
                        files = [self.path]
                elif os.path.isdir(self.path):
                    files = [
                        os.path.join(root, file)
                        for root, dirs, files_list in os.walk(self.path)
                        for file in files_list
                        if not file.startswith('.')
                    ]
                else:
                    print(f"[ERR] Invalid path: {self.path}")
                    return

                total_files = len(files)
                num_cores = multiprocessing.cpu_count()
                parallel_proc = num_cores - 1
                if self.decompile:
                    if self.magika_filter == 'apk':
                        parallel_proc = num_cores - 1
                    else:
                        parallel_proc = int(num_cores/2)
                print(f"Number of CPU cores: {num_cores}")
                print(f"Number of parallel processes: {parallel_proc}")

                # Process files in batches
                for i in range(0, len(files), BATCH_SIZE):
                    batch_files = files[i:i + BATCH_SIZE]
                    batch_start = i
                    print(f"\nProcessing batch {i//BATCH_SIZE + 1}/{(len(files) + BATCH_SIZE - 1)//BATCH_SIZE}")
                    pool = None
                    try:
                        pool = Pool(processes=parallel_proc)
                        batch_results = pool.map(
                            worker,
                            [
                                (
                                    f,
                                    self.decompile,
                                    self.index_prefix,
                                    self.log_file,
                                    batch_start + idx + 1,
                                    total_files,
                                    self.selected_modules,
                                    self.dry_run,
                                    self.yara_scan,
                                    self.with_yara,
                                    self.force,
                                    self.decompile_modules,
                                )
                                for idx, f in enumerate(batch_files)
                            ],
                        )

                        # Update statistics for this batch
                        for result, filetype in batch_results:
                            if result is not None:
                                self.total_results[result] += 1
                            if filetype:
                                self.file_type_stats[filetype] = (
                                    self.file_type_stats.get(filetype, 0) + 1
                                )

                    finally:
                        # Properly close the pool after each batch
                        if pool:
                            try:
                                pool.close()
                                pool.join()
                                pool = None
                                gc.collect()
                            except Exception as e:
                                print(f"[ERROR] Error cleaning up pool: {e}")
                                try:
                                    pool.terminate()
                                    pool.join()
                                except:
                                    pass
                                pool = None
                                gc.collect()

                        if check_high_swap():
                            print("[INFO] High swap detected, restarting pool")
                            self.restart_worker_pool()

                            gc.collect(2)

                            # Create a fresh pool
                            self.pool = Pool(processes=parallel_proc)

                        # Export strings after each batch
            general_end_time = time.time()
            general_elapsed_time = general_end_time - general_start_time
            general_elapsed_time_pretty = time.strftime("%H:%M:%S", time.gmtime(general_elapsed_time))

            summary = (
                f"\n\nIngestion finished for {self.path}."
                f"\nTime required: {general_elapsed_time_pretty}"
                f"\nResults:"
                f"\n- Total analyzed: {sum(self.total_results.values())}"
                f"\n- Correctly imported: {self.total_results[ImportResult.CORRECTLY]}"
                f"\n- Partially imported: {self.total_results[ImportResult.PARTIALLY]}"
                f"\n- Failed: {self.total_results[ImportResult.FAILED]}"
                f"\n- Skipped: {self.total_results[ImportResult.SKIPPED]}"
                f"\n\nFiletype stats:\n{json.dumps(dict(self.file_type_stats))}\n"
            )

            with open(self.log_file, "a") as f:
                f.write(summary)

            print("Ingestion completed. Check the log file for details.")
            print(summary)

        finally:
            try:
                self._kill_all_python_processes()
            except Exception as e:
                print(f"[ERROR] Error in final cleanup: {e}")

            try:
                gc.collect(2)
            except Exception as e:
                print(f"[ERROR] Final garbage collection error: {e}")