profile
viewpoint
If you are wondering where the data of this site comes from, please visit https://api.github.com/users/ecamacho/events. GitMemory does not store any data, but only uses NGINX to cache data for a period of time. The idea behind GitMemory is simply to give users a better reading experience.

ecamacho/catchme 2

contact location project for the API Hackaton held in Mexico city 30 april 2011.

ecamacho/diputables-crawler 2

crawler de datos diputados.gob.mx

ecamacho/BubbleWrap 1

Cocoa wrappers and helpers for RubyMotion (Ruby for iOS) - Making Cocoa APIs more Ruby like, one API at a time. Fork away and send your pull requests.

ecamacho/codice 1

A CMS web project

ecamacho/curso_ios_platzi 1

Código del curso de iOS con Swift2 impartido en Platzi

ecamacho/dotfiles 1

configuration file for shell environment

ecamacho/ecamacho-oh-my-zsh-theme 1

Simple theme for oh-my-zsh with support for Git and Mercurial

ecamacho/FacebookPics 1

Demo de Facebook SDK para iOS

issue commentspotify/XCMetrics

Web interface

It would be great to have a list of html pages, that XCLogParser parser with html report creates with links to it.

I guess that's the next destination of current public release, without any additional analytics over a bunch of builds. Probably we need a fork now :)

bolismauro

comment created time in 12 hours

issue commentspotify/XCLogParser

Swift Type check times stopped reporting

Same problem here :(

ChristopherDrum

comment created time in 16 hours

issue closedspotify/XCMetrics

Question: Duration is which time unit?

Hey, I have a question regarding the duration double value for builds, which time unit is it.. microseconds or milliseconds?

Thank you

closed time in 6 days

AyaAkl25

issue commentspotify/XCMetrics

Question: Duration is which time unit?

Seems like it's megaseconds :) i.e. actual duration = duration * 1000000 You can simply check it calculating the difference between end_timestamp and start_timestamp columns

Thank you :)

AyaAkl25

comment created time in 6 days

issue closedspotify/XCMetrics

What tools were used to create the gif?

I found the xcmetrics working gif pretty useful to understand the tool. I was curious to learn how that gif was created? What tools were used to design/create it?

https://github.com/spotify/XCMetrics/blob/gh-pages/images/xcmetrics-open-source-xcode-tool.gif

closed time in 9 days

ChaiBapchya

issue commentspotify/XCMetrics

What tools were used to create the gif?

A interactive designer designed it for us, and I think some more complex program such as Adobe Animate was used.

ChaiBapchya

comment created time in 9 days

issue commentspotify/XCMetrics

Web interface

Is there any plans for releasing web interface? Even experimental UI is better than RAW data)

bolismauro

comment created time in 19 days

issue commentspotify/XCMetrics

[doc] Is there any documentation about the database schema, table?

Hey @tinder-kaijing did you create metrics on grafana?

tinder-kaijing

comment created time in 23 days

issue commentspotify/XCMetrics

Crash when parsing activity log file

It's clearly stating that the crash is caused by an optional with nil value

akkrat

comment created time in 25 days

PR opened spotify/XCLogParser

Skip invalid locations

they can be both in successful or failed results logs this fixes #131

+5 -3

0 comment

1 changed file

pr created time in 25 days

issue commentspotify/XCMetrics

Question: Duration is which time unit?

Seems like it's megaseconds :) i.e. actual duration = duration * 1000000 You can simply check it calculating the difference between end_timestamp and start_timestamp columns

AyaAkl25

comment created time in a month

issue openedspotify/XCLogParser

Swift Type check times stopped reporting

I was using 0.2.16 and just saw that I was out of date. Using 0.2.16 I was seeing Swift Type check times reported in the HTML report. I updated to 0.2.26 and re-ran the report and see Did you compile your project with the flags -Xfrontend -debug-time-expression-type-checking

Yes, I did compile with those flags. I ran a report with 0.2.16, it looked fine. Updated to 0.2.26 and ran the report on the exact same project and nothing. I double-checked, just in case something strange happened, and the flag is absolutely present.

The debug-time-function-bodies report is displaying properly.

created time in a month

issue openedspotify/XCMetrics

Question: Duration is which time unit?

Hey, I have a question regarding the duration double value for builds, which time unit is it.. microseconds or milliseconds?

Thank you

created time in a month

issue openedspotify/XCLogParser

Crash when parsing log file

I have a log that contains the next line

0.08ms	<redacted-folder>/src/pages/headers-list/cells-content/mail-bill/analytic/PaymentAnalyticHandlerInReadView.swift:45:-0#0#0#-7@118"file://<redacted-folder>/src/pages/headers-list/cells-content/mail-bill/analytic/PaymentAnalyticHandler.swift0000000000000000^8797"CompileSwift normal x86_64 <redacted-folder>/src/pages/headers-list/cells-content/mail-bill/analytic/PaymentAnalyticHandler.swift (in target '<redacted-appname>' from project '<redacted-app>')

This line causes the crash Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value at SwiftCompilerTimeOptionParser.swift:59. (PaymentAnalyticHandlerInReadView.swift:45 contains simple method with a single function call.)

Seems like we should remove force optionals unwrapping

created time in a month

issue openedspotify/XCMetrics

Crash when parsing activity log file

We use the latest docker image and Xcode 12.1.

The crash log:

[ NOTICE ] 22/03/2021 17:06:05 [ProcessMetricsJob] fetching log from file:///tmp/7277A4A2-7D1D-4FE5-BDA3-BCFCD68157DC/D6F72682-AEE4-466F-8DCE-FCA4A027B08F.xcactivitylog [job_id: 4DE44B28-C790-462D-A6C9-1AA8E556C4C7]
[ NOTICE ] 22/03/2021 17:06:05 [ProcessMetricsJob] log fetched to file:///tmp/7277A4A2-7D1D-4FE5-BDA3-BCFCD68157DC/D6F72682-AEE4-466F-8DCE-FCA4A027B08F.xcactivitylog [job_id: 4DE44B28-C790-462D-A6C9-1AA8E556C4C7]
0x7fd68045d97f
0x5598e503ee3f, Swift runtime failure: Unexpectedly found nil while unwrapping an Optional value at .build/checkouts/xclogparser/Sources/XCLogParser/parser/SwiftCompilerTimeOptionParser.swift:0
0x5598e503ee3f, function signature specialization <Arg[1] = Dead> of generic specialization <XCLogParser.SwiftCompilerTypeCheckOptionParser> of (extension in XCLogParser):XCLogParser.SwiftCompilerTimeOptionParser.parseNameAndLocation(from: Swift.String) -> Swift.Optional<(Swift.String, Swift.Int, Swift.Int)> at .build/checkouts/xclogparser/Sources/XCLogParser/parser/SwiftCompilerTimeOptionParser.swift:59
0x5598e503ee3f, generic specialization <XCLogParser.SwiftCompilerTypeCheckOptionParser> of (extension in XCLogParser):XCLogParser.SwiftCompilerTimeOptionParser.parseNameAndLocation(from: Swift.String) -> Swift.Optional<(Swift.String, Swift.Int, Swift.Int)> at /build/<compiler-generated>:0
0x5598e503ee3f, closure #1 (Swift.String) -> Swift.Optional<XCLogParser.SwiftTypeCheck> in XCLogParser.SwiftCompilerTypeCheckOptionParser.(parse in _EDF18D047378C5B6247F84B294158F58)(command: Swift.String, occurrences: Swift.Int) -> Swift.Optional<Swift.Array<XCLogParser.SwiftTypeCheck>> at /build/.build/checkouts/xclogparser/Sources/XCLogParser/parser/SwiftCompilerTypeCheckOptionParser.swift:61
0x5598e503ee3f, reabstraction thunk helper from @callee_guaranteed (@guaranteed Swift.String) -> (@owned Swift.Optional<XCLogParser.SwiftTypeCheck>, @error @owned Swift.Error) to @escaping @callee_guaranteed (@in_guaranteed Swift.String) -> (@out Swift.Optional<XCLogParser.SwiftTypeCheck>, @error @owned Swift.Error) at /build/<compiler-generated>:0
0x5598e503ee3f, generic specialization <Swift.Array<Swift.String>, XCLogParser.SwiftTypeCheck> of (extension in Swift):Swift.Sequence.compactMap<A>((A.Element) throws -> Swift.Optional<A1>) throws -> Swift.Array<A1> at /build/<compiler-generated>:0
0x5598e503ee3f, XCLogParser.SwiftCompilerTypeCheckOptionParser.(parse in _EDF18D047378C5B6247F84B294158F58)(command: Swift.String, occurrences: Swift.Int) -> Swift.Optional<Swift.Array<XCLogParser.SwiftTypeCheck>> at /build/.build/checkouts/xclogparser/Sources/XCLogParser/parser/SwiftCompilerTypeCheckOptionParser.swift:48
0x5598e503ee3f, closure #1 ((key: Swift.String, value: Swift.Int)) -> Swift.Optional<Swift.Array<XCLogParser.SwiftTypeCheck>> in XCLogParser.SwiftCompilerTypeCheckOptionParser.parse(from: Swift.Dictionary<Swift.String, Swift.Int>) -> Swift.Dictionary<Swift.String, Swift.Array<XCLogParser.SwiftTypeCheck>> at /build/.build/checkouts/xclogparser/Sources/XCLogParser/parser/SwiftCompilerTypeCheckOptionParser.swift:33
0x5598e503ee3f, reabstraction thunk helper from @callee_guaranteed (@guaranteed Swift.String, @unowned Swift.Int) -> (@owned Swift.Optional<Swift.Array<XCLogParser.SwiftTypeCheck>>, @error @owned Swift.Error) to @escaping @callee_guaranteed (@in_guaranteed (key: Swift.String, value: Swift.Int)) -> (@out Swift.Optional<Swift.Array<XCLogParser.SwiftTypeCheck>>, @error @owned Swift.Error) at /build/<compiler-generated>:0
0x5598e503ee3f, generic specialization <Swift.Dictionary<Swift.String, Swift.Int>, Swift.Array<XCLogParser.SwiftTypeCheck>> of (extension in Swift):Swift.Sequence.compactMap<A>((A.Element) throws -> Swift.Optional<A1>) throws -> Swift.Array<A1> at /build/<compiler-generated>:0
0x5598e503ee3f, XCLogParser.SwiftCompilerTypeCheckOptionParser.parse(from: Swift.Dictionary<Swift.String, Swift.Int>) -> Swift.Dictionary<Swift.String, Swift.Array<XCLogParser.SwiftTypeCheck>> at /build/.build/checkouts/xclogparser/Sources/XCLogParser/parser/SwiftCompilerTypeCheckOptionParser.swift:33
0x5598e503d9a4, XCLogParser.SwiftCompilerParser.parse() -> () at /build/.build/checkouts/xclogparser/Sources/XCLogParser/parser/SwiftCompilerParser.swift:73
0x5598e502d872, XCLogParser.ParserBuildSteps.(decorateWithSwiftcTimes in _3469993AC311903DEC578A49106939F6)(XCLogParser.BuildStep) -> XCLogParser.BuildStep at /build/.build/checkouts/xclogparser/Sources/XCLogParser/parser/ParserBuildSteps.swift:298
0x5598e5028456, XCLogParser.ParserBuildSteps.parse(activityLog: XCLogParser.IDEActivityLog) throws -> XCLogParser.BuildStep at /build/.build/checkouts/xclogparser/Sources/XCLogParser/parser/ParserBuildSteps.swift:95
0x5598e50b7258, function signature specialization <Arg[7] = Dead> of static XCMetricsBackendLib.LogParser.parseFromURL(_: Foundation.URL, machineName: Swift.String, projectName: Swift.String, userId: Swift.String, userIdSHA256: Swift.String, isCI: Swift.Bool, sleepTime: Swift.Optional<Swift.Int>) throws -> XCMetricsBackendLib.BuildMetrics at /build/Sources/XCMetricsBackendLib/UploadMetrics/LogProcessing/LogParser.swift:54
0x5598e50b7dd0, static XCMetricsBackendLib.LogParser.parseFromURL(_: Foundation.URL, machineName: Swift.String, projectName: Swift.String, userId: Swift.String, userIdSHA256: Swift.String, isCI: Swift.Bool, sleepTime: Swift.Optional<Swift.Int>) throws -> XCMetricsBackendLib.BuildMetrics at /build/<compiler-generated>:0
0x5598e50b7dd0, function signature specialization <Arg[3] = Dead> of static XCMetricsBackendLib.MetricsProcessor.process(metricsRequest: XCMetricsBackendLib.UploadMetricsRequest, logURL: Foundation.URL, redactUserData: Swift.Bool) throws -> XCMetricsBackendLib.BuildMetrics at /build/Sources/XCMetricsBackendLib/UploadMetrics/LogProcessing/MetricsProcessor.swift:13
0x5598e50a7812, static XCMetricsBackendLib.MetricsProcessor.process(metricsRequest: XCMetricsBackendLib.UploadMetricsRequest, logURL: Foundation.URL, redactUserData: Swift.Bool) throws -> XCMetricsBackendLib.BuildMetrics at /build/<compiler-generated>:0
0x5598e50a7812, closure #1 () -> () in XCMetricsBackendLib.ProcessMetricsJob.dequeue(Queues.QueueContext, XCMetricsBackendLib.UploadMetricsRequest) -> NIO.EventLoopFuture<()> at /build/Sources/XCMetricsBackendLib/UploadMetrics/Jobs/ProcessMetricsJob.swift:68
0x5598e444d68d, reabstraction thunk helper from @escaping @callee_guaranteed () -> () to @escaping @callee_unowned @convention(block) () -> () at /build/<compiler-generated>:0
0x7fd67fa68406
0x7fd67fa73c28
0x7fd67fa748cd
0x7fd67fa7c521
0x7fd6804526da
0x7fd67e65d71e
0xffffffffffffffff

created time in a month

push eventspotify/XCMetrics

ecamacho

commit sha ad8ec24910edba6d0ec0a1a080b02521570b98e5

deploy: 0f449cc9dc328de3fcd85e08edec18f43da3a041

view details

push time in a month

issue openedspotify/XCMetrics

Upload client stuck when there's no failed upload

I'm triggering the xcmetric binary through scripts and didn't use the launcher. I notice that occasionally xcmetric runs forever when I trigger it without any new xcactivitylog.

I did a very brief skim on the source code, please kindly correct me if I'm wrong:

In MetricUploaderLogic.swift, it seems both cleanedUpLogs and savedUploadRequests need to be received before we can send mobiusLoopCompleted? For my cases, I never received savedUploadRequests.

Then I trace it back to UploadMetricsEffectHandler.swift, line 42, there's an empty check

if !failedURLs.isEmpty {
    effects.append(.logsUploadFailed(logs: failedURLs))
}

So it seems when nothing fails, the logsUploadFailed will be skipped, and consequently persistNonUploadedLogs will not be triggered, so in the end no savedUploadRequests events will be emitted.

Currently I removed the empty check and it seems to work for my cases now. Have I understood the problem correctly? And will there be any other unwanted side effects if I remove the empty check?

created time in a month

issue commentspotify/XCLogParser

Invalid or no xcactivitylog file

The issue still reproduces on Xcode 12.1. Output logs from Xcode's Build command are parseable, but from xcodebuild -archive isn't. Archive's logs are smaller than those were build with Xcode (1 MB vs 13 MB). I validate logs withgzip -t ...

birwin93

comment created time in a month

pull request commentspotify/XCMetrics

Add support for Redis server password

I haven't tested this change directly (there seems to be an issue with Azure Redis servers that I haven't solved), but I did test it with RediStack directly in a sample and it worked exactly as expected.

dalemyers

comment created time in a month

PR opened spotify/XCMetrics

Add support for Redis server password

The existing implementation does not support passing in a password. This change allows an envirornment variable REDIS_PASSWORD to be set which will be propagated through.

Here's the catch: This is totally untested. It looks like a straightforward enough change, so I don't foresee any issues, but I haven't yet been able to get things up and running to test. I can probably test at some point, but it will likely be a day or two at minimum before I do.

+14 -3

0 comment

4 changed files

pr created time in a month

push eventspotify/XCMetrics

ecamacho

commit sha 383ab47a40b000f7f070c1229567bbb8a9f891a9

deploy: 05423299c523b14856bf1842bcf2eb651cb26d5e

view details

push time in a month

issue openedspotify/XCMetrics

Question: Just wondering if we can use configuration file when backend deployment

So because we will be adding the database username and password when deploying the backend, is there another way to build this with a configuration file so that we could encrypt the password/username.

Thank you :)

created time in a month

issue commentspotify/XCMetrics

What tools were used to create the gif?

For static images, I use draw.io However for such gifs, what tools are used? Is it a matter of overlaying multiple static images to form a gif? Are there some tools that make this easier?

ChaiBapchya

comment created time in a month

issue openedspotify/XCMetrics

What tools were used to create the gif?

I found the xcmetrics working gif pretty useful to understand. I was curious to learn how that gif was created? What tools were used to design/create it?

https://github.com/spotify/XCMetrics/blob/gh-pages/images/xcmetrics-open-source-xcode-tool.gif

created time in a month

PR opened spotify/XCMetrics

Implement a BES metrics repository which proxies data to a BES backend

Motivation:

We'd like to send build data to a gRPC endpoint based on Bazel's Build Event Stream. I assume this might be of value to other folks either migrating to build iOS projects with Bazel, or DevX teams supporting multiple build systems and interested in a unified solution.

This implementation is workable as-is for us and we'll be launching the alpha immediately. That said, this lives on our fork, and upstreaming isn't really a blocker for us, but we are happy to contribute it back if there is interest.

Implementation:

Based on the presence of XCMETRICS_BES_* env vars, the server now supports booting into "BES Proxy" mode in which it will send parsed xcactivity logs to the specified BES server instead of persisting to the database; this has limited the surface area of the changes to the addition of a new implementation of the MetricsRepository protocol.

As this PR also contains generated gRPC code, I'll update this PR message with a list of the items to look at during review once the links are available.

+33167 -2

0 comment

39 changed files

pr created time in a month

issue commentspotify/XCLogParser

no detail information when use HTML parser

image

The command execution does not finish, and the memory usage is increasing rapidly. I check the generated HTML, I see the same situation as in StephenCheung's image

StephenCheung

comment created time in a month

issue openedspotify/XCLogParser

no detail information when use HTML parser

企业微信截图_f08aa286-9e4d-4b1f-877d-8b09381cebc3

just like the pic, cmd is xclogparser parse --project xxx --reporter html --output xxx

my Xcode version is 12.3 xclogparser version: XCLogParser 0.2.26

created time in a month

issue openedspotify/XCLogParser

Expose Reporter.makeLogReporter()

I'm using XCLogParser in a command-line tool that filters out some build steps. I would still like to be able to use the HTML reporter for the edited builds steps but HtmlReporter does not have a public initializer. A quick way to achieve what I want would be to make Reporter.makeLogReporter() public. This way all reporters could be initialized if needed

created time in 2 months

issue commentspotify/XCMetrics

Crash when running the latest docker image

It probably about 6Mb. As for warnings, about 120+ Warnings. Well bump the specs a bit and keep you posted.

FranzBusch

comment created time in 2 months

issue commentspotify/XCLogParser

The file size of parsed json has become huge since Xcode 12.

@ecamacho Thank you for quick fixing. I confirmed that --omit_notes worked fine. If @jiaxw32 can get the same good result, I think we can close this issue. 🙏 How about you?

work fine for me now, nice work! @sgr-ksmt @ecamacho

test log as follows:

# xclogparser version
% ./xclogparser version
XCLogParser 0.2.26

# parse with containing the notes
% ./xclogparser parse --reporter json --output report.json --file  C5A4CC00-2064-4733-BC2C-AF6A599917CF.xcactivitylog
File written to ~/XCBuildLogParser/tools/report.json

# parse with ignoring the nodes
% ./xclogparser parse --reporter json --output report_without_notes.json --file  C5A4CC00-2064-4733-BC2C-AF6A599917CF.xcactivitylog --omit_notes
File written to ~/XCBuildLogParser/tools/report_omit_notes.json

# list the report file size
% ls -lh *.json
-rw-r--r--  1 user  staff   2.1G  3  3 16:22 report.json
-rw-r--r--  1 user  staff   236M  3  3 16:24 report_omit_notes.json

sgr-ksmt

comment created time in 2 months