Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 2 additions & 6 deletions boot/app_classes_path.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package boot

import (
"fmt"
"os"
)

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

func (acp *AppClassesPath) String() string {
return fmt.Sprintf("%s", *acp)
return string(*acp)
}

func (acp *AppClassesPath) Type() string {
return "string"
}

func (acp *AppClassesPath) Contribute() error {
if err := os.Setenv(EnvAppClassesPath, acp.String()); err != nil {
return err
}
return nil
return os.Setenv(EnvAppClassesPath, acp.String())
}
8 changes: 2 additions & 6 deletions boot/app_lib_path.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package boot

import (
"fmt"
"os"
)

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

func (alp *AppLibPath) String() string {
return fmt.Sprintf("%s", *alp)
return string(*alp)
}

func (alp *AppLibPath) Type() string {
return "string"
}

func (alp *AppLibPath) Contribute() error {
if err := os.Setenv(EnvAppLibPath, alp.String()); err != nil {
return err
}
return nil
return os.Setenv(EnvAppLibPath, alp.String())
}
43 changes: 4 additions & 39 deletions boot/spring_optimizer.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,9 @@ import (
"strings"

"github.com/paketo-buildpacks/libpak/bard"
"github.com/paketo-buildpacks/libpak/sherpa"
boot "github.com/softleader/memory-calculator/boot/helper"
)

const (
helperWebApplicationType = "web-application-type"
)

type SpringOptimizer struct {
Logger bard.Logger
AppClassesPath *AppClassesPath
Expand All @@ -35,49 +30,19 @@ func (so *SpringOptimizer) Execute() error {
return err
}

hs, err := so.buildHelpers()
wat := boot.WebApplicationType{Logger: so.Logger}
values, err := wat.Execute()
if err != nil {
return err
}

inOrder := []string{
helperWebApplicationType,
}

// 按照指定順序執行
for _, key := range inOrder {
h, ok := hs[key]
if !ok {
continue
}
values, err := h.Execute()
if err != nil {
for k, v := range values {
if err = os.Setenv(k, strings.TrimSpace(v)); err != nil {
return err
}
for k, v := range values {
v = strings.TrimSpace(v)
if err = os.Setenv(k, v); err != nil { // update golang environment variable
return err
}
}
}

return nil
}

func (so *SpringOptimizer) buildHelpers() (h map[string]sherpa.ExecD, err error) {
var (
l = so.Logger
wat = boot.WebApplicationType{Logger: l}
)

h = map[string]sherpa.ExecD{
helperWebApplicationType: wat,
}

return h, nil
}

func (so *SpringOptimizer) contribute() error {
return contribute(
so.AppClassesPath,
Expand Down
8 changes: 2 additions & 6 deletions calc/app_path.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package calc

import (
"fmt"
"os"
)

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

func (ap *AppPath) String() string {
return fmt.Sprintf("%s", *ap)
return string(*ap)
}

func (ap *AppPath) Type() string {
return "string"
}

func (ap *AppPath) Contribute() error {
if err := os.Setenv(EnvAppPath, ap.String()); err != nil {
return err
}
return nil
return os.Setenv(EnvAppPath, ap.String())
}
63 changes: 22 additions & 41 deletions calc/calculator.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ type Calculator struct {
Logger bard.Logger
// MemoryLimitPath 一般情境不需要調整, 開出來是讓 test 時可以設定細節
MemoryLimitPath *MemoryLimitPath
//

JVMOptions *JVMOptions
HeadRoom *HeadRoom
Expand Down Expand Up @@ -120,56 +119,38 @@ func (c *Calculator) Execute() (*JavaToolOptions, error) {
// https://github.com/paketo-buildpacks/libjvm/blob/main/cmd/helper/main.go
// https://github.com/paketo-buildpacks/libjvm/blob/main/build.go#L274
func (c *Calculator) buildHelpers() (h map[string]sherpa.ExecD, err error) {
var (
l = c.Logger
cl = libjvm.NewCertificateLoader()

a = helper.ActiveProcessorCount{Logger: l}
spc = helper.SecurityProvidersConfigurer{Logger: l}
d = helper.LinkLocalDNS{Logger: l}
j = helper.JavaOpts{Logger: l}
jh = helper.JVMHeapDump{Logger: l}
m = helper.MemoryCalculator{
Logger: l,
MemoryLimitPathV1: c.MemoryLimitPath.V1,
MemoryLimitPathV2: c.MemoryLimitPath.V2,
MemoryInfoPath: helper.DefaultMemoryInfoPath,
}
o = helper.OpenSSLCertificateLoader{CertificateLoader: cl, Logger: l}
s9 = helper.SecurityProvidersClasspath9{Logger: l}
d9 = helper.Debug9{Logger: l}
jm = helper.JMX{Logger: l}
n = helper.NMT{Logger: l}
jf = helper.JFR{Logger: l}
)
l := c.Logger

file := "/etc/resolv.conf"
d.Config, err = dns.ClientConfigFromFile(file)
d := helper.LinkLocalDNS{Logger: l}
d.Config, err = dns.ClientConfigFromFile("/etc/resolv.conf")
if err != nil {
return nil, fmt.Errorf("unable to read DNS client configuration from %s\n%w", file, err)
return nil, fmt.Errorf("unable to read DNS client configuration from %s\n%w", "/etc/resolv.conf", err)
}

h = map[string]sherpa.ExecD{
helperActiveProcessorCount: a,
helperJavaOpts: j,
helperJvmHeap: jh,
helperActiveProcessorCount: helper.ActiveProcessorCount{Logger: l},
helperJavaOpts: helper.JavaOpts{Logger: l},
helperJvmHeap: helper.JVMHeapDump{Logger: l},
helperLinkLocalDns: d,
helperMemoryCalculator: m,
helperOpensslCertificateLoader: o,
helperSecurityProvidersClasspath9: s9,
helperSecurityProvidersConfigurer: spc,
helperDebug9: d9,
helperJmx: jm,
helperNmt: n,
helperJfr: jf,
helperMemoryCalculator: helper.MemoryCalculator{
Logger: l,
MemoryLimitPathV1: c.MemoryLimitPath.V1,
MemoryLimitPathV2: c.MemoryLimitPath.V2,
MemoryInfoPath: helper.DefaultMemoryInfoPath,
},
helperSecurityProvidersClasspath9: helper.SecurityProvidersClasspath9{Logger: l},
helperSecurityProvidersConfigurer: helper.SecurityProvidersConfigurer{Logger: l},
helperDebug9: helper.Debug9{Logger: l},
helperJmx: helper.JMX{Logger: l},
helperJfr: helper.JFR{Logger: l},
}
// 底層的實作中要求若開啟 jvm-cacert 則必須要設定相關的系統參數, 否則會報錯, 所以針對這個改成沒設定就不要跑了
if *c.JVMCacerts == "" {
delete(h, helperOpensslCertificateLoader)
if *c.JVMCacerts != "" {
h[helperOpensslCertificateLoader] = helper.OpenSSLCertificateLoader{CertificateLoader: libjvm.NewCertificateLoader(), Logger: l}
}
// 由於關閉 nmt 底層會印出一些關閉的 log, 我不想要看到那些, 所以針對這個改成沒開啟就不要跑了
if !*c.EnableNmt {
delete(h, helperNmt)
if *c.EnableNmt {
h[helperNmt] = helper.NMT{Logger: l}
}
return h, nil
}
Expand Down
5 changes: 1 addition & 4 deletions calc/enable_jfr.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,5 @@ func (jfr *EnableJfr) String() string {
}

func (jfr *EnableJfr) Contribute() error {
if err := os.Setenv(EnvEnableJfr, jfr.String()); err != nil {
return err
}
return nil
return os.Setenv(EnvEnableJfr, jfr.String())
}
5 changes: 1 addition & 4 deletions calc/enable_jmx.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,5 @@ func (jmx *EnableJmx) String() string {
}

func (jmx *EnableJmx) Contribute() error {
if err := os.Setenv(EnvEnableJmx, jmx.String()); err != nil {
return err
}
return nil
return os.Setenv(EnvEnableJmx, jmx.String())
}
5 changes: 1 addition & 4 deletions calc/enable_nmt.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,5 @@ func (nmt *EnableNmt) String() string {
}

func (nmt *EnableNmt) Contribute() error {
if err := os.Setenv(EnvEnableNmt, nmt.String()); err != nil {
return err
}
return nil
return os.Setenv(EnvEnableNmt, nmt.String())
}
5 changes: 1 addition & 4 deletions calc/head_room.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,5 @@ func (hr *HeadRoom) String() string {
}

func (hr *HeadRoom) Contribute() error {
if err := os.Setenv(EnvHeadRoom, hr.String()); err != nil {
return err
}
return nil
return os.Setenv(EnvHeadRoom, hr.String())
}
6 changes: 5 additions & 1 deletion calc/java_tool_options.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,12 @@ func BuildJavaToolOptions() *JavaToolOptions {
if val, ok := os.LookupEnv(EnvJavaToolOptions); ok {
o = val
}
existing := make(map[string]struct{}, len(strings.Fields(o)))
for _, part := range strings.Fields(o) {
existing[part] = struct{}{}
}
for _, option := range ContributeOptions {
if !strings.Contains(o, option) {
if _, found := existing[option]; !found {
if o == "" {
o = option
} else {
Expand Down
31 changes: 10 additions & 21 deletions calc/jvm_cacerts.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package calc

import (
"fmt"
"os"
"path/filepath"
)
Expand Down Expand Up @@ -30,37 +29,27 @@ func (j *JVMCacerts) Set(s string) error {
}

func (j *JVMCacerts) String() string {
return fmt.Sprintf("%s", *j)
return string(*j)
}

func (j *JVMCacerts) Type() string {
return "string"
}

func (j *JVMCacerts) Contribute() error {
if s := j.String(); s == "" {
cacert := j.String()
if cacert == "" {
if javaHome, ok := os.LookupEnv(envJavaHome); ok {
cacert := filepath.Join(javaHome, subPathCacerts)
if exist, err := isFileExist(cacert); exist && err == nil {
*j = JVMCacerts(cacert)
path := filepath.Join(javaHome, subPathCacerts)
if f, err := os.Open(path); err == nil {
f.Close()
*j = JVMCacerts(path)
cacert = path
}
}
}
if s := j.String(); s != "" {
if err := os.Setenv(EnvJVMCacerts, s); err != nil {
return err
}
if cacert != "" {
return os.Setenv(EnvJVMCacerts, cacert)
}
return nil
}

func isFileExist(path string) (bool, error) {
fileInfo, err := os.Stat(path)
if err != nil {
if os.IsNotExist(err) {
return false, nil
}
return false, err
}
return !fileInfo.IsDir(), nil
}
7 changes: 2 additions & 5 deletions calc/jvm_class_adj.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package calc

import (
"fmt"
"os"
)

Expand All @@ -28,7 +27,7 @@ func (j *JVMClassAdj) Set(s string) error {
}

func (j *JVMClassAdj) String() string {
return fmt.Sprintf("%s", *j)
return string(*j)
}

func (j *JVMClassAdj) Type() string {
Expand All @@ -37,9 +36,7 @@ func (j *JVMClassAdj) Type() string {

func (j *JVMClassAdj) Contribute() error {
if s := j.String(); s != "" {
if err := os.Setenv(EnvJVMClassAdj, s); err != nil {
return err
}
return os.Setenv(EnvJVMClassAdj, s)
}
return nil
}
Loading
Loading