Skip to content

Commit

Permalink
Merge pull request #63 from OpenCHAMI/fix-output-flag
Browse files Browse the repository at this point in the history
Fix issues related to writing output to file
  • Loading branch information
alexlovelltroy authored Oct 24, 2024
2 parents 294f452 + 27fec74 commit f674ecb
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 35 deletions.
4 changes: 1 addition & 3 deletions internal/cache/sqlite/sqlite.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,11 +85,9 @@ func DeleteScannedAssets(path string, results ...magellan.RemoteAsset) error {

func GetScannedAssets(path string) ([]magellan.RemoteAsset, error) {
// check if path exists first to prevent creating the database
exists, err := util.PathExists(path)
_, exists := util.PathExists(path)
if !exists {
return nil, fmt.Errorf("no file found")
} else if err != nil {
return nil, err
}

// now check if the file is the SQLite database
Expand Down
31 changes: 13 additions & 18 deletions internal/collect.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,13 @@ import (
"net/http"
"os"
"path"
"path/filepath"
"sync"
"time"

"github.com/OpenCHAMI/magellan/pkg/client"
"github.com/OpenCHAMI/magellan/pkg/crawler"

"github.com/OpenCHAMI/magellan/internal/util"
"github.com/rs/zerolog/log"

"github.com/Cray-HPE/hms-xname/xnames"
Expand Down Expand Up @@ -148,25 +148,20 @@ func CollectInventory(assets *[]RemoteAsset, params *CollectParams) error {

// write JSON data to file if output path is set using hive partitioning strategy
if outputPath != "" {
// make directory if it does exists
exists, err := util.PathExists(outputPath)
if err == nil && !exists {
err = os.MkdirAll(outputPath, 0o644)
var (
finalPath = fmt.Sprintf("./%s/%s/%d.json", outputPath, data["ID"], time.Now().Unix())
finalDir = filepath.Dir(finalPath)
)
// if it doesn't, make the directory and write file
err = os.MkdirAll(finalDir, 0o777)
if err == nil { // no error
err = os.WriteFile(path.Clean(finalPath), body, os.ModePerm)
if err != nil {
log.Error().Err(err).Msg("failed to make directory for output")
} else {
// make the output directory to store files
outputPath, err := util.MakeOutputDirectory(outputPath, false)
if err != nil {
log.Error().Err(err).Msg("failed to make output directory")
} else {
// write the output to the final path
err = os.WriteFile(path.Clean(fmt.Sprintf("%s/%s/%d.json", params.URI, outputPath, time.Now().Unix())), body, os.ModePerm)
if err != nil {
log.Error().Err(err).Msgf("failed to write data to file")
}
}
log.Error().Err(err).Msgf("failed to write collect output to file")
}

} else { // error is set
log.Error().Err(err).Msg("failed to make directory for collect output")
}
}

Expand Down
20 changes: 6 additions & 14 deletions internal/util/path.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package util

import (
"fmt"
"io/fs"
"os"
"path/filepath"
"strings"
Expand All @@ -13,15 +14,9 @@ import (
//
// Returns whether the path exists and no error if successful,
// otherwise, it returns false with an error.
func PathExists(path string) (bool, error) {
_, err := os.Stat(path)
if err == nil {
return true, nil
}
if os.IsNotExist(err) {
return false, nil
}
return false, err
func PathExists(path string) (fs.FileInfo, bool) {
fi, err := os.Stat(path)
return fi, !os.IsNotExist(err)
}

// SplitPathForViper() is an utility function to split a path into 3 parts:
Expand Down Expand Up @@ -51,17 +46,14 @@ func MakeOutputDirectory(path string, overwrite bool) (string, error) {
final := path + "/" + dirname

// check if path is valid and directory
pathExists, err := PathExists(final)
if err != nil {
return "", fmt.Errorf("failed to check for existing path: %v", err)
}
_, pathExists := PathExists(final)
if pathExists && !overwrite {
// make sure it is directory with 0o644 permissions
return "", fmt.Errorf("found existing path: %v", final)
}

// create directory with data + time
err = os.MkdirAll(final, 0766)
err := os.MkdirAll(final, 0766)
if err != nil {
return "", fmt.Errorf("failed to make directory: %v", err)
}
Expand Down

0 comments on commit f674ecb

Please sign in to comment.