Skip to content

Commit

Permalink
ensuring we send additional data to server on workflow creation
Browse files Browse the repository at this point in the history
Signed-off-by: vsoch <vsochat@stanford.edu>
  • Loading branch information
vsoch committed Dec 28, 2020
1 parent 4cd0f76 commit fda56e0
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 7 deletions.
19 changes: 18 additions & 1 deletion snakemake/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2246,6 +2246,19 @@ def get_argument_parser(profile=None):
return parser


def generate_parser_metadata(parser, args):
"""Given a populated parser, generate the original command along with
metadata that can be handed to a logger to use as needed.
"""
command = "snakemake %s" % " ".join(
parser._source_to_settings["command_line"][""][1]
)
workdir = os.getcwd()
metadata = args.__dict__
metadata.update({"command": command})
return metadata


def main(argv=None):
"""Main entry point."""

Expand Down Expand Up @@ -2562,7 +2575,11 @@ def open_browser():
log_handler.append(slack_logger.log_handler)

elif args.wms_monitor or args.log_service == "wms":
wms_logger = logging.WMSLogger(args.wms_monitor, args.wms_monitor_arg)
# Generate additional metadata for server
metadata = generate_parser_metadata(parser, args)
wms_logger = logging.WMSLogger(
args.wms_monitor, args.wms_monitor_arg, metadata=metadata
)
log_handler.append(wms_logger.log_handler)

if args.edit_notebook:
Expand Down
26 changes: 20 additions & 6 deletions snakemake/logging.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ def log_handler(self, msg):


class WMSLogger:
def __init__(self, address=None, args=None):
def __init__(self, address=None, args=None, metadata=None):
"""A WMS monitor is a workflow management system logger to enable
monitoring with something like Panoptes. The address corresponds to
the --wms-monitor argument, and args should be a list of key/value
Expand All @@ -132,14 +132,12 @@ def __init__(self, address=None, args=None):

self.address = address or "http:127.0.0.1:5000"
self.args = parse_resources(args) or []
self.metadata = metadata or {}

# A token is suggested but not required, depends on server
self.token = os.getenv("WMS_MONITOR_TOKEN")
self.service_info()

# Add the wms_server_handler to the logger's handlers
# logger.log_handler.append(logger.wms_server_handler)

# Create or retrieve the existing workflow
self.create_workflow()

Expand Down Expand Up @@ -175,8 +173,25 @@ def create_workflow(self):
"""
import requests

# Send the working directory to the server
workdir = (
os.getcwd()
if not self.metadata.get("directory")
else os.path.abspath(self.metadata["directory"])
)

# Prepare a request that has metadata about the job
metadata = {
"snakefile": os.path.join(workdir, self.metadata.get("snakefile")),
"command": self.metadata.get("command"),
"workdir": workdir,
}

response = requests.get(
self.address + "/create_workflow", headers=self._headers, params=self.args
self.address + "/create_workflow",
headers=self._headers,
params=self.args,
data=metadata,
)

# Check the response, will exit on any error
Expand Down Expand Up @@ -269,7 +284,6 @@ def log_handler(self, msg):
"timestamp": time.asctime(),
"id": self.server["id"],
}
print(server_info)
response = requests.post(url, data=server_info, headers=self._headers)
self.check_response(response, "/update_workflow_status")

Expand Down

0 comments on commit fda56e0

Please sign in to comment.