diff --git a/config/config.json b/config/config.json
index 8517216..a0f66a3 100644
--- a/config/config.json
+++ b/config/config.json
@@ -44,12 +44,12 @@
                        "delete": 365
                     },
                     "cooling_model_config": {
-                        "timeDecayFactor":         0.5,  // Controls logarithmic growth rate
-                        "baseRetention":           300.0, // Base retention multiplier
-                        "periodGranularityFactor": 7,  // Exponent for period scaling
-                        "warmPhaseMultiplier":     10.0,  // Kept for compatibility
-                        "coldPhaseMultiplier":     20.0,  // Kept for compatibility
-                        "deletePhaseMultiplier":   40.0,  // Kept for compatibility
+                        "timeDecayFactor":         10,
+                        "baseRetention":           1.0,
+                        "periodGranularityFactor": 0.1,
+                        "warmPhaseMultiplier":     1.0,
+                        "coldPhaseMultiplier":     2.0,
+                        "deletePhaseMultiplier":   5.0
                     }
                 },
                 "ma": {
diff --git a/elasticilm/ilm.go b/elasticilm/ilm.go
index 3cf2c09..81b3ab9 100644
--- a/elasticilm/ilm.go
+++ b/elasticilm/ilm.go
@@ -50,15 +50,26 @@ func NonLinearCoolingModel(daysDiff int, period string, config map[string]float6
 		cfg = periodBaseConfig["1m"] // 默认配置
 	}
 
+	// 从配置获取参数,设置默认值
+	timeDecayFactor := 0.5
+	if td, ok := config["timeDecayFactor"]; ok {
+		timeDecayFactor = td
+	}
+
 	// 反转时间衰减因子:数据越新,保留时间越长
 	// 使用反比例函数:1/(x+1) 确保新数据(小daysDiff)获得更大值
-	ageFactor := 1.0 / (float64(daysDiff)/365.0 + 1.0)
+	ageFactor := timeDecayFactor / (float64(daysDiff)/365.0 + 1.0)
 
 	// 计算基础保留时间(与时间框架相关)
 	base := cfg.Base
 
-	// 应用年龄因子 - 新数据获得更长保留时间
-	warm := int(float64(base) * (1.0 + ageFactor))
+	// 应用年龄因子和阶段乘数 - 新数据获得更长保留时间
+	warmPhaseMultiplier := 1.0
+	if wm, ok := config["warmPhaseMultiplier"]; ok {
+		warmPhaseMultiplier = wm
+	}
+
+	warm := int(float64(base) * warmPhaseMultiplier * (1.0 + ageFactor))
 	cold := warm * 2
 	delete := warm * 3
 
@@ -73,6 +84,9 @@ func NonLinearCoolingModel(daysDiff int, period string, config map[string]float6
 		delete = warm * 3
 	}
 
+	// 打印计算结果
+	fmt.Printf("[Cooling Model] Period: %s, DaysDiff: %d => warm=%dd, cold=%dd, delete=%dd\n",
+		period, daysDiff, warm, cold, delete)
 	return warm, cold, delete
 }
 
diff --git a/elasticilm/ilm_test.go b/elasticilm/ilm_test.go
index b52beff..1a9925d 100644
--- a/elasticilm/ilm_test.go
+++ b/elasticilm/ilm_test.go
@@ -2,12 +2,33 @@ package elasticilm
 
 import (
 	"fmt"
+	cfg "gitea.zjmud.xyz/phyer/tanya/config" // 导入你的 config 包
+	"os"
 	"strings"
-	// "math"
 	"testing"
 	"time"
 )
 
+func loadConfig(t *testing.T) *cfg.Config {
+	configPaths := []string{
+		"config/config.json",
+		"../config/config.json",
+		"../../config/config.json",
+	}
+
+	var config *cfg.Config
+	var err error
+	for _, path := range configPaths {
+		config, err = cfg.LoadConfig(path)
+		if err == nil {
+			return config
+		}
+	}
+
+	t.Fatalf("failed to load config after trying paths: %v. Tried paths: %v", err, configPaths)
+	return nil // 不会到达这里
+}
+
 // TestEnsureILMPolicy 测试 ensureILMPolicy 函数并生成warm阶段时间矩阵(CSV格式)
 func TestEnsureILMPolicy(t *testing.T) {
 	// 定义时间框架
@@ -15,7 +36,7 @@ func TestEnsureILMPolicy(t *testing.T) {
 
 	// 定义日期范围
 	startDate := time.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC)
-	endDate := time.Date(2025, 3, 1, 0, 0, 0, 0, time.UTC)
+	endDate := time.Date(2025, 6, 1, 0, 0, 0, 0, time.UTC)
 	currentDate := time.Date(2025, 4, 1, 0, 0, 0, 0, time.UTC)
 
 	// 初始化HTML输出
@@ -50,21 +71,17 @@ func TestEnsureILMPolicy(t *testing.T) {
 		daysDiff := int(currentDate.Sub(d).Hours() / 24)
 
 		htmlOutput.WriteString(`
| ` + month + ``)
-
+		config := loadConfig(t)
 		// 遍历每个时间框架
 		for _, period := range timeFrames {
 			// 默认配置
-			config := map[string]float64{
-				"timeDecayFactor":         0.3,
-				"periodGranularityFactor": 0.7,
-				"warmPhaseMultiplier":     1.0,
-				"coldPhaseMultiplier":     2.0,
-				"deletePhaseMultiplier":   3.0,
-			}
+			// 加载配置文件
+			// 尝试从不同层级加载配置
 
+			// 获取candle类型的冷却模型配置
+			coolingConfig := config.Elasticsearch.ILM.DataTypes["candle"].CoolingModelConfig
 			// 计算warm阶段时间
-			warmDays, _, _ := NonLinearCoolingModel(daysDiff, period, config)
-
+			warmDays, _, _ := NonLinearCoolingModel(daysDiff, period, coolingConfig)
 			// 计算颜色 (0-255范围) 基于0-1800的范围
 			colorValue := int(float64(warmDays) / 2500 * 255)
 			if colorValue > 255 {
@@ -82,9 +99,113 @@ func TestEnsureILMPolicy(t *testing.T) {
 	}
 
 	htmlOutput.WriteString(`
+
+ | ILM Cold Phase Duration Matrix
+	
+		
+			| Month`)
+
+	// 写入cold表头
+	for _, period := range timeFrames {
+		htmlOutput.WriteString(fmt.Sprintf(` | %s`, period))
+	}
+	htmlOutput.WriteString(` | 
`)
+
+	// 遍历每个月,生成cold矩阵
+	for d := startDate; !d.After(endDate); d = d.AddDate(0, 1, 0) {
+		month := d.Format("2006-01")
+		daysDiff := int(currentDate.Sub(d).Hours() / 24)
+
+		htmlOutput.WriteString(`| ` + month + ``)
+
+		// 遍历每个时间框架
+		for _, period := range timeFrames {
+			// 默认配置
+			config := map[string]float64{
+				"timeDecayFactor":         10,
+				"baseRetention":           1,
+				"periodGranularityFactor": 0.1,
+				"warmPhaseMultiplier":     1.0,
+				"coldPhaseMultiplier":     2.0,
+				"deletePhaseMultiplier":   5.0,
+			}
+
+			// 计算cold阶段时间
+			_, coldDays, _ := NonLinearCoolingModel(daysDiff, period, config)
+
+			// 计算颜色 (0-255范围) 基于0-2000的范围
+			colorValue := int(float64(coldDays) / 2000 * 255)
+			if colorValue > 255 {
+				colorValue = 255
+			}
+			bgColor := fmt.Sprintf("rgb(%d, 0, %d)", colorValue, 255-colorValue)
+
+			htmlOutput.WriteString(fmt.Sprintf(
+				` | %d`,
+				bgColor,
+				coldDays,
+			))
+		}
+		htmlOutput.WriteString(` | 
`)
+	}
+
+	htmlOutput.WriteString(`
+
+	ILM Delete Phase Duration Matrix
+	
+		
+			| Month`)
+
+	// 写入delete表头
+	for _, period := range timeFrames {
+		htmlOutput.WriteString(fmt.Sprintf(` | %s`, period))
+	}
+	htmlOutput.WriteString(` | 
`)
+
+	// 遍历每个月,生成delete矩阵
+	for d := startDate; !d.After(endDate); d = d.AddDate(0, 1, 0) {
+		month := d.Format("2006-01")
+		daysDiff := int(currentDate.Sub(d).Hours() / 24)
+
+		htmlOutput.WriteString(`| ` + month + ``)
+
+		// 遍历每个时间框架
+		for _, period := range timeFrames {
+			// 默认配置
+			config := map[string]float64{
+				"timeDecayFactor":         10,
+				"baseRetention":           1,
+				"periodGranularityFactor": 0.1,
+				"warmPhaseMultiplier":     1.0,
+				"coldPhaseMultiplier":     2.0,
+				"deletePhaseMultiplier":   5.0,
+			}
+
+			// 计算delete阶段时间
+			_, _, deleteDays := NonLinearCoolingModel(daysDiff, period, config)
+
+			// 计算颜色 (0-255范围) 基于0-5000的范围
+			colorValue := int(float64(deleteDays) / 5000 * 255)
+			if colorValue > 255 {
+				colorValue = 255
+			}
+			bgColor := fmt.Sprintf("rgb(%d, 0, %d)", colorValue, 255-colorValue)
+
+			htmlOutput.WriteString(fmt.Sprintf(
+				` | %d`,
+				bgColor,
+				deleteDays,
+			))
+		}
+		htmlOutput.WriteString(` | 
`)
+	}
+
+	htmlOutput.WriteString(`