Skip to content

Commit 8c4a12b

Browse files
KyleCBClaude Sonnet 4.6
andcommitted
refactor: fix verbose env var bug and simplify codebase
Co-authored-by: Claude Sonnet 4.6 <no-reply@softleader.com.tw>
1 parent 1a43d40 commit 8c4a12b

17 files changed

Lines changed: 60 additions & 157 deletions

boot/app_classes_path.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package boot
22

33
import (
4-
"fmt"
54
"os"
65
)
76

@@ -28,16 +27,13 @@ func (acp *AppClassesPath) Set(s string) error {
2827
}
2928

3029
func (acp *AppClassesPath) String() string {
31-
return fmt.Sprintf("%s", *acp)
30+
return string(*acp)
3231
}
3332

3433
func (acp *AppClassesPath) Type() string {
3534
return "string"
3635
}
3736

3837
func (acp *AppClassesPath) Contribute() error {
39-
if err := os.Setenv(EnvAppClassesPath, acp.String()); err != nil {
40-
return err
41-
}
42-
return nil
38+
return os.Setenv(EnvAppClassesPath, acp.String())
4339
}

boot/app_lib_path.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package boot
22

33
import (
4-
"fmt"
54
"os"
65
)
76

@@ -28,16 +27,13 @@ func (alp *AppLibPath) Set(s string) error {
2827
}
2928

3029
func (alp *AppLibPath) String() string {
31-
return fmt.Sprintf("%s", *alp)
30+
return string(*alp)
3231
}
3332

3433
func (alp *AppLibPath) Type() string {
3534
return "string"
3635
}
3736

3837
func (alp *AppLibPath) Contribute() error {
39-
if err := os.Setenv(EnvAppLibPath, alp.String()); err != nil {
40-
return err
41-
}
42-
return nil
38+
return os.Setenv(EnvAppLibPath, alp.String())
4339
}

boot/spring_optimizer.go

Lines changed: 4 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,9 @@ import (
55
"strings"
66

77
"github.com/paketo-buildpacks/libpak/bard"
8-
"github.com/paketo-buildpacks/libpak/sherpa"
98
boot "github.com/softleader/memory-calculator/boot/helper"
109
)
1110

12-
const (
13-
helperWebApplicationType = "web-application-type"
14-
)
15-
1611
type SpringOptimizer struct {
1712
Logger bard.Logger
1813
AppClassesPath *AppClassesPath
@@ -35,49 +30,19 @@ func (so *SpringOptimizer) Execute() error {
3530
return err
3631
}
3732

38-
hs, err := so.buildHelpers()
33+
wat := boot.WebApplicationType{Logger: so.Logger}
34+
values, err := wat.Execute()
3935
if err != nil {
4036
return err
4137
}
42-
43-
inOrder := []string{
44-
helperWebApplicationType,
45-
}
46-
47-
// 按照指定順序執行
48-
for _, key := range inOrder {
49-
h, ok := hs[key]
50-
if !ok {
51-
continue
52-
}
53-
values, err := h.Execute()
54-
if err != nil {
38+
for k, v := range values {
39+
if err = os.Setenv(k, strings.TrimSpace(v)); err != nil {
5540
return err
5641
}
57-
for k, v := range values {
58-
v = strings.TrimSpace(v)
59-
if err = os.Setenv(k, v); err != nil { // update golang environment variable
60-
return err
61-
}
62-
}
6342
}
64-
6543
return nil
6644
}
6745

68-
func (so *SpringOptimizer) buildHelpers() (h map[string]sherpa.ExecD, err error) {
69-
var (
70-
l = so.Logger
71-
wat = boot.WebApplicationType{Logger: l}
72-
)
73-
74-
h = map[string]sherpa.ExecD{
75-
helperWebApplicationType: wat,
76-
}
77-
78-
return h, nil
79-
}
80-
8146
func (so *SpringOptimizer) contribute() error {
8247
return contribute(
8348
so.AppClassesPath,

calc/app_path.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package calc
22

33
import (
4-
"fmt"
54
"os"
65
)
76

@@ -28,16 +27,13 @@ func (ap *AppPath) Set(s string) error {
2827
}
2928

3029
func (ap *AppPath) String() string {
31-
return fmt.Sprintf("%s", *ap)
30+
return string(*ap)
3231
}
3332

3433
func (ap *AppPath) Type() string {
3534
return "string"
3635
}
3736

3837
func (ap *AppPath) Contribute() error {
39-
if err := os.Setenv(EnvAppPath, ap.String()); err != nil {
40-
return err
41-
}
42-
return nil
38+
return os.Setenv(EnvAppPath, ap.String())
4339
}

calc/calculator.go

Lines changed: 22 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ type Calculator struct {
3232
Logger bard.Logger
3333
// MemoryLimitPath 一般情境不需要調整, 開出來是讓 test 時可以設定細節
3434
MemoryLimitPath *MemoryLimitPath
35-
//
3635

3736
JVMOptions *JVMOptions
3837
HeadRoom *HeadRoom
@@ -120,56 +119,38 @@ func (c *Calculator) Execute() (*JavaToolOptions, error) {
120119
// https://github.com/paketo-buildpacks/libjvm/blob/main/cmd/helper/main.go
121120
// https://github.com/paketo-buildpacks/libjvm/blob/main/build.go#L274
122121
func (c *Calculator) buildHelpers() (h map[string]sherpa.ExecD, err error) {
123-
var (
124-
l = c.Logger
125-
cl = libjvm.NewCertificateLoader()
126-
127-
a = helper.ActiveProcessorCount{Logger: l}
128-
spc = helper.SecurityProvidersConfigurer{Logger: l}
129-
d = helper.LinkLocalDNS{Logger: l}
130-
j = helper.JavaOpts{Logger: l}
131-
jh = helper.JVMHeapDump{Logger: l}
132-
m = helper.MemoryCalculator{
133-
Logger: l,
134-
MemoryLimitPathV1: c.MemoryLimitPath.V1,
135-
MemoryLimitPathV2: c.MemoryLimitPath.V2,
136-
MemoryInfoPath: helper.DefaultMemoryInfoPath,
137-
}
138-
o = helper.OpenSSLCertificateLoader{CertificateLoader: cl, Logger: l}
139-
s9 = helper.SecurityProvidersClasspath9{Logger: l}
140-
d9 = helper.Debug9{Logger: l}
141-
jm = helper.JMX{Logger: l}
142-
n = helper.NMT{Logger: l}
143-
jf = helper.JFR{Logger: l}
144-
)
122+
l := c.Logger
145123

146-
file := "/etc/resolv.conf"
147-
d.Config, err = dns.ClientConfigFromFile(file)
124+
d := helper.LinkLocalDNS{Logger: l}
125+
d.Config, err = dns.ClientConfigFromFile("/etc/resolv.conf")
148126
if err != nil {
149-
return nil, fmt.Errorf("unable to read DNS client configuration from %s\n%w", file, err)
127+
return nil, fmt.Errorf("unable to read DNS client configuration from %s\n%w", "/etc/resolv.conf", err)
150128
}
151129

152130
h = map[string]sherpa.ExecD{
153-
helperActiveProcessorCount: a,
154-
helperJavaOpts: j,
155-
helperJvmHeap: jh,
131+
helperActiveProcessorCount: helper.ActiveProcessorCount{Logger: l},
132+
helperJavaOpts: helper.JavaOpts{Logger: l},
133+
helperJvmHeap: helper.JVMHeapDump{Logger: l},
156134
helperLinkLocalDns: d,
157-
helperMemoryCalculator: m,
158-
helperOpensslCertificateLoader: o,
159-
helperSecurityProvidersClasspath9: s9,
160-
helperSecurityProvidersConfigurer: spc,
161-
helperDebug9: d9,
162-
helperJmx: jm,
163-
helperNmt: n,
164-
helperJfr: jf,
135+
helperMemoryCalculator: helper.MemoryCalculator{
136+
Logger: l,
137+
MemoryLimitPathV1: c.MemoryLimitPath.V1,
138+
MemoryLimitPathV2: c.MemoryLimitPath.V2,
139+
MemoryInfoPath: helper.DefaultMemoryInfoPath,
140+
},
141+
helperSecurityProvidersClasspath9: helper.SecurityProvidersClasspath9{Logger: l},
142+
helperSecurityProvidersConfigurer: helper.SecurityProvidersConfigurer{Logger: l},
143+
helperDebug9: helper.Debug9{Logger: l},
144+
helperJmx: helper.JMX{Logger: l},
145+
helperJfr: helper.JFR{Logger: l},
165146
}
166147
// 底層的實作中要求若開啟 jvm-cacert 則必須要設定相關的系統參數, 否則會報錯, 所以針對這個改成沒設定就不要跑了
167-
if *c.JVMCacerts == "" {
168-
delete(h, helperOpensslCertificateLoader)
148+
if *c.JVMCacerts != "" {
149+
h[helperOpensslCertificateLoader] = helper.OpenSSLCertificateLoader{CertificateLoader: libjvm.NewCertificateLoader(), Logger: l}
169150
}
170151
// 由於關閉 nmt 底層會印出一些關閉的 log, 我不想要看到那些, 所以針對這個改成沒開啟就不要跑了
171-
if !*c.EnableNmt {
172-
delete(h, helperNmt)
152+
if *c.EnableNmt {
153+
h[helperNmt] = helper.NMT{Logger: l}
173154
}
174155
return h, nil
175156
}

calc/enable_jfr.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,5 @@ func (jfr *EnableJfr) String() string {
4343
}
4444

4545
func (jfr *EnableJfr) Contribute() error {
46-
if err := os.Setenv(EnvEnableJfr, jfr.String()); err != nil {
47-
return err
48-
}
49-
return nil
46+
return os.Setenv(EnvEnableJfr, jfr.String())
5047
}

calc/enable_jmx.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,5 @@ func (jmx *EnableJmx) String() string {
4343
}
4444

4545
func (jmx *EnableJmx) Contribute() error {
46-
if err := os.Setenv(EnvEnableJmx, jmx.String()); err != nil {
47-
return err
48-
}
49-
return nil
46+
return os.Setenv(EnvEnableJmx, jmx.String())
5047
}

calc/enable_nmt.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,5 @@ func (nmt *EnableNmt) String() string {
4343
}
4444

4545
func (nmt *EnableNmt) Contribute() error {
46-
if err := os.Setenv(EnvEnableNmt, nmt.String()); err != nil {
47-
return err
48-
}
49-
return nil
46+
return os.Setenv(EnvEnableNmt, nmt.String())
5047
}

calc/head_room.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,5 @@ func (hr *HeadRoom) String() string {
4343
}
4444

4545
func (hr *HeadRoom) Contribute() error {
46-
if err := os.Setenv(EnvHeadRoom, hr.String()); err != nil {
47-
return err
48-
}
49-
return nil
46+
return os.Setenv(EnvHeadRoom, hr.String())
5047
}

calc/java_tool_options.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,12 @@ func BuildJavaToolOptions() *JavaToolOptions {
2121
if val, ok := os.LookupEnv(EnvJavaToolOptions); ok {
2222
o = val
2323
}
24+
existing := make(map[string]struct{}, len(strings.Fields(o)))
25+
for _, part := range strings.Fields(o) {
26+
existing[part] = struct{}{}
27+
}
2428
for _, option := range ContributeOptions {
25-
if !strings.Contains(o, option) {
29+
if _, found := existing[option]; !found {
2630
if o == "" {
2731
o = option
2832
} else {

0 commit comments

Comments
 (0)