Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
7fcca85
Add project metadata tracking with telemetry (#3929)
Leo10Gama Jun 7, 2022
91a0905
Fix retrieval process for directory name (#3962)
Leo10Gama Jun 13, 2022
e23b69a
Implement event data structure and relevant unit tests (#3955)
Leo10Gama Jun 13, 2022
43a9793
Implement tracker methods (#3970)
Leo10Gama Jun 15, 2022
ae7de58
Send Event metrics via Telemetry (#3979)
Leo10Gama Jun 22, 2022
5b131ee
Add BuildRuntime event and trackers (#3994)
Leo10Gama Jun 24, 2022
e62a655
Add UsedFeature event and trackers (#4003)
Leo10Gama Jun 28, 2022
c2790c9
Add thread lock to EventTracker (#4019)
Leo10Gama Jun 30, 2022
6edf835
Refactor Event data structure (#4027)
Leo10Gama Jul 6, 2022
4cbca01
Update tests to verify EventTracker thread lock is working (#4035)
Leo10Gama Jul 6, 2022
33ca6c5
Add send_events method to EventTracker (#4039)
Leo10Gama Jul 15, 2022
f88493f
Upgrade encryption algorithm from SHA-1 to SHA-256 (#4061)
Leo10Gama Jul 18, 2022
fda06ae
Add long event tracker (#4067)
Leo10Gama Jul 20, 2022
a5c3060
Send events via thread when at capacity (#4072)
Leo10Gama Jul 22, 2022
9a597d7
Add `sam sync` Events (#4076)
Leo10Gama Jul 28, 2022
6d81fa4
Merge with current develop branch
Leo10Gama Jul 28, 2022
b0964e8
Merge pull request #4086 from Leo10Gama/customer-journey
hawflau Jul 29, 2022
1b02888
Add workflow events (#4096)
Leo10Gama Aug 8, 2022
790e078
Fix send_events logic (#4104)
Leo10Gama Aug 10, 2022
e46d19a
Make minor tweaks before launch (#4111)
Leo10Gama Aug 15, 2022
c739c06
Merge branch 'customer-journey' into develop
Leo10Gama Aug 18, 2022
6f27629
Merge branch 'develop' into develop
Leo10Gama Aug 19, 2022
009d20e
Merge branch 'develop' into develop
Leo10Gama Aug 22, 2022
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
4 changes: 4 additions & 0 deletions samcli/commands/build/build_context.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

from samcli.commands._utils.experimental import ExperimentalFlag, prompt_experimental
from samcli.lib.providers.sam_api_provider import SamApiProvider
from samcli.lib.telemetry.event import EventTracker
from samcli.lib.utils.packagetype import IMAGE

from samcli.commands._utils.template import get_template_data
Expand Down Expand Up @@ -271,6 +272,9 @@ def run(self):

move_template(stack.location, output_template_path, modified_template)

for f in self.get_resources_to_build().functions:
EventTracker.track_event("BuildFunctionRuntime", f.runtime)

click.secho("\nBuild Succeeded", fg="green")

# try to use relpath so the command is easier to understand, however,
Expand Down
3 changes: 3 additions & 0 deletions samcli/commands/sync/command.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
)
from samcli.cli.cli_config_file import configuration_option, TomlProvider
from samcli.commands._utils.click_mutex import ClickMutex
from samcli.lib.telemetry.event import EventTracker, track_long_event
from samcli.commands.sync.sync_context import SyncContext
from samcli.lib.utils.colors import Colored
from samcli.lib.utils.version_checker import check_newer_version
Expand Down Expand Up @@ -132,6 +133,7 @@
@capabilities_option(default=DEFAULT_CAPABILITIES) # pylint: disable=E1120
@pass_context
@track_command
@track_long_event("SyncUsed", "Start", "SyncUsed", "End")
@image_repository_validation
@track_template_warnings([CodeDeployWarning.__name__, CodeDeployConditionWarning.__name__])
@check_newer_version
Expand Down Expand Up @@ -236,6 +238,7 @@ def do_cli(

build_dir = DEFAULT_BUILD_DIR_WITH_AUTO_DEPENDENCY_LAYER if dependency_layer else DEFAULT_BUILD_DIR
LOG.debug("Using build directory as %s", build_dir)
EventTracker.track_event("UsedFeature", "Accelerate")

with BuildContext(
resource_identifier=None,
Expand Down
102 changes: 17 additions & 85 deletions samcli/lib/build/workflow_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,95 +4,24 @@

import os
import logging
from collections import namedtuple
from typing import Dict, List, Optional, Tuple, Union, cast

LOG = logging.getLogger(__name__)

CONFIG = namedtuple(
"Capability",
["language", "dependency_manager", "application_framework", "manifest_name", "executable_search_paths"],
)

PYTHON_PIP_CONFIG = CONFIG(
language="python",
dependency_manager="pip",
application_framework=None,
manifest_name="requirements.txt",
executable_search_paths=None,
)

NODEJS_NPM_CONFIG = CONFIG(
language="nodejs",
dependency_manager="npm",
application_framework=None,
manifest_name="package.json",
executable_search_paths=None,
)

RUBY_BUNDLER_CONFIG = CONFIG(
language="ruby",
dependency_manager="bundler",
application_framework=None,
manifest_name="Gemfile",
executable_search_paths=None,
)

JAVA_GRADLE_CONFIG = CONFIG(
language="java",
dependency_manager="gradle",
application_framework=None,
manifest_name="build.gradle",
executable_search_paths=None,
)

JAVA_KOTLIN_GRADLE_CONFIG = CONFIG(
language="java",
dependency_manager="gradle",
application_framework=None,
manifest_name="build.gradle.kts",
executable_search_paths=None,
from samcli.lib.build.workflows import (
CONFIG,
PYTHON_PIP_CONFIG,
NODEJS_NPM_CONFIG,
RUBY_BUNDLER_CONFIG,
JAVA_GRADLE_CONFIG,
JAVA_KOTLIN_GRADLE_CONFIG,
JAVA_MAVEN_CONFIG,
DOTNET_CLIPACKAGE_CONFIG,
GO_MOD_CONFIG,
PROVIDED_MAKE_CONFIG,
NODEJS_NPM_ESBUILD_CONFIG,
)
from samcli.lib.telemetry.event import EventTracker

JAVA_MAVEN_CONFIG = CONFIG(
language="java",
dependency_manager="maven",
application_framework=None,
manifest_name="pom.xml",
executable_search_paths=None,
)

DOTNET_CLIPACKAGE_CONFIG = CONFIG(
language="dotnet",
dependency_manager="cli-package",
application_framework=None,
manifest_name=".csproj",
executable_search_paths=None,
)

GO_MOD_CONFIG = CONFIG(
language="go",
dependency_manager="modules",
application_framework=None,
manifest_name="go.mod",
executable_search_paths=None,
)

PROVIDED_MAKE_CONFIG = CONFIG(
language="provided",
dependency_manager=None,
application_framework=None,
manifest_name="Makefile",
executable_search_paths=None,
)

NODEJS_NPM_ESBUILD_CONFIG = CONFIG(
language="nodejs",
dependency_manager="npm-esbuild",
application_framework=None,
manifest_name="package.json",
executable_search_paths=None,
)
LOG = logging.getLogger(__name__)


class UnsupportedRuntimeException(Exception):
Expand Down Expand Up @@ -278,6 +207,9 @@ def get_workflow_config(

# Identify workflow configuration from the workflow selector.
config = cast(WorkFlowSelector, selector).get_config(code_dir, project_dir)

EventTracker.track_event("BuildWorkflowUsed", f"{config.language}-{config.dependency_manager}")

return config
except ValueError as ex:
raise UnsupportedRuntimeException(
Expand Down
102 changes: 102 additions & 0 deletions samcli/lib/build/workflows.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
"""Module for storing information about existing workflows."""

from collections import namedtuple
from typing import List

CONFIG = namedtuple(
"Capability",
["language", "dependency_manager", "application_framework", "manifest_name", "executable_search_paths"],
)

PYTHON_PIP_CONFIG = CONFIG(
language="python",
dependency_manager="pip",
application_framework=None,
manifest_name="requirements.txt",
executable_search_paths=None,
)

NODEJS_NPM_CONFIG = CONFIG(
language="nodejs",
dependency_manager="npm",
application_framework=None,
manifest_name="package.json",
executable_search_paths=None,
)

RUBY_BUNDLER_CONFIG = CONFIG(
language="ruby",
dependency_manager="bundler",
application_framework=None,
manifest_name="Gemfile",
executable_search_paths=None,
)

JAVA_GRADLE_CONFIG = CONFIG(
language="java",
dependency_manager="gradle",
application_framework=None,
manifest_name="build.gradle",
executable_search_paths=None,
)

JAVA_KOTLIN_GRADLE_CONFIG = CONFIG(
language="java",
dependency_manager="gradle",
application_framework=None,
manifest_name="build.gradle.kts",
executable_search_paths=None,
)

JAVA_MAVEN_CONFIG = CONFIG(
language="java",
dependency_manager="maven",
application_framework=None,
manifest_name="pom.xml",
executable_search_paths=None,
)

DOTNET_CLIPACKAGE_CONFIG = CONFIG(
language="dotnet",
dependency_manager="cli-package",
application_framework=None,
manifest_name=".csproj",
executable_search_paths=None,
)

GO_MOD_CONFIG = CONFIG(
language="go",
dependency_manager="modules",
application_framework=None,
manifest_name="go.mod",
executable_search_paths=None,
)

PROVIDED_MAKE_CONFIG = CONFIG(
language="provided",
dependency_manager=None,
application_framework=None,
manifest_name="Makefile",
executable_search_paths=None,
)

NODEJS_NPM_ESBUILD_CONFIG = CONFIG(
language="nodejs",
dependency_manager="npm-esbuild",
application_framework=None,
manifest_name="package.json",
executable_search_paths=None,
)

ALL_CONFIGS: List[CONFIG] = [
PYTHON_PIP_CONFIG,
NODEJS_NPM_CONFIG,
RUBY_BUNDLER_CONFIG,
JAVA_GRADLE_CONFIG,
JAVA_KOTLIN_GRADLE_CONFIG,
JAVA_MAVEN_CONFIG,
DOTNET_CLIPACKAGE_CONFIG,
GO_MOD_CONFIG,
PROVIDED_MAKE_CONFIG,
NODEJS_NPM_ESBUILD_CONFIG,
]
10 changes: 10 additions & 0 deletions samcli/lib/sync/sync_flow_executor.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from concurrent.futures import ThreadPoolExecutor, Future

from botocore.exceptions import ClientError
from samcli.lib.telemetry.event import EventName, EventTracker, EventType

from samcli.lib.utils.colors import Colored
from samcli.lib.providers.exceptions import MissingLocalDefinition
Expand Down Expand Up @@ -331,12 +332,21 @@ def _sync_flow_execute_wrapper(sync_flow: SyncFlow) -> SyncFlowResult:
SyncFlowException
"""
dependent_sync_flows = []
sync_types = EventType.get_accepted_values(EventName.SYNC_FLOW_START)
sync_type: Optional[str] = type(sync_flow).__name__
if sync_type not in sync_types:
sync_type = None
try:
if sync_type:
EventTracker.track_event("SyncFlowStart", sync_type)
dependent_sync_flows = sync_flow.execute()
except ClientError as e:
if e.response.get("Error", dict()).get("Code", "") == "ResourceNotFoundException":
raise SyncFlowException(sync_flow, MissingPhysicalResourceError()) from e
raise SyncFlowException(sync_flow, e) from e
except Exception as e:
raise SyncFlowException(sync_flow, e) from e
finally:
if sync_type:
EventTracker.track_event("SyncFlowEnd", sync_type)
return SyncFlowResult(sync_flow=sync_flow, dependent_sync_flows=dependent_sync_flows)
Loading