openstudio-workflow 1.0.0.pat1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +12 -0
  3. data/README.md +16 -68
  4. data/Rakefile +9 -9
  5. data/bin/openstudio_cli +786 -0
  6. data/lib/openstudio/workflow/adapters/input/local.rb +97 -0
  7. data/lib/openstudio/workflow/adapters/output/local.rb +90 -0
  8. data/lib/openstudio/workflow/adapters/output/socket.rb +70 -0
  9. data/lib/openstudio/workflow/{jobs/run_preflight/run_preflight.rb → adapters/output/web.rb} +37 -19
  10. data/lib/openstudio/workflow/{adapter.rb → adapters/output_adapter.rb} +53 -51
  11. data/lib/openstudio/workflow/job.rb +22 -0
  12. data/lib/openstudio/workflow/jobs/{run_energyplus → resources}/monthly_report.idf +0 -0
  13. data/lib/openstudio/workflow/jobs/run_energyplus.rb +49 -0
  14. data/lib/openstudio/workflow/jobs/run_ep_measures.rb +55 -0
  15. data/lib/openstudio/workflow/jobs/run_initialization.rb +136 -0
  16. data/lib/openstudio/workflow/jobs/run_os_measures.rb +59 -0
  17. data/lib/openstudio/workflow/jobs/run_postprocess.rb +53 -0
  18. data/lib/openstudio/workflow/jobs/run_preprocess.rb +81 -0
  19. data/lib/openstudio/workflow/jobs/run_reporting_measures.rb +86 -0
  20. data/lib/openstudio/workflow/jobs/run_translation.rb +49 -0
  21. data/lib/openstudio/workflow/multi_delegator.rb +1 -3
  22. data/lib/openstudio/workflow/registry.rb +137 -0
  23. data/lib/openstudio/workflow/run.rb +182 -221
  24. data/lib/openstudio/workflow/time_logger.rb +1 -1
  25. data/lib/openstudio/workflow/util/energyplus.rb +564 -0
  26. data/lib/openstudio/workflow/util/io.rb +33 -0
  27. data/lib/openstudio/workflow/util/measure.rb +520 -0
  28. data/lib/openstudio/workflow/util/model.rb +100 -0
  29. data/lib/openstudio/workflow/util/post_process.rb +177 -0
  30. data/lib/openstudio/workflow/util/weather_file.rb +108 -0
  31. data/lib/openstudio/workflow/util.rb +14 -0
  32. data/lib/openstudio/workflow/version.rb +1 -1
  33. data/lib/openstudio/workflow_json.rb +399 -0
  34. data/lib/openstudio/workflow_runner.rb +213 -0
  35. data/lib/openstudio-workflow.rb +13 -118
  36. metadata +45 -85
  37. data/lib/openstudio/extended_runner.rb +0 -105
  38. data/lib/openstudio/workflow/adapters/local.rb +0 -101
  39. data/lib/openstudio/workflow/adapters/mongo.rb +0 -227
  40. data/lib/openstudio/workflow/jobs/lib/apply_measures.rb +0 -253
  41. data/lib/openstudio/workflow/jobs/run_energyplus/run_energyplus.rb +0 -314
  42. data/lib/openstudio/workflow/jobs/run_openstudio/run_openstudio.rb +0 -230
  43. data/lib/openstudio/workflow/jobs/run_postprocess/run_postprocess.rb +0 -110
  44. data/lib/openstudio/workflow/jobs/run_reporting_measures/run_reporting_measures.rb +0 -471
  45. data/lib/openstudio/workflow/jobs/run_runmanager/run_runmanager.rb +0 -247
  46. data/lib/openstudio/workflow/jobs/run_xml/run_xml.rb +0 -279
@@ -17,138 +17,33 @@
17
17
  # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
18
  ######################################################################
19
19
 
20
- require 'pp'
21
- require 'rubyXL'
22
- require 'multi_json'
23
- require 'colored'
24
20
  require 'fileutils'
25
- require 'securerandom' # uuids
26
- require 'json' # needed for a single pretty generate call
21
+ require 'json'
27
22
  require 'pathname'
28
23
 
29
- begin
30
- require 'facter'
31
- rescue LoadError => e
32
- warn 'Could not load Facter. Will not be able to save the IP address to the log'.red
33
- end
34
-
35
- require 'openstudio/workflow/version'
36
- require 'openstudio/workflow/multi_delegator'
37
- require 'openstudio/workflow/run'
38
- require 'openstudio/workflow/jobs/lib/apply_measures'
39
- require 'openstudio/workflow/time_logger'
40
-
24
+ require_relative 'openstudio/workflow/version'
25
+ require_relative 'openstudio/workflow/multi_delegator'
26
+ require_relative 'openstudio/workflow/run'
27
+ require_relative 'openstudio/workflow/job'
28
+ require_relative 'openstudio/workflow/time_logger'
29
+ require_relative 'openstudio/workflow/registry'
30
+ require_relative 'openstudio/workflow/util'
41
31
  require 'openstudio'
42
- require 'openstudio/extended_runner'
43
-
44
- ENV['OPENSTUDIO_WORKFLOW'] = 'true'
45
-
46
- # some core extensions
47
- class String
48
- def to_underscore
49
- gsub(/::/, '/')
50
- .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
51
- .gsub(/([a-z\d])([A-Z])/, '\1_\2')
52
- .tr('-', '_')
53
- .downcase
54
- end
55
- end
32
+ require_relative 'openstudio/workflow_runner'
56
33
 
57
34
  module OpenStudio
58
35
  module Workflow
59
36
  extend self
60
37
 
61
- # Create a new workflow instance using the defined adapter and UUID
62
- def load(adapter_name, run_directory, options = {})
63
- defaults = { adapter_options: {} }
64
- options = defaults.merge(options)
65
- # We don't have deep merge so just check for the rails_env
66
- options[:adapter_options][:rails_env] = :development unless options[:adapter_options][:rails_env]
67
-
68
- # Convert various paths to absolute paths
69
- if options[:adapter_options] && options[:adapter_options][:mongoid_path] &&
70
- (Pathname.new options[:adapter_options][:mongoid_path]).absolute? == false
71
- options[:adapter_options][:mongoid_path] = File.expand_path options[:adapter_options][:mongoid_path]
72
- end
73
- if options[:analysis_root_path] &&
74
- (Pathname.new options[:analysis_root_path]).absolute? == false
75
- options[:analysis_root_path] = File.expand_path options[:analysis_root_path]
76
- end
77
- unless (Pathname.new run_directory).absolute?
78
- # relative to wherever you are running the script
79
- run_directory = File.expand_path run_directory
80
- end
81
- adapter = load_adapter adapter_name, options[:adapter_options]
82
- run_klass = OpenStudio::Workflow::Run.new(adapter, run_directory, options)
83
- # return the run class
84
- run_klass
85
- end
86
-
87
- # predefined method that simply runs EnergyPlus in the specified directory. It does not apply any workflow steps
88
- # such as preprocessing / postprocessing. The directory must have the IDF and EPW file in the folder. The
89
- # simulations will run in the directory/run path
90
- #
91
- # @param adapter_name [String] Type of adapter, local or mongo.
92
- # @param run_directory [String] Path to where the simulation is to run
93
- # @param options [Hash] List of options for the adapter
94
- def run_energyplus(adapter_name, run_directory, options = {})
95
- unless (Pathname.new run_directory).absolute?
96
- # relative to wherever you are running the script
97
- run_directory = File.expand_path run_directory
98
- end
99
-
100
- transitions = [
101
- { from: :queued, to: :preflight },
102
- { from: :preflight, to: :energyplus },
103
- { from: :energyplus, to: :finished }
104
- ]
105
-
106
- states = [
107
- { state: :queued, options: { initial: true } },
108
- { state: :preflight, options: { after_enter: :run_preflight } },
109
- { state: :energyplus, options: { after_enter: :run_energyplus } },
110
- { state: :finished },
111
- { state: :errored }
112
- ]
113
- options = {
114
- transitions: transitions,
115
- states: states
116
- }
117
-
118
- adapter = load_adapter adapter_name, options[:adapter_options]
119
- run_klass = OpenStudio::Workflow::Run.new(adapter, run_directory, options)
120
-
121
- run_klass
122
- end
123
-
124
38
  # Extract an archive to a specific location
39
+ #
125
40
  # @param archive_filename [String] Path and name of the file to extract
126
41
  # @param destination [String] Path to extract to
127
42
  # @param overwrite [Boolean] If true, will overwrite any extracted file that may already exist
43
+ #
128
44
  def extract_archive(archive_filename, destination, overwrite = true)
129
- Zip::File.open(archive_filename) do |zf|
130
- zf.each do |f|
131
- f_path = File.join(destination, f.name)
132
- FileUtils.mkdir_p(File.dirname(f_path))
133
-
134
- if File.exist?(f_path) && overwrite
135
- FileUtils.rm_rf(f_path)
136
- zf.extract(f, f_path)
137
- elsif !File.exist? f_path
138
- zf.extract(f, f_path)
139
- end
140
- end
141
- end
142
- end
143
-
144
- private
145
-
146
- def load_adapter(name, adapter_options = {})
147
- require "openstudio/workflow/adapters/#{name.downcase}"
148
- klass_name = name.to_s.split('_').map(&:capitalize) * ''
149
- # pp "#{klass_name} is the adapter class name"
150
- klass = OpenStudio::Workflow::Adapters.const_get(klass_name).new(adapter_options)
151
- klass
45
+ zf = OpenStudio::UnzipFile.new(archive_filename)
46
+ zf.extractAllFiles(destination)
152
47
  end
153
48
  end
154
49
  end
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openstudio-workflow
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.pat1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nicholas Long
8
+ - Henry Horsey
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2016-07-13 00:00:00.000000000 Z
12
+ date: 2017-01-06 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: bundler
@@ -25,103 +26,62 @@ dependencies:
25
26
  - !ruby/object:Gem::Version
26
27
  version: '1.6'
27
28
  - !ruby/object:Gem::Dependency
28
- name: rake
29
+ name: json-schema
29
30
  requirement: !ruby/object:Gem::Requirement
30
31
  requirements:
31
- - - '>='
32
+ - - ~>
32
33
  - !ruby/object:Gem::Version
33
34
  version: '0'
34
35
  type: :development
35
36
  prerelease: false
36
37
  version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - '>='
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: multi_json
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ~>
46
- - !ruby/object:Gem::Version
47
- version: 1.10.0
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ~>
53
- - !ruby/object:Gem::Version
54
- version: 1.10.0
55
- - !ruby/object:Gem::Dependency
56
- name: colored
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ~>
60
- - !ruby/object:Gem::Version
61
- version: '1.2'
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ~>
67
- - !ruby/object:Gem::Version
68
- version: '1.2'
69
- - !ruby/object:Gem::Dependency
70
- name: rubyXL
71
- requirement: !ruby/object:Gem::Requirement
72
38
  requirements:
73
39
  - - ~>
74
40
  - !ruby/object:Gem::Version
75
- version: 3.3.0
76
- type: :runtime
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ~>
81
- - !ruby/object:Gem::Version
82
- version: 3.3.0
83
- - !ruby/object:Gem::Dependency
84
- name: rubyzip
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ~>
88
- - !ruby/object:Gem::Version
89
- version: 1.2.0
90
- type: :runtime
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ~>
95
- - !ruby/object:Gem::Version
96
- version: 1.2.0
97
- description: Run OpenStudio based simulations using EnergyPlus
41
+ version: '0'
42
+ description: Run OpenStudio based measures and simulations using EnergyPlus
98
43
  email:
99
44
  - nicholas.long@nrel.gov
100
- executables: []
45
+ - henry.horsey@nrel.gov
46
+ executables:
47
+ - openstudio_cli
101
48
  extensions: []
102
49
  extra_rdoc_files: []
103
50
  files:
104
- - lib/openstudio/extended_runner.rb
105
- - lib/openstudio/workflow/adapter.rb
106
- - lib/openstudio/workflow/adapters/local.rb
107
- - lib/openstudio/workflow/adapters/mongo.rb
108
- - lib/openstudio/workflow/jobs/lib/apply_measures.rb
109
- - lib/openstudio/workflow/jobs/run_energyplus/monthly_report.idf
110
- - lib/openstudio/workflow/jobs/run_energyplus/run_energyplus.rb
111
- - lib/openstudio/workflow/jobs/run_openstudio/run_openstudio.rb
112
- - lib/openstudio/workflow/jobs/run_postprocess/run_postprocess.rb
113
- - lib/openstudio/workflow/jobs/run_preflight/run_preflight.rb
114
- - lib/openstudio/workflow/jobs/run_reporting_measures/run_reporting_measures.rb
115
- - lib/openstudio/workflow/jobs/run_runmanager/run_runmanager.rb
116
- - lib/openstudio/workflow/jobs/run_xml/run_xml.rb
51
+ - CHANGELOG.md
52
+ - README.md
53
+ - Rakefile
54
+ - bin/openstudio_cli
55
+ - lib/openstudio-workflow.rb
56
+ - lib/openstudio/workflow/adapters/input/local.rb
57
+ - lib/openstudio/workflow/adapters/output/local.rb
58
+ - lib/openstudio/workflow/adapters/output/socket.rb
59
+ - lib/openstudio/workflow/adapters/output/web.rb
60
+ - lib/openstudio/workflow/adapters/output_adapter.rb
61
+ - lib/openstudio/workflow/job.rb
62
+ - lib/openstudio/workflow/jobs/resources/monthly_report.idf
63
+ - lib/openstudio/workflow/jobs/run_energyplus.rb
64
+ - lib/openstudio/workflow/jobs/run_ep_measures.rb
65
+ - lib/openstudio/workflow/jobs/run_initialization.rb
66
+ - lib/openstudio/workflow/jobs/run_os_measures.rb
67
+ - lib/openstudio/workflow/jobs/run_postprocess.rb
68
+ - lib/openstudio/workflow/jobs/run_preprocess.rb
69
+ - lib/openstudio/workflow/jobs/run_reporting_measures.rb
70
+ - lib/openstudio/workflow/jobs/run_translation.rb
117
71
  - lib/openstudio/workflow/multi_delegator.rb
72
+ - lib/openstudio/workflow/registry.rb
118
73
  - lib/openstudio/workflow/run.rb
119
74
  - lib/openstudio/workflow/time_logger.rb
75
+ - lib/openstudio/workflow/util.rb
76
+ - lib/openstudio/workflow/util/energyplus.rb
77
+ - lib/openstudio/workflow/util/io.rb
78
+ - lib/openstudio/workflow/util/measure.rb
79
+ - lib/openstudio/workflow/util/model.rb
80
+ - lib/openstudio/workflow/util/post_process.rb
81
+ - lib/openstudio/workflow/util/weather_file.rb
120
82
  - lib/openstudio/workflow/version.rb
121
- - lib/openstudio-workflow.rb
122
- - README.md
123
- - CHANGELOG.md
124
- - Rakefile
83
+ - lib/openstudio/workflow_json.rb
84
+ - lib/openstudio/workflow_runner.rb
125
85
  homepage: https://github.com/NREL/OpenStudio-workflow-gem
126
86
  licenses:
127
87
  - LGPL
@@ -134,16 +94,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
134
94
  requirements:
135
95
  - - '>='
136
96
  - !ruby/object:Gem::Version
137
- version: 1.9.3
97
+ version: '2.0'
138
98
  required_rubygems_version: !ruby/object:Gem::Requirement
139
99
  requirements:
140
- - - '>'
100
+ - - '>='
141
101
  - !ruby/object:Gem::Version
142
- version: 1.3.1
102
+ version: '0'
143
103
  requirements: []
144
104
  rubyforge_project:
145
- rubygems_version: 2.0.14.1
105
+ rubygems_version: 2.6.7
146
106
  signing_key:
147
107
  specification_version: 4
148
- summary: Workflow Manager
108
+ summary: OpenStudio Workflow Manager
149
109
  test_files: []
@@ -1,105 +0,0 @@
1
- # Extend OS Runner to persist measure information throughout the workflow
2
- class ExtendedRunner < OpenStudio::Ruleset::OSRunner
3
- # Allow former arguments to be set and read
4
- # TODO: Consider having the former arguments passed in in initialization, and define as attr_reader
5
- attr_accessor :former_workflow_arguments
6
- attr_accessor :past_results
7
- attr_reader :workflow_arguments
8
-
9
- # Add in @workflow_arguments
10
- def initialize(multi_logger, analysis_hash, datapoint_hash)
11
- @multi_logger = multi_logger
12
- @analysis = analysis_hash
13
- @datapoint = datapoint_hash
14
- @workflow_arguments = nil
15
- super()
16
- end
17
-
18
- def analysis
19
- return @analysis
20
- end
21
-
22
- def datapoint
23
- return @datapoint
24
- end
25
-
26
- # Take the OS Argument type and map it correctly to the argument value.
27
- # OPENSTUDIO_ENUM( OSArgumentType,
28
- # ((Boolean)(Bool)(0))
29
- # ((Double)(Double)(1))
30
- # ((Quantity)(Quantity)(2))
31
- # ((Integer)(Int)(3))
32
- # ((String)(String)(4))
33
- # ((Choice)(Choice)(5))
34
- # ((Path)(Path)(6))
35
- # );
36
- # @param os_argument_name [String] The string of the argument to check
37
- # @param user_arguments [OSArgumentMap] Map of the arguments to check
38
- def bad_os_typecasting(os_argument_name, user_arguments)
39
- out = nil
40
- user_arguments.each do |arg_name, arg|
41
- # get the type cast value
42
- next unless os_argument_name == arg_name
43
-
44
- case arg.type.valueName
45
- when 'Boolean'
46
- out = arg.valueAsBool if arg.hasValue
47
- when 'Double'
48
- out = arg.valueAsDouble if arg.hasValue
49
- when 'Quantity'
50
- warn 'This OpenStudio Argument Type is deprecated'
51
- when 'Integer'
52
- out = arg.valueAsInteger if arg.hasValue
53
- when 'String'
54
- out = arg.valueAsString if arg.hasValue
55
- when 'Choice'
56
- out = arg.valueAsString if arg.hasValue
57
- when 'Path'
58
- out = arg.valueAsPath.to_s if arg.hasValue
59
- end
60
- end
61
-
62
- out
63
- end
64
-
65
- # Overloaded argument parsing
66
- def validateUserArguments(script_arguments, user_arguments)
67
- @workflow_arguments = {}
68
- user_arguments.each do |hash|
69
- value = bad_os_typecasting(hash, user_arguments)
70
- @workflow_arguments[hash.to_sym] = value if value
71
- end
72
-
73
- super
74
- end
75
-
76
- # Overload registerInfo
77
- def registerInfo(message)
78
- super
79
- @multi_logger.info message
80
- end
81
-
82
- # Overload registerInfo
83
- def registerWarning(message)
84
- super
85
- @multi_logger.warn message
86
- end
87
-
88
- # Overload registerError
89
- def registerError(message)
90
- super
91
- @multi_logger.error message
92
- end
93
-
94
- # Overload registerInitialCondition
95
- def registerInitialCondition(message)
96
- super
97
- @multi_logger.info message
98
- end
99
-
100
- # Overload registerFinalCondition
101
- def registerFinalCondition(message)
102
- super
103
- @multi_logger.info message
104
- end
105
- end
@@ -1,101 +0,0 @@
1
- ######################################################################
2
- # Copyright (c) 2008-2014, Alliance for Sustainable Energy.
3
- # All rights reserved.
4
- #
5
- # This library is free software; you can redistribute it and/or
6
- # modify it under the terms of the GNU Lesser General Public
7
- # License as published by the Free Software Foundation; either
8
- # version 2.1 of the License, or (at your option) any later version.
9
- #
10
- # This library is distributed in the hope that it will be useful,
11
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
- # Lesser General Public License for more details.
14
- #
15
- # You should have received a copy of the GNU Lesser General Public
16
- # License along with this library; if not, write to the Free Software
17
- # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
- ######################################################################
19
-
20
- require_relative '../adapter'
21
-
22
- # Local file based workflow
23
- module OpenStudio
24
- module Workflow
25
- module Adapters
26
- class Local < Adapter
27
- def initialize(options = {})
28
- super
29
- end
30
-
31
- # Tell the system that the process has started
32
- def communicate_started(directory, _options = {})
33
- # Watch out for namespace conflicts (::Time is okay but Time is OpenStudio::Time)
34
- File.open("#{directory}/started.job", 'w') { |f| f << "Started Workflow #{::Time.now}" }
35
- end
36
-
37
- # Get the data point from the path
38
- def get_datapoint(directory, options = {})
39
- defaults = { datapoint_filename: 'datapoint.json', format: 'json' }
40
- options = defaults.merge(options)
41
-
42
- # how do we log within this file?
43
- if File.exist? "#{directory}/#{options[:datapoint_filename]}"
44
- ::JSON.parse(File.read("#{directory}/#{options[:datapoint_filename]}"), symbolize_names: true)
45
- else
46
- fail "Data point file does not exist for #{directory}/#{options[:datapoint_filename]}"
47
- end
48
- end
49
-
50
- # Get the Problem/Analysis definition from the local file
51
- # TODO: rename this to get_analysis_definintion (or something like that)
52
- def get_problem(directory, options = {})
53
- defaults = { problem_filename: 'problem.json', format: 'json' }
54
- options = defaults.merge(options)
55
-
56
- if File.exist? "#{directory}/#{options[:problem_filename]}"
57
- ::JSON.parse(File.read("#{directory}/#{options[:problem_filename]}"), symbolize_names: true)
58
- else
59
- fail "Problem file does not exist for #{directory}/#{options[:problem_filename]}"
60
- end
61
- end
62
-
63
- def communicate_intermediate_result(_directory)
64
- # noop
65
- end
66
-
67
- def communicate_complete(directory)
68
- File.open("#{directory}/finished.job", 'w') { |f| f << "Finished Workflow #{::Time.now}" }
69
- end
70
-
71
- # Final state of the simulation. The os_directory is the run directory and may be needed to
72
- # zip up the results of the simuation.
73
- def communicate_failure(directory)
74
- File.open("#{directory}/failed.job", 'w') { |f| f << "Failed Workflow #{::Time.now}" }
75
- # @communicate_module.communicate_failure(@communicate_object, os_directory)
76
- end
77
-
78
- def communicate_results(directory, results)
79
- zip_results(directory)
80
-
81
- if results.is_a? Hash
82
- File.open("#{directory}/data_point_out.json", 'w') { |f| f << JSON.pretty_generate(results) }
83
- else
84
- pp "Unknown datapoint result type. Please handle #{results.class}"
85
- # data_point_json_path = OpenStudio::Path.new(run_dir) / OpenStudio::Path.new('data_point_out.json')
86
- # os_data_point.saveJSON(data_point_json_path, true)
87
- end
88
- # end
89
- end
90
-
91
- # For the local adapter send back a handle to a file to append the data. For this adapter
92
- # the log messages are likely to be the same as the run.log messages.
93
- # ?: do we really want two local logs from the Local adapter? One is in the run dir and the other is in the root
94
- def get_logger(directory, _options = {})
95
- @log ||= File.open("#{directory}/local_adapter.log", 'w')
96
- @log
97
- end
98
- end
99
- end
100
- end
101
- end