###### tags: `New Relic` # Recipe Service <-> newrelic-cli workflow ## Proposal 1. newrelic-cli gets HostInfo, perhaps like/from [NrDiag](https://github.com/newrelic/newrelic-diagnostics-cli/blob/a8095808557de2ade621169fa4a5e1c4de4ff739/tasks/base/env/hostInfoHelpers.go#L14-L24) 1. [newrelic-cli queries for a potential infrastructure agent recipe](#Infra-Agent-Query) 1. Does user want us to inspect things and make recommendations? 1. If "yes" newrelic-cli runs ProcessDetection 1. [newrelic-cli queries recipe service for recommendations passing along the ProcessDetection info](#Recommendations-Query) ## Queries ### Infra Agent Query ```graphql= query { docs { recipeSearch({ name: "Infrastructure Agent Installer", # An implementation of the InstallTarget interface installTarget: { type: "VM" OS: "linux" Platform: "ubuntu" PlatformFamily: "debian" PlatformVersion: "17.10" KernelVersion: "1.0.0" } }) } } ``` ### Recommendations Query ```graphql= query { docs { recommendations( installTarget: { type: "VM" os: "linux" platform: "ubuntu" platformFamily: "debian" platformVersion: "17.10" kernelVersion: "1.0.0" }, # Change details to an interface and have an implementation of "process" # Stay up to date with Chris's progress details: [ { name: "foo" }, { name: "bar" } ] ) } } ``` ### Overall Schema ```graphql= # For finding the correct infrastructure agent recipe query { recipeSearch(criteria: RecipeSearchCriteria): RecipeSearchResults } type RecipeSearchCriteria { name: string installTarget: InstallTargetType } interface InstallTargetType { type: INSTALL_TYPE_ENUM ...OtherSharedInstallTargetData } type Host implements InstallTarget { os: OS_ENUM platform: string platformFamily: string platformVersion: string kernelVersion: string kernelArch: string } type RepositoryIntegration implements InstallTarget { language: String } type CloudIntegration implements InstallTarget { provider: CloudProvider service: CloudProviderService } # TO DO - Make this an interface and have AWS/Azure/Google implement it type CloudProvider { name: "AWS" region: "us-east-1" } type CloudProviderService { name: "LAMBDA" } enum PLATFORM { UBUNTU SUSE } enum INSTALL_TYPE_ENUM { HOST APPLICATION DOCKER KUBERNETES CLOUD SERVERLESS } enum OS_ENUM { WINDOWS DARWIN LINUX } ``` Questions: - Should we have one query space, or two? Do we need to keep both `recipeSearch` and `recommendations`? i.e. Would `recommendations()` return the Infra Agent for example? - Is APM/repository investigation part of MVP? Will this be toggled by flag or different command with the newrelic-cli or determined by the newrelic-cli?