tutorials icon indicating copy to clipboard operation
tutorials copied to clipboard

Improve C++

Open antonputra opened this issue 10 months ago • 0 comments

Please improve the performance of the C++ application using the Dragon framework. For the second test, add a PostgreSQL database. In the second test, the application should parse the JSON request body, save it to the PostgreSQL database, and return the entire object back to the client, including the database-generated ID.

C++ app - https://github.com/antonputra/tutorials/tree/main/lessons/245/drogon-app

  1. Test curl -i http://localhost:8080/api/devices
HTTP/1.1 200 OK
Server: gnet
Date: Thu, 13 Feb 2025 01:21:35 GMT
Content-Length: 271
Content-Type: application/json

[{"id":0,"mac":"5F-33-CC-1F-43-82","firmware":"2.1.6"},{"id":1,"mac":"44-39-34-5E-9C-F2","firmware":"3.0.1"},{"id":2,"mac":"2B-6E-79-C7-22-1B","firmware":"1.8.9"},{"id":3,"mac":"06-0A-79-47-18-E1","firmware":"4.0.9"},{"id":4,"mac":"68-32-8F-00-B6-F4","firmware":"5.0.0"}]
  1. Test (Postgres)

curl -i http://localhost:8080/api/devices -d '{"mac": "81-6E-79-DA-5A-B2", "firmware": "4.0.2"}' -H "Content-Type: application/json"

HTTP/1.1 201 Created
Server: gnet
Date: Thu, 13 Feb 2025 01:23:00 GMT
Content-Length: 57
Content-Type: application/json

{"id":66009,"mac":"81-6E-79-DA-5A-B2","firmware":"4.0.2"}

DB Schema/migration*

  --
  -- Create application users.
  --
  CREATE USER cpp WITH PASSWORD 'devops123' SUPERUSER CREATEDB CREATEROLE LOGIN;
  CREATE USER rust WITH PASSWORD 'devops123' SUPERUSER CREATEDB CREATEROLE LOGIN;

  --
  -- Clean up idle connections.
  --
  WITH inactive_connections AS (SELECT pid, usename FROM pg_stat_activity WHERE usename = 'cpp') SELECT pg_terminate_backend(pid) FROM inactive_connections;
  WITH inactive_connections AS (SELECT pid, usename FROM pg_stat_activity WHERE usename = 'rust') SELECT pg_terminate_backend(pid) FROM inactive_connections;

  BEGIN;
  --
  -- Drop tables.
  --
  DROP TABLE IF EXISTS cpp_device;
  DROP TABLE IF EXISTS rust_device;

  --
  -- Create device tables.
  --
  CREATE TABLE "cpp_device" ("id" SERIAL PRIMARY KEY, "mac" varchar(17) NOT NULL, "firmware" varchar(10) NOT NULL);
  CREATE TABLE "rust_device" ("id" SERIAL PRIMARY KEY, "mac" varchar(17) NOT NULL, "firmware" varchar(10) NOT NULL);
  COMMIT;

  VACUUM full;

Compose for testing

services:
  postgres:
    image: postgres:17.2
    ports:
      - 5432:5432
    environment:
      POSTGRES_USER: myapp
      POSTGRES_DB: mydb
      POSTGRES_PASSWORD: devops123
    networks:
      - private

networks:
  private:

antonputra avatar Feb 13 '25 14:02 antonputra