• INSERT INTO при тестировании через sqlmock?

    @SSSSTTTTAAAASSSS Автор вопроса
    kvaks

    Спасибо за подсказку.
    У меня получилось решение чу-чуть другим. Я просто замокал сам ID

    Вот так вот у меня заработало:
    mock.ExpectExec(`INSERT INTO users (userID, name, age) VALUES ($1, $2, $3)`).
    		WithArgs(sqlmock.AnyArg(), "name1", 10).
    		WillReturnResult(sqlmock.NewResult(1, 1))
  • INSERT INTO при тестировании через sqlmock?

    @SSSSTTTTAAAASSSS Автор вопроса
    ChairfaceChippendale

    Оно то написано, но получается у меня ID генерится постоянно новый, и как новый мне передать я че-то не догоняю)))
  • INSERT INTO при тестировании через sqlmock?

    @SSSSTTTTAAAASSSS Автор вопроса
    ChairfaceChippendale,

    верно, туплю я, извини

    ошибка следующая:
    "call to ExecQuery 'INSERT INTO users (userID, name, age) VALUES ($1, $2, $3)' with args [{Name: Ordinal:1 Value:eb52f5b9-d555-487c-b6a3-9456ee346734} {Name: Ordinal:2 Value:name1} {Name: Ordinal:3 Value:10}], was not expected, next expectation is: ExpectedPrepare => expecting Prepare statement which:
            	            	  - matches sql: 'INSERT INTO users \(userID, name, age\) VALUES \(\?, \?, \?\)'"

    Я так понимаю, у меня генериться новый ID и из-за этого получается беда...
    Надо думать как это обойти походу...
    Спасибо большое за подсказзку
  • INSERT INTO при тестировании через sqlmock?

    @SSSSTTTTAAAASSSS Автор вопроса
    ChairfaceChippendale

    Не знаю даже как её достать...
    Но все равно спасибо за уделенное время =)
  • RabbitMQ: вопрос по consumer-у?

    @SSSSTTTTAAAASSSS Автор вопроса
    Очередь создает паблишер. Консьюмер просто публикует в лог информацию и все.
    "Может ли такое случиться, что если очередь и биндинг создаёт консьюмер, то в момент их создания обменника ещё не существует и происходит ошибка, которая игнорируется?" - такое не может вроде как случится, т.к. консьюмер создаеться после обменника.
    В данный момент решил проблему тем, что пока не создасться очередь у меня постоянно перезапускается консьюмер и после создания первой очереди он её подхватывает и ждет уже остальные. Наверное неправильно, но пока работает так.
    Спасибо за ответ, Сергей
  • Kubernetes: не получается добавить custom service-monitor?

    @SSSSTTTTAAAASSSS Автор вопроса
    Перепробовал уже все.
    Уже поназывал везде одинаково, где только можно было и все равно в таргетах не видит
    apiVersion: v1
    kind: Service
    metadata:
      name: http-monitor-svc
      labels:
        app: http-http
        release: stable
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/scheme: http
        prometheus.io/path: /posts/metrics
        prometheus.io/port: "8085"
      namespace: default
    spec:
      ports:
        - name: http-http
          port: 8085
          protocol: TCP
      selector:
        app: http-http
        release: stable


    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      name: http-monitor
      labels:
        app: http-http
        release: stable
      namespace: default
    spec:
      jobLabel: myCounter
      selector:
        matchLabels:
          app: http-http
          release: stable
      namespaceSelector:
        matchNames:
          - default
      endpoints:
        - port: http-http


    Понимаю что где-то натупил с name-ми, но уже запутался в край и не могу ниче сообразить...
  • Kubernetes: не получается добавить custom service-monitor?

    @SSSSTTTTAAAASSSS Автор вопроса
    Доброе утро Иван Корюков @MadridianFox

    Спасибо за подсказку в каком направлении смотреть, но все равно не что-то не работает в моих манифестах.
    Вот yaml файл prometheus-operator service:
    apiVersion: v1
    kind: Service
    metadata:
      creationTimestamp: "2021-10-18T10:24:47Z"
      labels:
        operated-prometheus: "true"
      name: prometheus-operated
      namespace: default
      ownerReferences:
      - apiVersion: monitoring.coreos.com/v1
        kind: Prometheus
        name: stable-kube-prometheus-sta-prometheus
        uid: 207dad67-f0c1-4f3e-aaa2-02a2dc00c5b5
      resourceVersion: "73545"
      uid: cfdd1fcb-ed93-425b-857f-3179ed60c79e
    spec:
      clusterIP: None
      clusterIPs:
      - None
      internalTrafficPolicy: Cluster
      ipFamilies:
      - IPv4
      ipFamilyPolicy: SingleStack
      ports:
      - name: web
        port: 9090
        protocol: TCP
        targetPort: web
      selector:
        app.kubernetes.io/name: prometheus
      sessionAffinity: None
      type: ClusterIP
    status:
      loadBalancer: {}

    вот манифест prometheus servicemonitor
    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      annotations:
        meta.helm.sh/release-name: stable
        meta.helm.sh/release-namespace: default
      creationTimestamp: "2021-10-18T10:24:23Z"
      generation: 1
      labels:
        app: kube-prometheus-stack-operator
        app.kubernetes.io/instance: stable
        app.kubernetes.io/managed-by: Helm
        app.kubernetes.io/part-of: kube-prometheus-stack
        app.kubernetes.io/version: 19.1.0
        chart: kube-prometheus-stack-19.1.0
        heritage: Helm
        release: stable
      name: stable-kube-prometheus-sta-operator
      namespace: default
      resourceVersion: "73424"
      uid: 3a7c543b-6023-4c06-899b-94c07edc132a
    spec:
      endpoints:
      - honorLabels: true
        port: https
        scheme: https
        tlsConfig:
          ca:
            secret:
              key: ca
              name: stable-kube-prometheus-sta-admission
              optional: false
          serverName: stable-kube-prometheus-sta-operator
      namespaceSelector:
        matchNames:
        - default
      selector:
        matchLabels:
          app: kube-prometheus-stack-operator
          release: stable


    а вот соответственно мои манифесты сервиса и сервисмонитор
    apiVersion: v1
    kind: Service
    metadata:
      name: http-monitor-svc
      labels:
        app: http-monitor-svc
        kube-prometheus-stack-operator: http-monitor-svc
        app.kubernetes.io/instance: stable
        app.kubernetes.io/managed-by: Helm
        app.kubernetes.io/part-of: kube-prometheus-stack
        app.kubernetes.io/version: 19.1.0
        release: stable
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/path: /posts/metrics
        prometheus.io/port: "8085"
      namespace: default
    spec:
      ports:
        - name: http-http #ссылается на deployment моего сервиса, который собирает метрики по пути :8085/posts/metric
          port: 8090
          targetPort: 8085
          protocol: TCP
      selector:
        app: http-http
        release: stable


    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      name: http-monitor
      labels:
        app: http-monitor-svc
        app.kubernetes.io/instance: stable
        app.kubernetes.io/managed-by: Helm
        app.kubernetes.io/part-of: kube-prometheus-stack
        app.kubernetes.io/version: 19.1.0
        release: stable
      namespace: default
    spec:
      jobLabel: myCounter
      selector:
        matchLabels:
          app: http-monitor-svc
          release: stable
      namespaceSelector:
        matchNames:
          - default
      endpoints:
        - port: http-monitor-svc
          interval: 10s
          path: /posts/metrics


    На всякий случай манифест deployment-а сервиса, который передает метрики
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: http-http-deployment
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/path: /posts/metrics
        prometheus.io/port: "8085"
      labels:
        app: http-http
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: http-http
      template:
        metadata:
          annotations:
            prometheus.io/scrape: "true"
            prometheus.io/path: /posts/metrics
            prometheus.io/port: "8085"
          labels:
            app: http-http
            release: stable
        spec:
          containers:
            - name: http-http
              image: stasbigunenko/http_http
              env:
                - name: PORT_HTTP
                  value: ":8085"
                - name: GRPC
                  value: "grpc-service:9000"
              ports:
                - containerPort: 8085

    В нем не указывал namespace..
    Заранее спасибо

    П.С.: в интерфейсе прометеуса в service discovery он у меня его видит, но targets 0. Не пойму как мне ему таргет передать, или опять ж где-то с namespaces-ами натупил...
  • Prometheus.yml файл не могу прописать правильно?

    @SSSSTTTTAAAASSSS Автор вопроса
    Александр Карабанов
    спасибо за совет.
    После перезагрузки компьютера все заработало, даже до логов не дошел.
    Не знаю с чем было связано.
    Спасибо Всем и хорошего дня!
  • Kubernetes: не могу связать 2 pod-a вместе?

    @SSSSTTTTAAAASSSS Автор вопроса
    Дмитрий Шицков,
    спасибо огромное за объяснение.
    Хорошего дня Вам.
  • Kubernetes: не могу связать 2 pod-a вместе?

    @SSSSTTTTAAAASSSS Автор вопроса
    Дмитрий Шицков Дмитрий Шицков
    Дмитрий, спасибо огромное за подсказку - все заработало.
    Если не затруднит, подскажите еще такой вопрос:
    В данный момент эти 2 сервиса работают со хранением данных inmemory, но хочу подключить как альтернативный вариант работы gRPC сервера через redis.
    У меня тут 2 варианта, и не знаю какой правильный:
    1-й:
    делаю новый deployment файл и сервис под redis, и изменяю deployment файла gRPC на следующие:
    redis deployment и service
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: redis-deployment
      labels:
        app: redis
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: redis
      template:
        metadata:
          labels:
            app: redis
        spec:
          containers:
            - name: redis
              image: redis
              env:
                - name: REDIS_ADDR
                  value: ":6379"
              ports:
                - containerPort: 6379


    apiVersion: v1
    kind: Service
    metadata:
      name: redis-service
    spec:
      selector:
        app: redis
      ports:
        - protocol: TCP
          port: 6379


    http-grpc deployment:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: http-grpc-deployment
      labels:
        app: http-grpc
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: http-grpc
      template:
        metadata:
          labels:
            app: http-grpc
        spec:
          containers:
            - name: http-grpc
              image: stasbigunenko/http_grpc
              env:
                - name: TCP_PORT
                  value: ":9000"
                - name: REDIS_ADDR
                  value: "redis-service:6379"
              ports:
                - containerPort: 9000


    Или 2-й вариант, добавлять сразу в deployment grpc в spec второй контейнер с redisom и не делать ему отдельный deployment и сервис?

    Заранее спасибо.

    П.С.: 1-й вариант работает, но вопрос как правильно такое организовывать остается.
  • Kubernetes: не могу связать 2 pod-a вместе?

    @SSSSTTTTAAAASSSS Автор вопроса
    Дмитрий Шицков,
    Не совсем пойму, какие именно конфиги надо, но если запускать через Docker-compose файл, то он у меня следущий:
    version: "3.1"
    
    services:
      http:
        container_name: "http_pr"
        build:
          context: "./"
          dockerfile: "./docker/http.Dockerfile"
        ports:
          - "8085:8085"
    #    links:
    #      - "grpc:grpc"
        environment:
          PORT_HTTP: ":8085"
          GRPC: "grpc:9000"
    
      grpc:
        container_name: "grpc"
        build:
          context: "./"
          dockerfile: "./docker/grpc.Dockerfile"
        ports:
          - "9000:9000"
        environment:
          TCP_PORT: ":9000"


    и все через докер спокойно работает. Суть какая, что запрос идет по адресу localhost:8085 http, а хроанилищем выступает gRPC, который обрабатывает запрос и выдает данные, или создает новые.
    Можно запускать отдельно каждый сервер без докера, и они тоже видят друг друга.
  • Не могу подключить gRPC к ElasticSearch через docker-compose?

    @SSSSTTTTAAAASSSS Автор вопроса
    winshiftq
    так тоже не работает
    grpc             | {[http://elasticsearch:9200]      map[] [] [] false false 0 false false 0s false false false false <nil> <nil> <nil> <nil> <nil>}
    grpc             | 2021/10/06 07:54:24 Error getting response: dial tcp 172.19.0.3:9200: connect: connection refused

    =(

    а в самом докере, когда заходишь на elastic в логах пишет 0.0.0.0:9200
  • Не могу подключить gRPC к ElasticSearch через docker-compose?

    @SSSSTTTTAAAASSSS Автор вопроса
    winshiftq
    Спасибо за подсказку, но к сожалению, оно тоже не работает, хотя я думал, что надо писать название самого контейнера "container_name: "elastic"", но это я тоже пробовал и ничего не помогает.
    Вот то что выдает терминал:
    grpc             | {[http://localhost:9200]      map[] [] [] false false 0 false false 0s false false false false <nil> <nil> <nil> <nil> <nil>}
    grpc             | 2021/10/06 05:33:55 Error getting response: dial tcp 127.0.0.1:9200: connect: connection refused

    Первая строка это тот конфиг, который отправляю при подключении ElasticSearch. Ничего не прописываю кроме адреса.
  • GRPC context.WithValue?

    @SSSSTTTTAAAASSSS Автор вопроса
    Папа Стифлера
    Спасибо за ссылку, но
    это я видел, просто уточняю, простым контекстом между клиентом и сервером я не передам данные? только через metada пакет?
  • Test in golang: simple function?

    @SSSSTTTTAAAASSSS Автор вопроса
    Евгений Мамонов,
    та на него можно не смотреть, я просто уже не знал как связать и нашел про mock. Так что можно без mock-а.
  • Gorilla Mux: не берет значение в vars := mux.Vars(r) Golang?

    @SSSSTTTTAAAASSSS Автор вопроса
    Евгений Мамонов,

    Евгений, все работает. Спасибо. Но я не пойму, почему оно тогда со "/" не работало?
    Соответственно остальные я так понимаю проблема аналогичная? И почему через mux.Vars не получилось вытянуть, если есть море примеров, как учебных, так и не учебных в интернете.
  • Gorilla Mux: не берет значение в vars := mux.Vars(r) Golang?

    @SSSSTTTTAAAASSSS Автор вопроса
    Евгений Мамонов,
    Евгений, так тоже не получается. Выдает "404", как и ранее.
  • Gorilla Mux: не берет значение в vars := mux.Vars(r) Golang?

    @SSSSTTTTAAAASSSS Автор вопроса
    WinPooh32,
    так тоже не получается, выдает целый слайс строк, а мне надо именно сам Id который запрашивается.
  • Gorilla Mux: не берет значение в vars := mux.Vars(r) Golang?

    @SSSSTTTTAAAASSSS Автор вопроса
    WinPooh32,

    localhost:8080/post/?Id=1 - вот такой URL
    менял на "id" ничего не поменялось 404 Page not found
    Если отправить запрос по localhost:8080/post/1 - где "1" просто руками забиваю, то ответ находит и функция отрабатывает, но это не то что надо...
  • Работа с goroutines?

    @SSSSTTTTAAAASSSS Автор вопроса
    Евгений Мамонов,
    Евгений, спасибо огромное за пояснение и примеры кодов.
    Ошибку понял.