Beispiel #1
0
        public async Task <bool> GetFunctionData()
        {
            _settings = await _functionSettings.GetFunctionSettings();

            _localLogService.Log("Refreshing functions");

            if (_settings == null)
            {
                _localLogService.LogError("Could not get function settings! Check the function key passed in with the 'k' parameter.");
                return(false);
            }

            _localLogService.LogInfo("    Functions in this site \r\n          press (number) to run test data on live Azure Function. Press (r) to refresh function data from server.");

            var count = 1;

            foreach (var s in _settings)
            {
                var binding = s.config.bindings
                              .FirstOrDefault(_ => _.direction == KsConstants.Functions.In &&
                                              _.type.EndsWith(KsConstants.Functions.Trigger, StringComparison.Ordinal));

                _localLogService.LogInfo($"    ({count}) {s.name} [{binding?.type}]");
                count++;
            }

            return(true);
        }
Beispiel #2
0
#pragma warning disable RECS0165 // Asynchronous methods should return a Task instead of void
        async void _monitorCallback(object data)
#pragma warning restore RECS0165 // Asynchronous methods should return a Task instead of void
        {
            var callback = data as Func <string, Task>;

            await _semaphore.WaitAsync();

            try
            {
                foreach (var f in _filesChangedList)
                {
                    _localLogService.LogInfo($"[Sending] {f.Replace(Directory.GetCurrentDirectory(), "")}");
                    if (callback != null)
                    {
                        await callback(f);
                    }
                }
            }
            catch (Exception ex)
            {
                _localLogService.LogError($"Error: exception in _monitorCallback: {ex.Message}");
            }
            finally
            {
                _filesChangedList.Clear();
                _semaphore.Release();
            }
        }
        public (int, bool) Process(string[] args)
        {
            if (args == null || args.Length == 0)
            {
                args = new[] { "-h" };
            }

            var monitor = false;
            var log     = false;
            var get     = false;
            var upload  = false;

            var path   = string.Empty;
            var folder = string.Empty;
            var key    = string.Empty;

            ArgumentSyntax.Parse(args, syntax =>
            {
                syntax.DefineOption("l|log", ref log, "Output the Kudulog stream to the console");
                syntax.DefineOption("m|monitor", ref monitor, "Monitor the path for changes and send them up");
                syntax.DefineOption("p|path", ref path, "The base path of your function (blank for current path)");
                syntax.DefineOption("g|get", ref get, "Download the Function app ready for editing locally");
                syntax.DefineOption("u|upload", ref upload, "Output the Kudulog stream to the console");
                syntax.DefineOption("f|folder", ref folder, "Sub folder to get or upload. If omitted it will get or send everything under wwwroot from Kudu");
                syntax.DefineOption("k|key", ref key, "Function key for use when calling test endpoints");
            });

            _paramService.Add("monitor", monitor.ToString());
            _paramService.Add("log", log.ToString());
            _paramService.Add("get", get.ToString());
            _paramService.Add("upload", upload.ToString());
            _paramService.Add("path", path);
            _paramService.Add("folder", folder);
            _paramService.Add("key", key);

            if (!string.IsNullOrEmpty(path))
            {
                _logService.LogInfo($"Base path: {path}");
                if (!Directory.Exists(path))
                {
                    _logService.LogError("Directory does not exist");
                    return(1, false);
                }
                Directory.SetCurrentDirectory(path);
            }

            var pubSettings = _publishSettingsService.AutoLoadPublishProfile();

            if (pubSettings == null)
            {
                _logService.LogError("Could not find publish settings file.");
                _logService.LogInfo("You can download a publish settings file from your Azure App Service settings.");
                _logService.LogInfo("Sample video: https://cloud.githubusercontent.com/assets/5225782/23344608/ac7c44d4-fcd3-11e6-90f2-0291a31f1522.gif");
                return(0, false);
            }

            if (key != string.Empty)
            {
                var result = _testService.GetFunctionData().Result;
            }

            if (get)
            {
                var filesResult = _fileService.GetFiles(folder).Result;

                if (!filesResult)
                {
                    return(1, false);
                }
            }
            else if (upload) //we probably don't want get and set!
            {
                var filesResult = _fileService.UploadFiles(folder).Result;

                if (!filesResult)
                {
                    return(1, false);
                }
            }

            if (log)
            {
                Task.Run(() =>
                {
                    _kuduLogService.StartLog();
                });
            }

            if (monitor)
            {
                Task.Run(() =>
                {
                    _fileService.Monitor();
                });
                return(0, true);
            }

            return(0, false);
        }