Giter Club home page Giter Club logo

typerighter's Introduction

Typerighter

image

Typerighter is the server-side part of a service to check a document against a set of user-defined rules. It's designed to work like a spelling or grammar checker. It contains two services, the checker and the rule manager – see architecture for more information.

We use it at the Guardian to check content against our style guide. Max Walker, the subeditor who inspired the creation of Typerighter, has written an introduction here.

To understand our goals for the tool, see the vision document.

For setup, see the docs directory.

For an example of a Typerighter client (the part that presents the spellcheck-style interface to the user), see prosemirror-typerighter.

How it works: an overview

The Typerighter Rule Manager produces a JSON artefact (stored in S3) which is ingested by the Checker service. This artefact represents all the rules in our system, currently including user-defined regex rules, user-defined Language Tool pattern rules (defined as XML) and Language Tool core rules (pre-defined rules from Language Tool). Historically, rules were derived from a Google Sheet, rather than the Rule Manager.

Each rule in the service corresponds to a Matcher that receives the document and passes back a list of RuleMatch. We have the following Matcher implementations:

  • RegexMatcher uses regular expressions
  • LanguageToolMatcher is powered by the LanguageTool project, and uses a combination of native LanguageTool rules and user-defined XML rules as its corpus

Matches contain the range that match applies to, a description of why the match has occurred, and any relevant suggestions – see the RuleMatch interface for the full description.

Architecture

Roles

  • Rule owner: a person responsible for maintaining the rules that Typerighter consumes.
  • Rule user: a person checking their copy with the checker service.

The system consists of two Scala services:

  • The rule-manager service, which is responsible for the lifecycle of Typerighter's corpus of rules, and publishes them as an artefact
  • The checker service, which consumes that artefact and responds to requests to check copy against the corpus of rules with matches.

They're arranged like so:

flowchart LR
  checker[Checker service]
  manager[Manager service]
  sheet[Google Sheet]
  client[Typerighter client]
  s3[(typerighter-rules.json)]
  db[(Postgres DB)]
  owner{{Rule owner role}}
  user{{Rule user role}}

  sheet--"Get rules"-->manager
  manager--"Write rules"-->db
  db--"Read rules"--> manager
  manager--"Write rule artefact"-->s3
  checker--"Read rule artefact"-->s3
  client--"Request matches"-->checker

  owner-."Force manager to re-fetch sheet".->manager
  user-."Request document check".->client
  owner-."Edit rules".->sheet

The checker service

Typerighter's built to manage document checks of every kind, include checks that we haven't yet thought of. To that end, a MatcherPool is instantiated for each running checker service, which is responsible for managing incoming checks, including parallelism, backpressure, and ensuring that our checks are given to the appropriate matchers.

A MatcherPool accepts any matcher instance that satisfies the Matcher trait. Two core Matcher implementations include RegexMatcher, that checks copy with regular expressions, and LanguageToolMatcher, that checks copy with an instance of a JLanguageTool. The MatcherPool is excited to accommodate new matchers in the future! Here's a diagram to illustrate:

flowchart TD
   CH(["Check requests"])
   MP-."matches[]".->CH
   MP[MatcherPool]--has many--->MS
   CH-.document.->MP
   subgraph MS[Matchers]
    R[RegexMatcher]
    L[LanguageToolMatcher]
    F[...FancyHypotheticalAIMatcher]
   end

Implementation

Both the Checker and Rule Manager services are built in Scala with the Play framework. Data in the Rule Manager is stored in a Postgres database, queried via ScalikeJDBC.

Google credentials are fetched from SSM using AWS Credentials or Instance Role.

It's worth noting that, at the moment, there are a fair few assumptions built into this repository that are Guardian-specific:

We'd be delighted to participate in discussions, or consider PRs, that aimed to make Typerighter easier to use in a less institionally specific context.

Integration

The prosemirror-typerighter plugin provides an integration for the Prosemirror rich text editor.

If you'd like to provide your own integration, this service will function as a standalone REST platform, but you'll need to use pan-domain-authentication to provide a valid auth cookie with your requests.

Upgrading LanguageTool

LanguageTool has core rules that we use, and as we upgrade LT, these could change underneath us.

There's a script to see if rules have changed as a result of an upgrade in ./script/js/compare-rule-xml.js.

Formatting

Prettier formatting

Prettier is installed in the client app using the Guardian's recommended config. To format files you can run npm run format:write. A formatting check will run as part of CI.

To configure the IntelliJ Prettier plugin to format on save see the guide here. To configure the VS Code Prettier plugin see here.

Scala formatting

Typerighter uses Scalafmt to ensure consistent linting across all Scala files.

To lint all files you can run sbt scalafmtAll To confirm all files are linted correctly, you can run sbt scalafmtCheckAll

You can configure your IDE to format scala files on save according to the linting rules defined in .scalafmt.conf

For intellij there is a guide to set up automated linting on save here and here. For visual studio code with metals see here

Automatic formatting

The project contains a pre-commit hook which will automatically run the Scala formatter on all staged files. To enable this, run ./script/setup from the root of the project.

Developer how-tos

Connecting to the rule-manager database in CODE or PROD

Sometimes it's useful to connect to the databases running in AWS to inspect the data locally.

We can use ssm-scala to create an SSH tunnel that exposes the remote database on a local port. For example, to connect to the CODE database, we can run:

ssm ssh -x -t typerighter-rule-manager,CODE -p composer --rds-tunnel 5000:rule-manager-db,CODE

You should then be able to connect the database on localhost:5000. You'll need to use the username and password specified in AWS parameter store at /${STAGE}/flexible/typerighter-rule-manager/db.default.username and db.default.password.

Don't forget to kill the connection once you're done! Here's a handy one-liner: kill $(lsof -ti {PORT_NUMBER})

typerighter's People

Contributors

akash1810 avatar andrew-nowak avatar aracho1 avatar aug24 avatar davidfurey avatar dependabot[bot] avatar fweddi avatar georges-gnm avatar jennygrahamjones avatar jfsoul avatar jonathonherbert avatar parisatork avatar phillipbarron avatar rebecca-thompson avatar rhystmills avatar rtyley avatar samanthagottlieb avatar shession avatar sihil avatar simonbyford avatar tjsilver avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

typerighter's Issues

Missing Router file

Hi guys I am the developer trying to implement this solution for Croud. I was wondering whether the fact that the Router file is missing was intentional (which makes the compiler throw some build errors) and also what would be the best way to implement this without using AWS - maybe a simpler Play implementation or something I can deploy on a server simply using our views?

Thanks in advance!

Update other build configuration

The master branch of this repository has been migrated to main using the master-to-main tool.

Please check any build related configuration and update as required:

  • TeamCity
  • Change snyk github integration(s) - it uses the default branch, but you will need to delete and reimport the project+file as this is the only way to refresh the default branch at present.
  • Any other externally configured analysis tooling your team is using e.g. travis CI

It's probably a good idea to merge test PR to main once this is complete, to make sure that everything is working as expected. 🙂

Errors in the start script

Error 1

(cd $APP_FOLDER/rule-manager/rule-manager-client && npm i && npm run build)
"Must move up a directory to execute npm" should be:
(cd ../$APP_FOLDER/rule-manager/rule-manager-client && npm i && npm run build)

Error 2

Line 39 sbt "checker / run" causes this error
[error] Expected ID character
[error] Not a valid command: checker
[error] Expected project ID
[error] Expected configuration
[error] Expected ':'
[error] Expected key
[error] Not a valid key: checker (similar: checksums)
[error] checker / run
[error] ^

After changing sbt "checker / run"
To
sbt "run"
I'm getting this error

[info] set current project to script (in build file:/Users/test/typerighter/script/)
[error] java.lang.RuntimeException: No main class detected.
[error] at scala.sys.package$.error(package.scala:30)
[error] stack trace is suppressed; run last Compile / bgRun for the full output
[error] (Compile / bgRun) No main class detected.
[error] Total time: 0 s, completed Aug 17, 2021, 4:01:52 PM
[+] Running 2/2
⠿ Container typerighter-rule-manager Removed 0.2s
⠿ Network typerighter_default Removed 0.3s

Error 3

Also the project assumes webpack and sbt are installed on the host machine, the start script should check if those packages have been installed, if not then install or document to install the packages.

Edit rule button breaks after selecting a rule

To reproduce:

  1. Make sure you have the right permissions to edit rules
  2. Select any rule using the checkbox on the left
  3. Click any edit button on the right. They don't work as expected and show an incorrect tooltip about permissions

Not sure what the expected behaviour should be here. Having both checkboxes and edit buttons is a little confusing?

select-bug

Better CORS filter

In #1 the CORS filter is overly generous. This needs to be constrained more tightly.

Rule Manager should fail if client-side app errors

Using npm 9 created a build error in the client side app, but it wasn't clear from the output of /script/start-manager script that this had happened. Perhaps it would be better if the whole script stops when either the client-side app or the sbt process fails.

Use header convention for identifying request

At the moment, we store the requestId for typerighter match requests in the body of the JSON we send.

The method we use elsewhere is an X-GU-LoggingContext header. See https://github.com/guardian/flexible-content/blob/master/flexible-content-common/src/main/scala/com/gu/flexiblecontent/util/LoggingContext.scala and https://github.com/guardian/flexible-content/blob/master/composer/src/js/app.js#L393-L419

It'd be good to use this convention for ease of debugging across projects.

We could also include contentId there, and sessionId if we can access it.

Error after running on macosx: ./script/start

SdkClientException: Profile file contained no credentials for profile 'composer': ProfileFile(profiles=[])

Screen Shot 2021-07-08 at 11 39 44 PM

Also after running docker compose up, received this error: FATAL: role "postgres" does not exist

Fail to run start script

Hi guys. I was trying on spinning up Typerighter on my linux machine by just running the start script but I am seeing the below error. I have set up an AWS profile with name "composer".

Is there any pre-requisite or environment setting that I am missing?

Missing: merge of system properties,hardcoded value,application.conf @ file:/Users/aeelmgre/Desktop/typerighter/apps/checker/target/scala-2.12/classes/application.conf: 1,play/reference-overrides.conf @ jar:file:/Users/aeelmgre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play_2.12/2.8.0/play_2.12-2.8.0.jar!/play/reference-overrides.conf: 1,play/reference-overrides.conf @ jar:file:/Users/aeelmgre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play-akka-http-server_2.12/2.8.0/play-akka-http-server_2.12-2.8.0.jar!/play/reference-overrides.conf: 1,reference.conf @ jar:file:/Users/aeelmgre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play_2.12/2.8.0/play_2.12-2.8.0.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/aeelmgre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play-ahc-ws_2.12/2.8.0/play-ahc-ws_2.12-2.8.0.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/aeelmgre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play-ws-standalone_2.12/2.1.2/play-ws-standalone_2.12-2.1.2.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/aeelmgre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/akka/akka-serialization-jackson_2.12/2.6.1/akka-serialization-jackson_2.12-2.6.1.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/aeelmgre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/filters-helpers_2.12/2.8.0/filters-helpers_2.12-2.8.0.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/aeelmgre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/akka/akka-http-core_2.12/10.1.11/akka-http-core_2.12-10.1.11.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/aeelmgre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play-server_2.12/2.8.0/play-server_2.12-2.8.0.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/aeelmgre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play-ahc-ws-standalone_2.12/2.1.2/play-ahc-ws-standalone_2.12-2.1.2.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/aeelmgre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/akka/akka-actor-typed_2.12/2.6.1/akka-actor-typed_2.12-2.6.1.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/aeelmgre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play-akka-http-server_2.12/2.8.0/play-akka-http-server_2.12-2.8.0.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/aeelmgre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/akka/akka-stream_2.12/2.6.1/akka-stream_2.12-2.6.1.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/aeelmgre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/akka/akka-actor_2.12/2.6.1/akka-actor_2.12-2.6.1.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/aeelmgre/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/ssl-config-core_2.12/0.4.1/ssl-config-core_2.12-0.4.1.jar!/reference.conf: 1: No configuration setting found for key 'capi'

Failed to get instance id from ec2 metadata service: Unable to contact EC2 metadata service.

Didn't see in the instructions where I should include the instance id of the ec2 metadata service.

(base) ITLSTS-MN-4226H:typerighter rditlsts$ ./script/start
Docker Compose is now in the Docker CLI, try docker compose up

Creating network "typerighter_default" with the default driver
Creating typerighter-rule-manager ... done

up to date, audited 497 packages in 2s

3 vulnerabilities (2 moderate, 1 high)

To address all issues, run:
npm audit fix

Run npm audit for details.

[email protected] build
webpack --config ./conf/webpack.prod.config.js

[webpack-cli] Compilation finished
asset rule-manager-app.js 185 KiB [emitted] [minimized] (name: app) 2 related assets
orphan modules 38.6 KiB [orphan] 11 modules
runtime modules 668 bytes 3 modules
modules by path ./node_modules/ 541 KiB
modules by path ./node_modules/@guardian/ 357 KiB 9 modules
modules by path ./node_modules/@emotion/ 52.5 KiB 3 modules
modules by path ./node_modules/react/ 6.7 KiB 2 modules
modules by path ./node_modules/react-dom/ 117 KiB 2 modules
modules by path ./node_modules/scheduler/ 5.12 KiB
./node_modules/scheduler/index.js 198 bytes [built] [code generated]
./node_modules/scheduler/cjs/scheduler.production.min.js 4.92 KiB [built] [code generated]
./node_modules/object-assign/index.js 2.06 KiB [built] [code generated]
./node_modules/@babel/runtime/helpers/inheritsLoose.js 223 bytes [built] [code generated]
modules by path ./src/ 4.13 KiB
./src/index.tsx 1.34 KiB [built] [code generated]
./src/components/App.tsx 2.79 KiB [built] [code generated]
webpack 5.11.1 compiled successfully in 6748 ms
[info] Loading project definition from /Users/rditlsts/ERDC_PROJECTS/typerighter/project/project
[info] Loading settings for project typerighter-build from plugins.sbt ...
[info] Loading project definition from /Users/rditlsts/ERDC_PROJECTS/typerighter/project
[info] Loading settings for project root from build.sbt ...
[info] Set current project to typerighter (in build file:/Users/rditlsts/ERDC_PROJECTS/typerighter/)
[info] Compiling 1 Scala source to /Users/rditlsts/ERDC_PROJECTS/typerighter/apps/common-lib/target/scala-2.12/classes ...

--- (Running the application, auto-reloading is enabled) ---

[info] p.c.s.AkkaHttpServer - Listening for HTTP on /[0:0:0:0:0:0:0:0]:9100

(Server started, use Enter to stop and go back to the console...)

[info] Compiling 1 Scala source to /Users/rditlsts/ERDC_PROJECTS/typerighter/apps/common-lib/target/scala-2.12/classes ...
[info] Compiling 1 Scala source to /Users/rditlsts/ERDC_PROJECTS/typerighter/apps/checker/target/scala-2.12/classes ...
[warn] c.g.AppIdentity$ - Failed to get instance id from ec2 metadata service: Unable to contact EC2 metadata service.
software.amazon.awssdk.core.exception.SdkClientException: Unable to contact EC2 metadata service.
at software.amazon.awssdk.core.exception.SdkClientException$BuilderImpl.build(SdkClientException.java:98)
at software.amazon.awssdk.regions.internal.util.EC2MetadataUtils.getItems(EC2MetadataUtils.java:400)
at software.amazon.awssdk.regions.internal.util.EC2MetadataUtils.getItems(EC2MetadataUtils.java:432)
at software.amazon.awssdk.regions.internal.util.EC2MetadataUtils.getItems(EC2MetadataUtils.java:432)
at software.amazon.awssdk.regions.internal.util.EC2MetadataUtils.getItems(EC2MetadataUtils.java:432)
at software.amazon.awssdk.regions.internal.util.EC2MetadataUtils.getData(EC2MetadataUtils.java:378)
at software.amazon.awssdk.regions.internal.util.EC2MetadataUtils.getData(EC2MetadataUtils.java:374)
at software.amazon.awssdk.regions.internal.util.EC2MetadataUtils.fetchData(EC2MetadataUtils.java:472)
at software.amazon.awssdk.regions.internal.util.EC2MetadataUtils.fetchData(EC2MetadataUtils.java:462)
at software.amazon.awssdk.regions.internal.util.EC2MetadataUtils.getInstanceId(EC2MetadataUtils.java:140)
[info] c.g.AppIdentity$ - Detected the following AppIdentity: DevIdentity(typerighter-checker)
[info] c.g.c.ConfigurationLoader$ - Fetching configuration for DevIdentity(typerighter-checker)
[error] c.g.AppIdentity$ - Failed to identify the regionName of the instance
software.amazon.awssdk.core.exception.SdkClientException: Unable to contact EC2 metadata service.
at software.amazon.awssdk.core.exception.SdkClientException$BuilderImpl.build(SdkClientException.java:98)
at software.amazon.awssdk.regions.internal.util.EC2MetadataUtils.getItems(EC2MetadataUtils.java:400)
at software.amazon.awssdk.regions.internal.util.EC2MetadataUtils.getItems(EC2MetadataUtils.java:432)
at software.amazon.awssdk.regions.internal.util.EC2MetadataUtils.getItems(EC2MetadataUtils.java:432)
at software.amazon.awssdk.regions.internal.util.EC2MetadataUtils.getItems(EC2MetadataUtils.java:432)
at software.amazon.awssdk.regions.internal.util.EC2MetadataUtils.getData(EC2MetadataUtils.java:378)
at software.amazon.awssdk.regions.internal.util.EC2MetadataUtils.getData(EC2MetadataUtils.java:374)
at software.amazon.awssdk.regions.internal.util.EC2MetadataUtils.getEC2InstanceRegion(EC2MetadataUtils.java:287)
at com.gu.AppIdentity$.$anonfun$region$2(AppIdentity.scala:107)
at scala.util.Try$.apply(Try.scala:213)
[info] c.g.c.SSMConfigurationLocation - Attempting to load configuration from SSM for path = /DEV/flexible/typerighter-checker and region = eu-west-1
[error] p.a.h.DefaultHttpErrorHandler -

! @7kd141nh7 - Internal server error, for (GET) [/] ->

play.api.UnexpectedException: Unexpected exception[Missing: merge of system properties,hardcoded value,application.conf @ file:/Users/rditlsts/ERDC_PROJECTS/typerighter/apps/checker/target/scala-2.12/classes/application.conf: 1,play/reference-overrides.conf @ jar:file:/Users/rditlsts/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play_2.12/2.8.0/play_2.12-2.8.0.jar!/play/reference-overrides.conf: 1,play/reference-overrides.conf @ jar:file:/Users/rditlsts/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play-akka-http-server_2.12/2.8.0/play-akka-http-server_2.12-2.8.0.jar!/play/reference-overrides.conf: 1,reference.conf @ jar:file:/Users/rditlsts/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play_2.12/2.8.0/play_2.12-2.8.0.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/rditlsts/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play-ahc-ws_2.12/2.8.0/play-ahc-ws_2.12-2.8.0.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/rditlsts/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play-ws-standalone_2.12/2.1.2/play-ws-standalone_2.12-2.1.2.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/rditlsts/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/akka/akka-serialization-jackson_2.12/2.6.1/akka-serialization-jackson_2.12-2.6.1.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/rditlsts/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/filters-helpers_2.12/2.8.0/filters-helpers_2.12-2.8.0.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/rditlsts/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/akka/akka-http-core_2.12/10.1.11/akka-http-core_2.12-10.1.11.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/rditlsts/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play-server_2.12/2.8.0/play-server_2.12-2.8.0.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/rditlsts/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play-ahc-ws-standalone_2.12/2.1.2/play-ahc-ws-standalone_2.12-2.1.2.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/rditlsts/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/akka/akka-actor-typed_2.12/2.6.1/akka-actor-typed_2.12-2.6.1.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/rditlsts/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play-akka-http-server_2.12/2.8.0/play-akka-http-server_2.12-2.8.0.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/rditlsts/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/akka/akka-stream_2.12/2.6.1/akka-stream_2.12-2.6.1.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/rditlsts/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/akka/akka-actor_2.12/2.6.1/akka-actor_2.12-2.6.1.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/rditlsts/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/ssl-config-core_2.12/0.4.1/ssl-config-core_2.12-0.4.1.jar!/reference.conf: 1: No configuration setting found for key 'capi']
at play.core.server.DevServerStart$$anon$1.reload(DevServerStart.scala:210)
at play.core.server.DevServerStart$$anon$1.get(DevServerStart.scala:141)
at play.core.server.AkkaHttpServer.handleRequest(AkkaHttpServer.scala:296)
at play.core.server.AkkaHttpServer.$anonfun$createServerBinding$1(AkkaHttpServer.scala:186)
at akka.stream.impl.fusing.MapAsync$$anon$30.onPush(Ops.scala:1261)
at akka.stream.impl.fusing.GraphInterpreter.processPush(GraphInterpreter.scala:541)
at akka.stream.impl.fusing.GraphInterpreter.execute(GraphInterpreter.scala:423)
at akka.stream.impl.fusing.GraphInterpreterShell.runBatch(ActorGraphInterpreter.scala:624)
at akka.stream.impl.fusing.GraphInterpreterShell$AsyncInput.execute(ActorGraphInterpreter.scala:501)
at akka.stream.impl.fusing.GraphInterpreterShell.processEvent(ActorGraphInterpreter.scala:599)
Caused by: com.typesafe.config.ConfigException$Missing: merge of system properties,hardcoded value,application.conf @ file:/Users/rditlsts/ERDC_PROJECTS/typerighter/apps/checker/target/scala-2.12/classes/application.conf: 1,play/reference-overrides.conf @ jar:file:/Users/rditlsts/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play_2.12/2.8.0/play_2.12-2.8.0.jar!/play/reference-overrides.conf: 1,play/reference-overrides.conf @ jar:file:/Users/rditlsts/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play-akka-http-server_2.12/2.8.0/play-akka-http-server_2.12-2.8.0.jar!/play/reference-overrides.conf: 1,reference.conf @ jar:file:/Users/rditlsts/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play_2.12/2.8.0/play_2.12-2.8.0.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/rditlsts/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play-ahc-ws_2.12/2.8.0/play-ahc-ws_2.12-2.8.0.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/rditlsts/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play-ws-standalone_2.12/2.1.2/play-ws-standalone_2.12-2.1.2.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/rditlsts/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/akka/akka-serialization-jackson_2.12/2.6.1/akka-serialization-jackson_2.12-2.6.1.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/rditlsts/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/filters-helpers_2.12/2.8.0/filters-helpers_2.12-2.8.0.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/rditlsts/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/akka/akka-http-core_2.12/10.1.11/akka-http-core_2.12-10.1.11.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/rditlsts/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play-server_2.12/2.8.0/play-server_2.12-2.8.0.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/rditlsts/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play-ahc-ws-standalone_2.12/2.1.2/play-ahc-ws-standalone_2.12-2.1.2.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/rditlsts/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/akka/akka-actor-typed_2.12/2.6.1/akka-actor-typed_2.12-2.6.1.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/rditlsts/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/play/play-akka-http-server_2.12/2.8.0/play-akka-http-server_2.12-2.8.0.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/rditlsts/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/akka/akka-stream_2.12/2.6.1/akka-stream_2.12-2.6.1.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/rditlsts/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/akka/akka-actor_2.12/2.6.1/akka-actor_2.12-2.6.1.jar!/reference.conf: 1,reference.conf @ jar:file:/Users/rditlsts/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/typesafe/ssl-config-core_2.12/0.4.1/ssl-config-core_2.12-0.4.1.jar!/reference.conf: 1: No configuration setting found for key 'capi'
at com.typesafe.config.impl.SimpleConfig.findKeyOrNull(SimpleConfig.java:157)
at com.typesafe.config.impl.SimpleConfig.findKey(SimpleConfig.java:150)
at com.typesafe.config.impl.SimpleConfig.findOrNull(SimpleConfig.java:177)
at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:189)
at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:194)
at com.typesafe.config.impl.SimpleConfig.getString(SimpleConfig.java:251)
at play.api.ConfigLoader$.$anonfun$stringLoader$2(Configuration.scala:409)
at play.api.ConfigLoader$.play$api$ConfigLoader$$$anonfun$apply$1(Configuration.scala:407)
at play.api.ConfigLoader$$anonfun$apply$2.load(Configuration.scala:407)
at play.api.Configuration.get(Configuration.scala:205)

Please add a license

There is no explicit or easily locatable license for this project.

Please add license information to this project.

Thank you !

There's nothing in the instructions about connecting to EC2, also why is it trying to connect to eu-west-1 when I haven't specified the region?

[warn] c.g.AppIdentity$ - Failed to get instance id from ec2 metadata service: Unable to contact EC2 metadata service.
software.amazon.awssdk.core.exception.SdkClientException: Unable to contact EC2 metadata service.
at software.amazon.awssdk.core.exception.SdkClientException$BuilderImpl.build(SdkClientException.java:98)
at software.amazon.awssdk.regions.internal.util.EC2MetadataUtils.getItems(EC2MetadataUtils.java:400)
at software.amazon.awssdk.regions.internal.util.EC2MetadataUtils.getItems(EC2MetadataUtils.java:432)
at software.amazon.awssdk.regions.internal.util.EC2MetadataUtils.getItems(EC2MetadataUtils.java:432)
at software.amazon.awssdk.regions.internal.util.EC2MetadataUtils.getItems(EC2MetadataUtils.java:432)
at software.amazon.awssdk.regions.internal.util.EC2MetadataUtils.getData(EC2MetadataUtils.java:378)
at software.amazon.awssdk.regions.internal.util.EC2MetadataUtils.getData(EC2MetadataUtils.java:374)
at software.amazon.awssdk.regions.internal.util.EC2MetadataUtils.fetchData(EC2MetadataUtils.java:472)
at software.amazon.awssdk.regions.internal.util.EC2MetadataUtils.fetchData(EC2MetadataUtils.java:462)
at software.amazon.awssdk.regions.internal.util.EC2MetadataUtils.getInstanceId(EC2MetadataUtils.java:140)
[info] c.g.AppIdentity$ - Detected the following AppIdentity: DevIdentity(typerighter-checker)
[info] c.g.c.ConfigurationLoader$ - Fetching configuration for DevIdentity(typerighter-checker)
[error] c.g.AppIdentity$ - Failed to identify the regionName of the instance
software.amazon.awssdk.core.exception.SdkClientException: Unable to contact EC2 metadata service.
at software.amazon.awssdk.core.exception.SdkClientException$BuilderImpl.build(SdkClientException.java:98)
at software.amazon.awssdk.regions.internal.util.EC2MetadataUtils.getItems(EC2MetadataUtils.java:400)
at software.amazon.awssdk.regions.internal.util.EC2MetadataUtils.getItems(EC2MetadataUtils.java:432)
at software.amazon.awssdk.regions.internal.util.EC2MetadataUtils.getItems(EC2MetadataUtils.java:432)
at software.amazon.awssdk.regions.internal.util.EC2MetadataUtils.getItems(EC2MetadataUtils.java:432)
at software.amazon.awssdk.regions.internal.util.EC2MetadataUtils.getData(EC2MetadataUtils.java:378)
at software.amazon.awssdk.regions.internal.util.EC2MetadataUtils.getData(EC2MetadataUtils.java:374)
at software.amazon.awssdk.regions.internal.util.EC2MetadataUtils.getEC2InstanceRegion(EC2MetadataUtils.java:287)
at com.gu.AppIdentity$.$anonfun$region$2(AppIdentity.scala:107)
at scala.util.Try$.apply(Try.scala:213)
[info] c.g.c.SSMConfigurationLocation - Attempting to load configuration from SSM for path = /DEV/flexible/typerighter-checker and region = eu-west-1

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.